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

本文关键字:提示 一次 权限 子进程 是否 | 更新日期: 2023-09-27 18:24:29

all。这似乎是一个重复的问题,这里有很多关于提升和降低儿童过程的问题。

我知道使用UseShellExecute = trueVerb = "runas"选项来启动具有提升权限的子进程。

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

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

我在这里的问题是没有用提升的访问权限启动子进程,我想知道是否有一种方法可以只提示提升一次访问权限,然后启动同一个子进程几次,例如其中8次。

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

我不能使用清单路由来要求整个应用程序以管理员权限运行,因为这对我们的许多用户来说不是一个选项。根据@MPatel的评论进行编辑:为了澄清,我们特别不强制用户按照设计决策以管理员身份运行应用程序。

很明显,你可以看到,当你每次想要运行其中一项任务时,都必须点击8次UAC对话,这会变得多么烦人。

在搜索过程中,我看到了这篇文章:Vista UAC最终指南,但我在C#,.NET 3.5项目中实现C++dll时遇到了问题。这篇文章基本上让我问这是否可能。

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

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

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

然后,每当您需要启动具有提升权限的进程时,您都可以通过使用某种进程间通信(NamedPipes、TcpClient等)将此请求转发给您的提升进程,而该进程将照常启动此进程,从而导致提升进程,因为它是从提升进程启动的。

首先,微软发布了一个关于处理UAC的指导方针。显示烦人的用户提示背后的理念是,微软希望开发人员从头开始用最少的权限创建应用程序。我不认为有什么神奇的参数可以在只有一个用户提示的情况下派生出几个提升的子进程。

与提升主应用程序的解决方案相比,您可以创建一个服务器/服务应用程序,并将所有管理人员转移到其中。该应用程序将在后台不使用UI的情况下运行。它将只显示一次UAC提示。您可以设置具有特定池大小的线程池,以便高效地处理任务。创建任何子进程时,该子进程都可以在本地以静默方式运行非管理任务。要执行管理任务,它将使用任何IPC技术与服务器/服务应用程序进行通信。

我希望我的建议能帮助你。当然,这个解决方案需要额外的编码工作。如果你认为这种方法对你来说可行,我可以分享更多的线索。