C#: 以管理員權限運行包含有cd命令的.bat文件

最近在作項目的時候遇到一種情:用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

相關文章
相關標籤/搜索