zoukankan      html  css  js  c++  java
  • 解决“System.Diagnostics.Process调用批处理运行powershell.exe”的问题

    问题场景:

    在一个ASP.NET程序中,需要调用一个命令行下的bat(批处理)程序完成一些操作,而在该bat程序中又要调用powershell.exe -command运行powershell代码。

    示例代码如下:

    powershell.exe -command "[xml]$config = Get-Content repositories.config; "

    如何在ASP.NET中调用bat程序员,请参考:在ASP.NET中运行控制台程序

    调用bat的部分代码:

    ProcessStartInfo info = new ProcessStartInfo();
    info.WorkingDirectory
    = workingDirectory;
    info.CreateNoWindow
    = true;
    info.RedirectStandardOutput
    = true;
    info.RedirectStandardInput
    = true;
    info.RedirectStandardError
    = true;
    info.UseShellExecute
    = false;

    System.Diagnostics.Process p
    = new Process();
    p.StartInfo
    = info;
    p.Start();
    output.Append(p.StandardOutput.ReadToEnd());
    p.WaitForExit();
    p.Close();

    遇到的问题:

    通过System.Diagnostics.Process执行bat之后,不能正常退出,也就是上面代码中的p.WaitForExit()一直在等待bat退出。

    从浏览器看,浏览器一直处于“等待服务器返回”状态。

    在服务器上,通过任务管理器可以看到一个powershell.exe进程一直存在。强制结束这个进程,浏览器就能得到正常返回。

    解决方案:

    根据以前的经验判断,应该是powershell.exe处于等待输入状态,开始不知道如何让powershell.exe退出这个状态。后来在stackoverflow找到很简单的解决方法,只要增加4个字符“<NUL”,bat文件改为如下代码,问题就解决了:

    powershell.exe -command "[xml]$config = Get-Content repositories.config; " < NUL
  • 相关阅读:
    被忽视的调试工具Swagger
    MongoDB操作
    js获取当月第一天和最后一天
    vue中 关于$emit的用法
    map和flatmap的区别
    element 的el-dialog 浮层嵌套,第二次弹出的会被遮住
    el-table加背景色
    java 正则表达式匹配
    Python自动化测试 (七)logging 日志模块
    git安装配置与使用
  • 原文地址:https://www.cnblogs.com/dudu/p/ProcessStartInfo_bat_powershell.html
Copyright © 2011-2022 走看看