在C#中以管理员权限启动进程

9

我需要使用System.Diagnostics.Process.Start()启动一个命令行程序,并以管理员身份运行它。

这个操作每天也会通过计划任务运行。


7
问题在哪里? - Etienne de Martel
5个回答

9

我刚刚尝试使用:

Process p = new Process();
p.StartInfo.Verb = "runas";

如果我以管理员身份运行程序,这个方法就可以正常工作,但是当计划任务运行它时,它似乎没有考虑到“runas”的参数。


4

使用SecureString类加密密码是更安全的运行带有登录和密码的进程的选项。以下是一段代码示例:

string pass = "yourpass";
string name ="login";
SecureString str;
ProcessStartInfo startInfo = new ProcessStartInfo();
char[] chArray = pass.ToCharArray();
fixed (char* chRef = chArray)
{
    str = new SecureString(chRef, chArray.Length);
}
startInfo.Password = str;
startInfo.UserName = name;
Process.Start(startInfo);

你需要在项目属性中允许不安全的代码。

希望这可以帮到你。


2
如果您正在使用计划任务,可以设置任务运行的用户和密码。 使用管理员凭据在任务上运行即可。 使用Process.Start时,需要为ProcessStartInfo提供UserNamePassword
Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();

2
请注意,在程序中以明文形式存储密码是不安全的,只要有人可以查看应用程序并查看其中的内容。使用SecureString将存储的密码转换为SecureString密码并不会使其更加安全,因为明文密码仍然存在。
使用SecureString的最佳方式是以某种方式逐个字符地传递进行转换,而不需要在内存或硬盘上拥有完整的未加密密码。转换那个字符后,程序应该忘记它,然后继续下一个。
我认为这只能通过在用户键入控制台时将字符传递进行转换来完成。

虽然这是正确的,但这不是 DomBar 想要问的。这应该是一个评论,而不是一个答案。 - Nenad

0

我找到了,我需要在常规设置中设置计划任务以最高权限运行应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接