2010-11-05 62 views
8

我必须使用System.Diagnostics.Process.Start()启动命令行程序并以管理员身份运行它。用C#管理员权限启动进程

此操作也将由计划任务每​​天运行。

+5

问题在哪里? – 2010-11-05 14:11:33

回答

0

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

9

我只是尝试使用:

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

,如果我跑我的程序作为管理员这工作得很好,但是当计划任务运行它,它不走“运行方式”中考虑我想。

+0

Yepaaah。好的解决方案感谢分享。你让我今天一整天都感觉很好! – Nasenbaer 2011-10-27 15:40:22

2

如果您正在使用计划任务,则可以设置要在其下运行的任务的用户和密码。

在任务上使用管理员凭据,你会没事的。

随着Process.Start,您需要提供UserNamePasswordProcessStartInfo

Process p = new Process("pathto.exe"); 
p.StartInfo.UserName = "Administrator"; 
p.StartInfo.Password = "password"; 
p.Start(); 
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); 

您必须在您的项目属性中允许不安全的代码。

希望得到这个帮助。

1

请注意,只要有人可以仔细阅读应用程序并查看其中的内容,以明文形式在程序中存储密码永远不会安全。使用SecureString将存储的密码转换为SecureString密码不会使其更安全,因为明文密码仍然存在。

使用SecureString的最佳方式是一次只传递一个字符进行转换,而不需要在内存中或硬盘上的任何位置拥有完整的未加密密码。在该角色被转换之后,程序应该忘记它,然后继续下一个。

这可以做,我认为只有通过传递字符进行翻译,因为他们正在输入到控制台由用户。