竞争对手应用安装到与我相同的文件夹,无需管理员权限

app*_*ski 5 c# permissions uac

首先,大家好,感谢您多次在这里寻找帮助我或教我一些东西.

我为我玩的游戏制作了一个自定义HUD,我正在使用C#中的安装程序,受到同一游戏的另一个HUD的启发.它将所有脚本文件下载并覆盖到现有目录:

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf
Run Code Online (Sandbox Code Playgroud)

[遗憾的是,我无法控制使用哪个文件夹,因为我正在修改Valve安装的文件]

为了删除文件夹,添加文件夹或复制文件,每次启动exe时我都必须使用应用程序清单来增加用户权限:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

不知何故,我受到启发的安装程序是安装到我所在的同一文件夹,而不强制UAC提示.

他的应用程序仅显示安全警告,但如果我取消选中"始终检查"复选框,我可以反复运行它而无需验证任何特殊权限:

http://www.trishtech.com/img_art_a/win7_publisher_not_verified_0.jpg>">

有关如何让我的应用程序更加无缝的建议吗?我已经联系了另一个应用程序的作者,他说他也在使用C#,但他不知道他正在做什么特别的工作.

编辑:我知道的一些事情我们做的不同,以防它们以某种方式产生影响:

  • 我正在使用文件浏览器来决定放置文件的位置,因此可以从任何地方运行应用程序.
    • 他只是将它们输出到与exe相同的目录,要求将exe放在目标文件夹中.
  • 我正在使用ILMerge将SharpZipLib与我的应用捆绑在一起.
    • 他只是将dll放在exe文件旁边的zip文件中.

sgm*_*ore 3

如果您尝试写入“C:\Program Files (x86)”,那么您需要管理员权限。因此,其他应用程序不得在那里创建文件,而是创建到不受 UAC 保护的目录。

如果您的文件是针对每个用户的,那么您可以在 appdata 文件夹中创建一个子文件夹并将文件保存在其中。

惯例是创建一个文件夹来标识公司,另一个文件夹来标识产品,

例如

var dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
          +    "\\MyCompanyName\\MyApplicationName";
Run Code Online (Sandbox Code Playgroud)