欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-02-18 18:46:20
最近在做项目的时候遇到一种情:用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";)。

后来在*上咨询了别人后,终于找到原因和解决方法。

原因:以管理员权限runas运行后,其实cmd.exe是在%windir%/system32/下,即使你已经定义了startinfo.workingdirectory的信息;这样一来在执行bat文件中的cd命令时候就找不到cd xxx的路径了,从而导致无法执行后面的exe文件了。

解决方案:在调用cmd去执行的时候,用此方法:cmd.exe /c "cd place_your_working_dir_here && test.bat",这样就能执行成功。