使用C#中的管理员开始流程
-
29-09-2019 - |
题
我必须使用system.diagnostics.process.start()启动命令行程序,然后以管理员的身份运行它。
此操作也将每天由计划的任务运行。
解决方案 5
我发现它,我需要设置计划的任务以在一般设置中具有最高特权运行应用程序。
其他提示
我只是尝试使用:
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的最佳方法是在某种程度上一次传递单个字符进行转换,而该角色不需要在内存或硬盘驱动器中的任何地方都具有完整的未加密密码。转换该字符后,程序应该忘记它,然后继续进行下一个。
我认为,只有通过字符传递翻译时,就可以做到这一点,因为用户将其输入到控制台中。
不隶属于 StackOverflow