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",这样就能执行成功。

  • 相关阅读:
    linux tcp调优
    nginx 代理http配置实例
    nginx代理socket tcp/udp
    C++对象数组初始化
    《大型网站技术架构》读书笔记
    内核空间、用户空间和虚拟地址(转)
    集群——LVS理论(转)
    Linux服务器集群系统(一)(转)
    从一个开发的角度看负载均衡和LVS(转)
    ubuntu下允许root用户ssh远程登录
  • 原文地址:https://www.cnblogs.com/danvy/p/10601736.html
Copyright © 2011-2022 走看看