2009-04-22 107 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