【问题标题】:Is it possible to elevate privileges of multiple child processes, prompting only once?是否可以提升多个子进程的权限,只提示一次?
【发布时间】:2014-11-20 00:07:51
【问题描述】:

所有。这似乎是一个重复的问题,这里有很多关于提升和降低子进程的问题。

我知道使用UseShellExecute = trueVerb = "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


【解决方案1】:

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

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

【讨论】:

  • +1。这里的问题是,对于不同的价格子树,海拔反复发生。这种方法可确保有一个提升的子树可用于等待命令。
  • +1,或者我们甚至可以安装一个具有所需权限的 Windows 服务并让它为我们的任务生成子项,那么根本不会有 UAC 弹出窗口(除了在服务安装期间或手动开始它)。
【解决方案2】:

首先,微软发布了关于处理 UAC 的指南。显示烦人的用户提示背后的理念是微软希望开发人员从头开始创建具有最小权限的应用程序。我不认为有一些神奇的参数可以只用一个用户提示来分叉几个提升的子进程。

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

希望我的建议可以帮到你。当然,该解决方案需要额外的编码工作。如果您认为该方法对您可行,我可以分享更多潜在客户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2016-05-08
    • 2010-11-13
    • 2011-10-16
    • 2022-09-28
    • 2010-11-05
    相关资源
    最近更新 更多