最近在作項目的時候遇到一種情:用C#程序以管理員權限去執行一個bat文件,且此bat文件裏面有cd命令來進入文件的下一級目錄,好比:spa
echo test begin cd test1 setup1.exe cd test2 setup2.exe echo test finished echo off
而後在用C#程序運行的時候,若是用管理員權限去執行,能調起bat,可是沒法去執行bat文件中的setup1.exe和setup2.exe。code
C#代碼:blog
using (Process proc = new Process()) { string command = @"c:\users\danvy\Desktop\script\test.bat"; proc.StartInfo.FileName = command; proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(command); //run as admin proc.StartInfo.Verb = "runas"; proc.Start(); while (!proc.HasExited) { proc.WaitForExit(1000); } }
若是不用管理員運行就能夠指定到setup1.exe和setup2.exe(屏蔽掉proc.StartInfo.Verb = "runas";)。ip
後來在stackoverflow上諮詢了別人後,終於找到緣由和解決方法。get
緣由:以管理員權限runas運行後,其實cmd.exe是在%WINDIR%/system32/下,即便你已經定義了StartInfo.WorkingDirectory的信息;這樣一來在執行bat文件中的cd命令時候就找不到cd xxx的路徑了,從而致使沒法執行後面的exe文件了。cmd
解決方案:在調用CMD去執行的時候,用此方法:cmd.exe /c "cd PLACE_YOUR_WORKING_DIR_HERE && test.bat",這樣就能執行成功。string