Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序内权限升级请求C#.NET_C#_.net_Uac - Fatal编程技术网

应用程序内权限升级请求C#.NET

应用程序内权限升级请求C#.NET,c#,.net,uac,C#,.net,Uac,我有一个应用程序,在极少数情况下需要更改其注册表设置。在第一次执行期间,它还需要创建一个新密钥。我在Windows7中开发这个。我得到了ThrowUnauthorizedAccessException。如何强制Windows给我UAC提示以临时提升我的权限 提前感谢。是否允许所有用户修改此设置?如果是这样,最简单的解决方案是修改安装程序,让用户完全控制注册表项 如果只有管理员可以修改此设置,则您需要启动程序的另一个副本,并要求Windows提升它: ProcessStartInfo startI

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


提前感谢。

是否允许所有用户修改此设置?如果是这样,最简单的解决方案是修改安装程序,让用户
完全控制注册表项

如果只有管理员可以修改此设置,则您需要启动程序的另一个副本,并要求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);
让应用程序检查
setlogginenabled
开关,进行更改,然后退出

更新:一种常见情况是魔兽世界的玩家。由于允许游戏在运行时进行自我更新,必须允许所有用户修改
程序文件中的游戏数据。正确有效的操作是修改服务器上的ACL

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

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


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

您无法提升现有进程的权限。您需要生成具有更高权限的新进程。问题是权限级别加倍为完整性级别。但为了支持已经运行的进程的安全提升,该进程需要一个它可能提升到的最高级别的完整性级别。否则,当您仍以较低的完整性/权限级别运行时,不受信任的其他进程可能会操纵您的进程。您是否可以使用安装程序(例如使用WiX)安装应用程序,并在安装时创建注册表项?你也可以同时分配写权限;o) 用户为什么要移动应用程序?真的,我很想让用户知道,如果他们移动应用程序,所有的赌注都输了。我不认为开发人员应该创建这样的自愈应用程序。除非有我忽略的要求,或者有充分的理由这样做?谢谢。这是我见过的最接近的答案。