是否可以提升多个子进程的权限,只提示一次?

DeV*_*Vil 2 c# uac elevated-privileges

所有.这似乎是一个重复的问题,在这里有很多关于提升和取消儿童过程的问题.

我知道与使用提升权限启动一个子进程UseShellExecute = trueVerb = "runas"选项一起使用.

示例(在许多答案中找到):

var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
    UseShellExecute = true, // !
    Verb = "runas", 
};
Run Code Online (Sandbox Code Playgroud)

我的问题是没有启动具有提升访问权限的子进程,我想知道是否有一种方法只提示一次提升访问权限,之后启动相同的子进程几次,例如8个.

我正在使用的应用程序使用排队系统来处理任务.根据用户的内核数量,为每个内核启动子进程(QueueProcessor),然后开始处理此队列.所以从本质上讲,我想检查用户的权限,提示一次提升权限,并启动所有8个队列处理器.

我不能使用manifest-route来要求整个应用程序在Admin-rights中运行,因为这不是我们许多用户的选项.编辑按照@ MPatel的评论:为了澄清,我们特别强制不要强迫用户按照设计决策以管理员身份运行应用程序.

显然,当你每次想要运行其中一个任务时,你必须单击UAC对话8次时,你会看到它会变得烦人.

在我的搜索过程中,我遇到了这篇文章:Vista UAC The Definitive Guide,但我在C#,.NET 3.5项目中实现C++ dll时遇到了麻烦.这篇文章基本上让我问这是否可行.

还有一件事可能值得一提:我不确定我是否会稍微误解这个问题.用户必须至少具有足够的访问权限才能使用我们程序使用的基本SQL功能.因此,我认为我的问题可能不是让子进程以完全管理员权限运行,而只是让子进程启动.我遇到的问题是.NET不允许某些用户从正在运行的应用程序运行子进程.让用户使用"以管理员身份运行"运行主应用程序似乎可以解决此问题.是否有一些UAC特定权限我可以通过提示设置一次只是允许主应用程序启动child.exe?

Oli*_*ver 10

您可以编写自己的进程(C#应用程序),该进程将由主应用程序以提升的权限启动.

而且,无论何时需要启动具有提升权限的进程,您都可以通过使用某种进程间通信(NamedPipes,TcpClient等)将此请求转发到提升的进程,并且将像往常一样启动此进程,从而导致升高的过程导致它从一个升高的过程开始.

  • +1,或者我们甚至可以安装具有所需权限的Windows服务并让它为我们的任务生成子项,然后根本没有UAC弹出窗口(除了服务安装期间或手动启动它). (2认同)