我有一个需要在管理权限下运行的进程。我需要普通的jo来运行这个过程,但是我不想让所有人都访问...所以我创建了一个简单的类,它将以管理员身份运行这一个任务,使用模拟。
代码非常严格,但我无法理解为什么会崩溃。 HELP ?? !!
我是通过批处理文件运行的,我甚至将需要执行的文件复制到本地硬盘,认为这可能是通过网络运行应用程序的权限问题。
public static Process ImpersonateProcess(string exe, string args, string Username, string Password)
{
ProcessStartInfo psi = new ProcessStartInfo(exe);
psi.Arguments = args;
psi.UseShellExecute = false;
psi.UserName = Username;
psi.Password = new SecureString();
foreach (char c in Password.ToCharArray())
{
psi.Password.AppendChar(c);
}
Process proc = null;
Console.WriteLine("starting...");
proc = Process.Start(psi);
Console.WriteLine("started");
return proc;
}
public static Process ImpersonateProcess(string exe, string args, string Username, string Password)
{
ProcessStartInfo psi = new ProcessStartInfo(exe);
psi.Arguments = args;
psi.UseShellExecute = false;
psi.UserName = Username;
psi.Password = new SecureString();
foreach (char c in Password.ToCharArray())
{
psi.Password.AppendChar(c);
}
Process proc = null;
Console.WriteLine("starting...");
proc = Process.Start(psi);
Console.WriteLine("started");
return proc;
}
在上面的代码中,我永远不会“开始”。它在Process.Start(psi)中抛出一个错误,并显示错误消息“目录名无效。”
答案 0 :(得分:16)
可能是因为您没有设置WorkingDirectory属性。根据 文档:
重要提示:
如果提供了UserName和Password,则必须设置WorkingDirectory属性。如果未设置该属性,则默认工作目录为%SYSTEMROOT%\ system32。