• 解决“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
  • 相关阅读:
    关于EPCS的读写
    HPD的作用和应用事项
    debug命令的使用
    寄存器中cs,ds,ss,es的区别
    Oracle的物化视图
    汇编helloword代码
    SSL单双向验证原理
    中断向量表小计
    PC机的内存分配空间小记
    汇编中基本的数据类型
  • 原文地址:https://www.cnblogs.com/dudu/p/ProcessStartInfo_bat_powershell.html
Copyright © 2020-2023  润新知