8

我必须使用 System.Diagnostics.Process.Start() 启动命令行程序并以管理员身份运行它。

此操作也将由计划任务每​​天运行。

4

5 回答 5

9

我只是尝试使用:

Process p = new Process();
p.StartInfo.Verb = "runas";

如果我以管理员身份运行我的程序,这很好用,但是当计划任务运行它时,我认为它不会考虑“runas”。

于 2010-11-05T14:11:20.700 回答
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);

您必须在项目属性中允许不安全代码。

希望这有帮助。

于 2010-11-10T12:26:27.947 回答
2

如果您使用计划任务,您可以设置任务运行的用户和密码。

在任务上使用管理员凭据,你会没事的。

使用Process.Start,您需要为提供UserName和:PasswordProcessStartInfo

Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
于 2010-11-05T14:13:44.850 回答
2

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

使用 SecureString 的最佳方法是以某种方式一次传递一个字符进行转换,而无需在内存或硬盘驱动器的任何地方都有完整的未加密密码。转换该字符后,程序应该忘记它,然后继续下一个。

我认为这可以通过在用户输入控制台时传递字符进行翻译来完成。

于 2013-06-29T20:38:24.270 回答
0

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

于 2010-11-05T14:15:09.000 回答