zoukankan      html  css  js  c++  java
  • 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:usersdanvyDesktopscript	est.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",这样就能执行成功。

  • 相关阅读:
    string
    auto和decltype
    const限定符
    &(引用) 和 *(指针)
    extern关键字
    关于将函数写入头文件问题(分离式编译)
    poj2154(polya定理+欧拉函数)
    bzoj2115(线性基)
    51nod1832(二叉树/高精度模板+dfs)
    51nod1464(trie + dfs)
  • 原文地址:https://www.cnblogs.com/danvy/p/10601736.html
Copyright © 2011-2022 走看看