C#: 以管理员权限运行包含有cd命令的.bat文件

最近在做项目的时候遇到一种情:用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",这样就能执行成功。

posted @ 2019-03-26 17:49  danvy617  阅读(2080)  评论(0编辑  收藏  举报