【发布时间】:2011-05-05 15:10:11
【问题描述】:
我必须使用 System.Diagnostics.Process.Start() 启动一个命令行程序并以管理员身份运行它。
此操作也将由计划任务每天运行。
【问题讨论】:
-
问题在哪里?
标签: c# administrator process.start
我必须使用 System.Diagnostics.Process.Start() 启动一个命令行程序并以管理员身份运行它。
此操作也将由计划任务每天运行。
【问题讨论】:
标签: c# administrator process.start
请注意,只要有人可以细读应用程序并查看其中的内容,在程序中以明文形式存储密码永远不会安全。使用 SecureString 将存储的密码转换为 SecureString 密码并不会使其更安全,因为明文密码仍然存在。
使用 SecureString 的最佳方式是一次传递一个字符以进行转换,这种方式不需要在内存或硬盘驱动器的任何地方都有完整的未加密密码。转换该字符后,程序应该忘记它,然后继续下一个。
我认为这可以通过在用户输入控制台时传递字符进行翻译来完成。
【讨论】:
使用登录名和密码运行进程的更好安全选择是使用 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);
您必须在项目属性中允许不安全代码。
希望对您有所帮助。
【讨论】:
我找到了,我需要在常规设置中设置计划任务以最高权限运行应用程序。
【讨论】:
如果您正在使用计划任务,您可以设置任务运行的用户和密码。
在任务上使用管理员凭据,你会没事的。
对于Process.Start,您需要为ProcessStartInfo 提供UserName 和Password:
Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
【讨论】:
我刚刚尝试使用:
Process p = new Process();
p.StartInfo.Verb = "runas";
如果我以管理员身份运行我的程序,这可以正常工作,但是当计划任务运行它时,我认为它不会考虑“runas”。
【讨论】: