VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之C#: 以管理员权限运行包含有cd命令的.b

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

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

相关教程