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

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

我试图使用InstallUtil.exe安装一个服务,但通过Process.Start..下面是代码:

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

哪里m_strInstallUtil是指向“InstallUtil.exe”和strExePath是我的服务的完全限定路径/名称。

从提升的命令提示符运行命令行语法是可行的;从我的应用程序运行(使用上面的代码)不能。我假设我正在处理某个进程提升问题,那么我将如何在一个提升的状态下运行我的进程呢?我需要看看ShellExecute为了这个?

这都是在WindowsVista上完成的。我正在VS 2008调试器中运行进程,将其提升为ADMIN权限。

我也试过startInfo.Verb = "runas";但它似乎解决不了这个问题。


慕后森
浏览 599回答 3
3回答

米脂

通过将startInfo对象的谓词属性设置为“runas”,可以指示应该使用提升的权限启动新进程,如下所示:startInfo.Verb = "runas";这将导致Windows的行为就像进程已从资源管理器中使用“RunasAdministrator”菜单命令启动一样。这确实意味着UAC提示将出现,并且需要用户确认:如果这是不可取的(例如,因为它发生在一个冗长的进程中),则需要通过以下方式运行整个主机进程创建和嵌入应用程序声明(UAC)若要求“最高的Available”执行级别:这将导致应用程序启动后立即出现UAC提示,并导致所有子进程在没有额外提示的情况下以更高的权限运行。编辑:我看到你刚刚编辑了你的问题,说“runas”不适合你。这真的很奇怪,因为它应该(并为我在几个生产应用程序)。但是,通过嵌入清单来要求父进程以提升的权限运行肯定是可行的。

鸿蒙传说

根据文章ChrisCorio:教你的应用程序好好玩WindowsVista用户帐户控制,MSDN杂志,2007年1月,只有ShellExecute检查嵌入的清单,并在需要时提示用户进行提升。CreateProcess而其他API则不然,希望它能有所帮助。另见:与.chm相同的条款.
打开App,查看更多内容
随时随地看视频慕课网APP