我必须使用System.Diagnostics.Process.Start()启动命令行程序并以管理员身份运行它。
此操作也将每天由计划任务运行。
答案 0 :(得分:9)
我只是尝试使用:
Process p = new Process();
p.StartInfo.Verb = "runas";
如果我以管理员身份运行我的程序,这可以正常工作,但是当计划任务运行它时,我认为它不会考虑'runas'。
答案 1 :(得分: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 :(得分:2)
如果您正在使用计划任务,则可以设置要在其下运行的任务的用户和密码。
在任务上使用管理员凭据,你会没事的。
使用Process.Start
,您需要为UserName
提供Password
和ProcessStartInfo
:
Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
答案 3 :(得分:1)
请注意,只要有人可以仔细阅读应用程序并查看其中的内容,在程序中以明文形式存储密码就绝不安全。使用SecureString将存储的密码转换为SecureString密码不会使其更安全,因为明文密码仍然存在。
使用SecureString的最佳方法是一次传递单个字符进行转换,不需要在内存或硬盘驱动器上的任何位置使用完整的未加密密码。在转换该角色后,程序应该忘记它,然后继续下一个。
这可以完成我认为只有通过传递字符才能进行翻译,因为用户将它们输入到控制台中。
答案 4 :(得分:0)
我发现它,我需要设置计划任务以在常规设置中以最高权限运行应用程序。