我有一个应用程序,在极少数情况下需要更改其注册表设置。在第一次执行期间,它还需要创建一个新密钥。我正在Windows 7中开发它。我得到ThrowUnauthorizedAccessException。如何强制Windows为我提供暂时提升权限的UAC提示?
提前致谢。
答案 0 :(得分:3)
是否允许所有用户修改此设置?如果是这样,最简单的解决方案是修改安装程序,以提供注册表项的用户 Full Control
。
如果只有管理员应该能够修改此设置,那么您需要启动另一个程序副本,要求Windows提升它:
ProcessStartInfo startInfo = new ProcessStartInfo("C:\Path\To\MyApplication.exe");
startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled)
System.Diagnostics.Process.Start(startInfo);
如果你很聪明,你会包含一些命令行参数,所以你可以告诉自己"它应该直接跳转到用户需要处理的软件部分。或者你的命令行参数可以说你想做什么:
ProcessStartInfo startInfo = new ProcessStartInfo(
"C:\Path\To\MyApplication.exe",
"/setLoggingEnabled yes");
startInfo.Verb = "runas"; //trigger a UAC prompt (if UAC is enabled)
System.Diagnostics.Process.Start(startInfo);
让您的应用程序检查setLoggingEnabled
开关,进行更改,然后退出。
更新:常见的情况是魔兽世界的玩家。由于允许游戏在运行时自行更新,因此必须允许所有用户修改Program Files
中的游戏数据。 正确且有效的操作是修改
C:\Program Files\Blizzard\World of Warcraft
文件夹,以便所有用户都拥有完全控制权。事实上,在暴雪一起采取行动之前,微软发布了一个应用程序兼容性更新,让所有用户在下次以管理员身份运行时可以完全控制WoW文件夹。
另一个常见的情况是,当暴雪启动器启动管理privelages时,它会更新HKLM中的注册表项,记录游戏所在的 。例如,当我将WoW从硬盘驱动器移动到SSD驱动器时会发生这种情况
作为管理员运行启动器一次,以便更新程序正常工作。