我正在尝试使用 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 上进行的。我在提升为管理员权限的 VS2008 调试器中运行该进程。
我也试过设置 startInfo.Verb = "runas";
但似乎没有解决问题。
最佳答案
您可以通过将 startInfo 对象的 Verb 属性设置为“runas”来指示新进程应该以提升的权限启动,如下所示:
startInfo.Verb = "runas";
这将导致 Windows 的行为就好像进程是从资源管理器中使用“以管理员身份运行”菜单命令启动的一样。
这确实意味着 UAC 提示将出现并且需要用户确认:如果这是不可取的(例如因为它会在一个漫长的过程中发生),您需要运行整个具有提升权限的主机进程 Create and Embed an Application Manifest (UAC)要求“highestAvailable”执行级别:这将导致 UAC 提示在您的应用启动后立即出现,并导致所有子进程以提升的权限运行而无需额外提示。
编辑:我看到您刚刚编辑了您的问题以声明“runas”不适合您。这真的很奇怪,因为它应该(并且在几个生产应用程序中对我来说确实如此)。不过,通过嵌入 list 要求父进程以提升的权限运行应该绝对可行。
关于c# - 以编程方式提升进程特权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133379/