所有。这似乎是一个重复的问题,在这里有很多关于提升和取消儿童过程的问题。
我知道使用UseShellExecute = true
和Verb = "runas"
选项一起启动具有提升权限的子进程。
示例(在许多答案中找到):
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
UseShellExecute = true, // !
Verb = "runas",
};
我的问题不是启动具有提升访问权限的子进程,我想知道是否有一种方法只提示一次提升访问权限,之后启动相同的子进程几次,比如说8次例如,他们。
我正在处理的应用程序使用排队系统来处理任务。根据用户的核心数,为每个核启动子进程(QueueProcessor),然后开始处理该队列。所以从本质上讲,我想检查用户的权限,提示一次提升权限,并启动所有8个队列处理器。
我无法使用清单路由来要求整个应用程序在管理员权限中运行,因为这不是我们许多用户的选项。按照@ MPatel评论编辑:为了澄清,我们特别强制要求用户根据设计决策以管理员身份运行应用程序。
显然,当你每次想要运行其中一项任务时,你必须点击UAC对话8次,你会发现它会变得烦人。
我在搜索期间遇到过这篇文章:Vista UAC The Definitive Guide,但我在C#,.NET 3.5项目中实现C ++ dll时遇到了麻烦。这篇文章基本上让我问这是否可能。
另外一件值得一提的事情是:我不确定我是否会稍微误解这个问题。用户必须至少具有足够的访问权限才能使用我们程序使用的基本SQL功能。因此,我认为我的问题可能不是让子进程以完全管理员权限运行,而只是让子进程启动。我遇到的问题是.NET不允许某些用户从正在运行的应用程序运行子进程。让用户使用"以管理员身份运行"运行主应用程序似乎解决了这个问题。是否有一些UAC特定的权限,我可以设置一次提示只是允许主应用程序启动child.exe?
答案 0 :(得分:10)
您可以编写自己的进程(C#应用程序),该进程将由主应用程序以提升的权限启动。
然后,无论何时需要启动具有提升权限的进程,您都可以通过使用某种进程间通信(NamedPipes,TcpClient等)将此请求转发到提升的进程,并且将像往常一样启动此进程,导致升高的过程导致它从一个升高的过程开始。
答案 1 :(得分:0)
首先,Microsoft发布了有关处理UAC的指南。显示恼人的用户提示背后的理念是,微软希望开发人员从头开始创建具有最小权限的应用程序。我不认为有一些神奇的参数可以只用一个用户提示来分叉几个提升的子进程。
与提升主应用程序的解决方案相比,您可以创建服务器/服务应用程序并将所有管理内容移入其中。应用程序将在后台运行而不使用UI。它只会显示一次UAC提示。您可以设置具有特定池大小的线程池,以便有效地处理任务。创建任何子进程时,子进程可以本地和静默运行非管理任务。要执行管理任务,它将使用任何IPC技术与服务器/服务应用程序进行通信。
我希望我的建议可以帮到你。当然,该解决方案需要额外的编码工作。如果您认为这种方法适用于您,我可以分享更多潜在客户。