一尘不染

以编程方式提升流程特权?

c#

我正在尝试使用InstallUtil.exe安装服务,但通过调用Process.Start。这是代码:

ProcessStartInfo startInfo = new ProcessStartInfo (m_strInstallUtil, strExePath);
System.Diagnostics.Process.Start (startInfo);

其中m_strInstallUtil是“ InstallUtil.exe”的标准路径和exe,并且strExePath是我的服务的标准路径/名称。

从提升的命令提示符下运行命令行语法是可行的;从我的应用程序运行(使用上面的代码)没有。我假设我正在处理一些流程提升问题,那么如何在提升的状态下运行流程?我需要看看ShellExecute吗?

这一切都在Windows Vista上。我正在提升为admin特权的VS2008调试器中运行该过程。

我也尝试设置,startInfo.Verb = "runas";但似乎无法解决问题。


阅读 159

收藏
2020-05-19

共1个答案

一尘不染

您可以通过将startInfo对象的Verb属性设置为’runas’来指示应使用提升的权限启动新进程,如下所示:

startInfo.Verb = "runas";

这将导致Windows表现为好像已使用“以管理员身份运行”菜单命令从资源管理器启动了该过程。

这确实意味着将出现UAC提示,并且需要用户确认:如果这是不希望的(例如,因为它将在冗长的过程中发生),则需要使用以下命令运行整个主机过程:通过创建和嵌入应用程序清单(UAC)来提高权限,以要求执行“
highestAvailable”执行级别:这将导致UAC提示在您的应用程序启动后立即出现,并使所有子进程以提升的权限运行而无需其他提示。

编辑:我看到您刚刚编辑您的问题,以指出“
runas”不适用于您。确实很奇怪,因为它应该这样做(并且在几个生产应用程序中对我也是如此)。但是,通过嵌入清单来要求父进程在提升权限的情况下运行应该是可行的。

2020-05-19