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

时间:2012-09-04 18:22:38

标签: c# permissions uac

首先,大家好,感谢您多次在这里搜索帮助我或教我一些东西。

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

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf

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

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

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

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

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

http://www.trishtech.com/img_art_a/win7_publisher_not_verified_0.jpg&gt;“&GT;

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

例如

var dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
          +    "\\MyCompanyName\\MyApplicationName";

答案 1 :(得分:2)

  

他只是将它们输出到与exe相同的目录,要求将exe放在目标文件夹中。

我认为不会是这样。同一个exe目录应该没有什么不同,你要么拥有权限,要么你没有权限。

“正常”响应是,写入您有权访问的目录。但这并不总是可行的。

如果您将应用程序作为服务运行,它会弹出我在Windows下认为的一次,但这似乎不适合您的用例。

我认为没有任何正确的方法来压制这样的信息,就像捕获22的情况一样。要做一些你不能做的事情,你需要获得许可(所以提升用户 - > UAC弹出窗口。)

答案 2 :(得分:0)

我将sgmoore的答案标记为正确的答案,虽然我自己的案例似乎有些陌生,我也想记录下来。

我已经将我的程序简化为基础并做了很多实验。我发现由于某种原因,他和我实际上可以复制文件并在该目录中创建文件夹。也许它对于steamapps文件夹来说是特别的,或者它只是一个让它在这种有限的情况下实际工作的错误,而它通常不适用于“真正的”程序。

奇怪的是,实际上需要UAC提示是从我的项目最初生成它的\ Bin \ Debug \文件夹中运行exe。如果我将我的exe移动到其他地方然后运行它,它工作正常。如果我从\ Bin \ Debug \文件夹中运行他的exe,他也不能正常工作。我无法弄清楚为什么会这样。

我注意到的其他事情是,当我的应用程序成功无异常时,我启动它时不会提示安全警告。它只是默默地打开然后工作。只要它显示安全警告,它就会失败。

我想协议将把这两个问题转化为新的问题,但是在这一点上它似乎很可能已经进入边缘/黑客领域,因为你们都同意这甚至根本不起作用。

我将重新构建我的程序,看看在这些奇怪的情况下我是否仍然能够使用全部功能,或者我是否必须重新启用UAC提升。