0

我在c#中通过dotnet运行了bat文件如下

Process p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.FileName = "d://s.bat";
                p.Start();
                string output = p.StandardOutput.ReadToEnd();
                p.WaitForExit();

它在通过 dotnet ide 运行时工作正常。

但我的问题是,当我通过 IIS 发布后运行上述代码时,它会返回错误为

StandardOut-has-not-been-redirected-或-the-process-hasn-t-started-yet。

你能给我一些指导方针来解决这个问题吗?

4

2 回答 2

1

你必须使用RedirectStandardOutput = true. 来自MSDN的链接

引用链接:

ProcessStartInfo.RedirectStandardOutput 属性 获取或设置一个值,该值指示应用程序的输出是否写入 Process.StandardOutput 流。

当我确保我们的服务器正在启动时,从我的问题到同一个问题的片段。

if (IsProcessRunning(ServerProcessName)) { return; }
        var p = new Process
        {
            StartInfo = new ProcessStartInfo
                            {
                                FileName = path,
                                RedirectStandardOutput = true, 
                                UseShellExecute = false
                            }
        };
        p.Start();
        var a = "";
        while (!a.Contains("ServicesStarted"))
        {
            a = p.StandardOutput.ReadLine();
        }
于 2012-08-22T06:40:45.793 回答
1

这样做,以克服错误: -

StringBuilder content = new StringBuilder();
while ( ! p.HasExited ) {
    content.Append(p.StandardOutput.ReadToEnd());
}
string output = content.ToString();
于 2012-08-22T06:40:45.917 回答