【发布时间】:2014-11-20 00:07:51
【问题描述】:
所有。这似乎是一个重复的问题,这里有很多关于提升和降低子进程的问题。
我知道使用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?
【问题讨论】:
-
以提升的权限启动父进程?这肯定会以相同的权限启动所有子进程。
-
我已经稍微编辑了这个问题。我们特别不强制用户以管理员身份运行。这就是为什么我在问题中添加最后一点的原因,我们的用户至少可以访问 sql 服务器并执行查询,所以这确实是我需要的所有权利。所以我认为我的问题可能更迫使父应用程序能够启动子进程。
标签: c# uac elevated-privileges