2011-04-29 36 views
1

我運行一個Web服務器上的一些ASP.NET/C#代碼的批處理文件運行。基本上,批處理文件使用psloggedon和pexec等工具在VM上執行一些測試自動化任務。確保的Process.Start()下的登錄用戶

如果我手動運行該批處理文件時,我下的管理帳戶登錄到服務器,它工作正常。

,當我從我的代碼(下)運行它我的問題來了,這似乎給「SYSTEM」帳戶下運行,並psloggedon等似乎不正常工作。

代碼

 Process p = new Process(); 
    p.StartInfo.FileName = "C:\SetupVM.bat"; 
    p.Start(); 
    p.WaitForExit(); 

我在我的web.config得到這個,它似乎並沒有做任何迪菲昂斯?

<identity impersonate="true" userName="Administrator" password="myadminpassword"/> 

是否有無論如何我可以確保批處理文件在'管理員'帳戶下運行?

更新的代碼

 Process p = new Process(); 
     p.StartInfo.FileName = "C:\\SetupVM.bat"; 
     p.StartInfo.UserName = "Administrator"; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.WorkingDirectory = "C:\\"; 

     string prePassword = "myadminpassword"; 
     SecureString passwordSecure = new SecureString(); 
     char[] passwordChars = prePassword.ToCharArray(); 
     foreach (char c in passwordChars) 
     { 
      passwordSecure.AppendChar(c); 
     } 
     p.StartInfo.Password = passwordSecure; 
     p.Start(); 
     p.WaitForExit(); 

從MSDN:

當UseShellExecute是假的,你就可以開始只與Process組件可執行文件。

也許這是因爲我試圖運行.bat文件的問題?

謝謝。

+0

嗨,你有沒有解決這個問題我已經試過相同,但還是它不工作 – sudheshna 2012-05-07 08:52:53

回答

4

你可以提供給StartInfo用戶名和密碼:

Process p = new Process(); 
p.StartInfo.FileName = "C:\SetupVM.bat"; 
p.StartInfo.UserName = "Administrator"; 
p.StartInfo.Password = "AdminPassword"; 
p.Start(); 
p.WaitForExit(); 

查看文檔ProcessStartInfo

+0

謝謝,我已經試過這個,但現在我的代碼似乎立即返回,而不該批處理文件運行?我在我的問題中添加了更新的代碼,您是否介意快速瀏覽一下? – 2011-04-29 15:00:41

+0

@Jimmy C - 看不到任何讓我感覺錯誤的東西。 – Oded 2011-04-29 15:43:23

+0

是的很奇怪。我可以看到cmd.exe在事件查看器中發生故障,不知道爲什麼。 – 2011-04-29 15:59:21