2011-11-10 62 views
5

我试图以管理员身份启动csript(登录的帐户拥有管理员权限)。将startinfo.verb设置为runas不起作用。C#以管理员身份启动命令

ProcessStartInfo p1 = new ProcessStartInfo(); 
p1.UseShellExecute = true; 
p1.Verb = "runas"; 
p1.FileName = "cscript"; 
p1.Arguments = "I:\\WPKG\\wpkg.js /synchronize /quiet /nonotify"; 
Process p = new Process(); 
p.StartInfo = p1; 
p.Start(); 

我可以让它以特权开始的唯一方法是手动设置用户名和密码。但是我无法硬编码该信息或将其放入配置中。没有任何方法可以让cmd在没有登录信息的情况下升级?

我也尝试添加使用(System.Security.Principal.WindowsIdentity.GetCurrent()。Impersonate())围绕上述代码没有运气。

注意:如果我直接运行bat文件,它的工作原理是,如果我使用硬编码密码运行,它可以工作。它只能提升没有登录信息从C#启动。

+0

显然你需要输入用户名和密码才能登录。为什么你不能只使用字符串连接来正确运行“runas”?如果你正在寻找一个如何获得管理员权利的解释一般看这里http://stackoverflow.com/questions/3583501/c-net-acquire-administrator-rights – foowtf

+0

我期望能够使用当前登录的用户。唯一一种与右键单击并以admin身份运行相同行为的方法是在登录信息中编码?一种吸吮。 – JeremyK

+0

好吧,这并不容易。如果您点击“以管理员身份运行”,您还必须先确认。这只是一种方便,所以你不必每次都输入你的密码(就像你在linux下做的那样)。否则,每个小应用程序都可能会利用您以管理员身份登录。 – foowtf

回答

1

此实用程序:

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

可能有助于还要注意在文章​​的评论

+1

http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista.aspx 使用该exe文件这工作。去检查代码,看看它为什么起作用,而我的不是。 – JeremyK

+0

啊,是的,我已经成功地使用了那个 - +1。 –

0

您有几种选择:

  • 使用runas实用程序(不是动词),并通过在用户名和密码。您可能需要手动进行一次保存凭证(只有重新启动才有效)。
  • 传中的ProcessStartInfo的用户名和密码(你需要将密码转换为SecureString
  • 使用runas动词(不实用)与UAC进行交互,如this question描述。
+0

我想使用runas(我设置.Verb),但UAC从不要求提升。该帖子中唯一报道的特殊情况是,UseShellExecute必须设置为true,这是我做的。 – JeremyK

相关问题