2009-04-22 108 views
4

我有一个需要在管理权限下运行的进程。我需要一般的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; 
    } 

在上面的代码中,我从来没有 “开始”。它会在Process.Start(psi)中引发错误,并显示错误消息“目录名称无效”。

+0

你确定你提供的exe名是正确的吗?你可以在开始这个过程之前打印它,并仔细检查? – Grzenio 2009-04-22 16:07:38

回答

16

这可能是因为您没有设置WorkingDirectory属性。按照 文档:

重要提示:

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

+0

我完全错过了那个小小的捕捉。 =)非常感谢你。它现在像一种魅力。它曾经工作,因为这里有一个安全问题,每个人都有权访问system32。他们最近修补了这个。 – Jerry 2009-04-22 16:38:01