在C#中以管理员权限启动流程

我必须使用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 ,您需要为ProcessStartInfo提供UserNamePassword

 Process p = new Process("pathto.exe"); p.StartInfo.UserName = "Administrator"; p.StartInfo.Password = "password"; p.Start(); 

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

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

这可以通过我认为只有通过传递字符进行翻译才能完成,因为用户将它们输入到控制台中。

我发现它,我需要设置计划任务以在常规设置中以最高权限运行应用程序。