代码之家  ›  专栏  ›  技术社区  ›  Jerry

为什么模拟进程会返回“目录名无效”?

  •  4
  • Jerry  · 技术社区  · 17 年前

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

    代码非常严格,但我不明白为什么会崩溃。帮助??!!

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

        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;
        }
    

    在上面的代码中,我从来没有“开始”过。它在进程中引发错误。启动(psi)并显示错误消息“目录名无效”。

    1 回复  |  直到 14 年前
        1
  •  16
  •   Greg Beech    17 年前

    可能是因为你没有设置 WorkingDirectory 财产。根据 文档:

    重要注意事项:

    如果提供用户名和密码,则必须设置WorkingDirectory属性。如果未设置属性,则默认工作目录为%SystemRoot%\System32。