为什么假冒进程返回"目录名无效"?

Jer*_*rry 4 c# winforms

我有一个需要在管理权限下运行的进程.我需要普通的jo来运行这个过程,但是我不想让所有人都访问...所以我创建了一个简单的类,它将以管理员身份运行这个ONE任务,使用模拟.

代码是非常严格的前进,但我无法理解为什么这会崩溃.救命??!!

我通过批处理文件运行它,我甚至将需要执行的文件复制到本地硬盘驱动器,认为这可能是通过网络运行应用程序的权限问题.

    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;
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我永远不会"开始".它在Process.Start(psi)中抛出一个错误,并显示"目录名无效"的错误消息.

Gre*_*ech 16

可能是因为您没有设置WorkingDirectory属性.根据文件:

重要的提示:

如果提供了UserName和Password,则必须设置WorkingDirectory属性.如果未设置该属性,则默认工作目录为%SYSTEMROOT%\ system32.