C# · 12月 25, 2021

c#从UAC管理员级别进程降低权限启动进程

我的应用程序有一个主要问题.我有一个app& updater作为单独的exe文件.当更新可用时,更新程序会执行更新,并在进程完成时启动我的应用程序.主要问题是 – 应用程序安装在程序文件文件夹中,因此更新程序需要UAC管理员权限,这没关系,但是当我需要运行我的应用程序时,更新程序需要以普通用户身份运行它,因为如果它以管理员身份运行和drop不起作用(不是应用程序问题,UAC阻止它).我尝试了几种不同的解决方案,甚至是这一种:
How to run NOT elevated in Vista (.NET)

它没有帮助我 – 我的应用程序是以管理员身份运行的.

解决方法 你最好避免从升高的过程开始一个非升级的过程.这是棘手的部分,容易出错.

这种方法更好:

>您的更新程序最初以非提升的应用程序启动,其清单具有asInvoker级别.
>启动时,它使用runas谓词以提升的权限重新启动自身,并传递命令行参数以指示它.此实例执行更新并返回.
>再次出现非提升的更新程序,并使用在步骤1中启动第一个更新程序实例的相同非提升用户令牌启动应用程序.

非常简单和强大.