背景:我绝不是 Windows 安全/用户权限专家。我有一个应用程序(用 C# 编写),它必须能够在其根目录中写入/删除文件和文件夹,在磁盘上的其他位置写入/删除文件,在系统注册表(本地计算机)中写入/修改值并启动 &停止其他应用程序和服务。我认为至少其中一些操作需要管理员权限。
我尝试在关闭 UAC 的计算机上运行它,无需任何额外设置即可正常工作。但是,在打开 UAC 的计算机上(在 Windows 7 中高于“从不通知”的任何级别)它会崩溃。我需要它在所有计算机上工作。
到目前为止,我只需手动选中“以管理员身份运行此程序”复选框,一切都会好起来的。然而,现在我们决定允许客户自行安装此软件,并且它需要“开箱即用”运行。
我在 Visual Studio 2008 中有一个部署项目,它安装所有内容并在注册表中写入必要的启动数据。我现在需要做的是设置“以管理员身份运行此程序”标志。我猜这并不像我想的那么简单。
那么这样做的正确方法是什么?该程序在启动时启动,如果每次重新启动计算机时 UAC 都会弹出(并且可能使屏幕变暗),我们的客户会很恼火。
感谢您的帮助。
编辑:感谢您的回复。我意识到围绕 UAC 工作会不受欢迎,而且我可以看到 Microsoft 不支持“白名单”,因此它只会请求一次许可。很好,我可以尊重这一点,但是我确实有一些后续问题:
您能否提供一个链接,向我展示如何正确提升程序以纠正提升状态?是否有任何关于选项的文献等...基本上我喜欢 UAC 101 指南。
当我需要额外的权限时(然后才用 UAC 提示),有没有办法提升安全状态。基本上,这个应用程序在后台运行,大部分时间几乎什么都不做。它会时不时地检查一些文件(此时我需要能够写入磁盘并读取注册表(此时只读很好),但是由于它是一个临时文件夹,所以我在哪里并不重要'会说。如果有一个应用程序可以在没有任何权限的情况下写入的位置,那将是完美的。)
但是在某些时候,我将需要执行所有其余的任务(无论如何用户都需要确认此操作),因此如果 UAC 在此时提示,那将没有问题。有没有办法在此时提升它,然后将其恢复为默认权限?
这样的解决方案是否适用于旧版本的 Windows,包括 Vista 和 Xp(可能还有更旧的版本?) 需要什么才能使其工作?