我必须使用 System.Diagnostics.Process.Start() 启动命令行程序并以管理员身份运行它。
此操作也将由计划任务每天运行。
我必须使用 System.Diagnostics.Process.Start() 启动命令行程序并以管理员身份运行它。
此操作也将由计划任务每天运行。
我只是尝试使用:
Process p = new Process();
p.StartInfo.Verb = "runas";
如果我以管理员身份运行我的程序,这很好用,但是当计划任务运行它时,我认为它不会考虑“runas”。
使用登录名和密码运行进程的更好的安全选项是使用 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
,您需要为提供UserName
和:Password
ProcessStartInfo
Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
请注意,只要有人可以仔细阅读应用程序并查看其中的内容,在程序中以明文形式存储密码永远不会安全。使用 SecureString 将存储的密码转换为 SecureString 密码并不会使其更安全,因为明文密码仍然存在。
使用 SecureString 的最佳方法是以某种方式一次传递一个字符进行转换,而无需在内存或硬盘驱动器的任何地方都有完整的未加密密码。转换该字符后,程序应该忘记它,然后继续下一个。
我认为这可以通过在用户输入控制台时传递字符进行翻译来完成。
我找到了,我需要设置计划任务以在常规设置中以最高权限运行应用程序。