ASP.NET OWIN 自托管控制台 window 无法从正常的 ASP.NET Web API 控制器动态启动

ASP.NET OWIN self hosting console window couldn't start dynamically from a normal ASP.NET Web API Controller

我需要根据需要启动我的 OWIN 自托管控制台应用程序。这个需求在一个单独的 ASP.NET Web API 中决定,它通常以调试模式托管在 VS 的 IIS express 下。但是我无法从这个决策中提示命令 window ASP.NET Web API 即使没有收到错误。下面是我的测试代码,仅调用命令提示符,直接写在我的决策 Web API 控制器中。

 using (Process p = new Process())
                {
                    // set start info
                    p.StartInfo = new ProcessStartInfo("cmd.exe")
                    {
                        RedirectStandardInput = true,
                        UseShellExecute = false,
                        WorkingDirectory = @"d:\"
                    };
                    // event handlers for output & error
                    p.OutputDataReceived += p_OutputDataReceived;
                    p.ErrorDataReceived += p_ErrorDataReceived;

                    // start process
                    p.Start();
                    // send command to its input
                    p.StandardInput.Write("dir" + p.StandardInput.NewLine);
                    //wait
                    p.WaitForExit();
                }

所有应用程序都在同一台机器上。在 ASP.NET MVC 控制器事件下,我没有得到上述代码 运行ning 的任何输出,尽管相同的代码在控制台应用程序下给了我预期的命令 window if 运行 .

Is there any restriction to prompt command window under an ASP.NET Web API context?

我可以通过如下所示删除 "RedirectStandardInput" 来提示命令。

try
  {
                    using (Process p = new Process())
                    {
                        // set start info
                        p.StartInfo = new ProcessStartInfo("cmd.exe")
                        {
                            // RedirectStandardInput = true,
                            // UseShellExecute = false,
                            //WorkingDirectory = root + @"\Test"
                        };

                        // start process
                        p.Start();
                        p.WaitForExit();
                        p.Close();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }

保持此线程打开,就好像有人对 RedirectStandardInput = true 的情况下的提示命令给出了答案一样