最近在做項目的時候遇到一種情:用C#程式以管理員許可權去執行一個bat文件,且此bat文件裡面有cd命令來進入文件的下一級目錄,比如: echo test begin cd test1 setup1.exe cd test2 setup2.exe echo test finished echo off ...
最近在做項目的時候遇到一種情:用C#程式以管理員許可權去執行一個bat文件,且此bat文件裡面有cd命令來進入文件的下一級目錄,比如:
echo test begin cd test1 setup1.exe cd test2 setup2.exe echo test finished echo off
然後在用C#程式運行的時候,如果用管理員許可權去執行,能調起bat,但是無法去執行bat文件中的setup1.exe和setup2.exe。
C#代碼:
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";)。
後來在stackoverflow上咨詢了別人後,終於找到原因和解決方法。
原因:以管理員許可權runas運行後,其實cmd.exe是在%WINDIR%/system32/下,即使你已經定義了StartInfo.WorkingDirectory的信息;這樣一來在執行bat文件中的cd命令時候就找不到cd xxx的路徑了,從而導致無法執行後面的exe文件了。
解決方案:在調用CMD去執行的時候,用此方法:cmd.exe /c "cd PLACE_YOUR_WORKING_DIR_HERE && test.bat",這樣就能執行成功。