权限提升C#的应用内请求

本文关键字:应用 请求 权限 | 更新日期: 2023-09-27 18:29:20

我有一个应用程序,在极少数情况下需要更改其注册表设置。此外,在它的第一次执行过程中,它需要创建一个新的密钥。我正在Windows7中开发这个。我得到ThrowUnauthorizedAccessException。如何强制Windows向我提供UAC提示以临时提升我的权限?

提前谢谢。

权限提升C#的应用内请求

是否允许所有用户修改此设置?如果是这样,最简单的解决方案是修改安装程序,为UsersFull 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中的游戏数据。正确有效的操作是修改上的ACL

C:'Program Files'Blizzard'World of Warcraft

文件夹,以便所有用户都可以完全控制。事实上,在暴雪采取行动之前,微软发布了一个应用程序兼容性更新,让所有用户在下次以管理员身份运行魔兽世界文件夹时都能完全控制它。

另一种常见的情况是,当暴雪启动器以管理权限启动时,它会更新HKLM中的注册表项,记录游戏所在的位置。例如,当我将魔兽世界从硬盘移动到SSD驱动器时,就会发生这种情况

以管理员身份运行启动器一次,以便更新程序正常工作。