【问题标题】:Process.Start for any exe fails sometimes on IIS任何 exe 的 Process.Start 有时会在 IIS 上失败
【发布时间】:2019-04-03 11:46:37
【问题描述】:

我们在 IIS(Windows Server 2016)上运行 ASP.Net 代码。我们的 Asp.Net 代码启动外部 exe。通常一切正常。但有时exe无法启动。发生这种情况时,只有完全重新启动计算机才能解决问题。

我编写了测试代码来启动notepad.exe。它会工作一段时间,并在我们需要时启动 notepad.exe。一段时间后再次启动 notepad.exe 失败,所有连续调用都将失败。重新启动 IIS 将无济于事。重启电脑即可解决问题。

  ProcessStartInfo processStartInfo =
    new ProcessStartInfo(@"C:\Windows\notepad.exe");

   Process process = new Process();
   process.StartInfo = processStartInfo;
   process.Start()

我希望 notepad.exe 每次都能开始工作。或者至少如果它失败了,就会得到一些有意义的异常,并描述它失败的原因。我想知道这可能是某种 IIS DoS 保护。我们的应用程序是资源密集型的,并且在运行网站数小时后会发生此故障。

【问题讨论】:

  • 你遇到了什么异常?
  • 我没有遇到异常。如果我有一个,那真的很有帮助......

标签: asp.net iis


【解决方案1】:

使用 Notepad.exe 对您来说是一个不好的测试示例,因为它具有 UI 组件,希望您的 external.exe 没有。

IIS 没有您描述的任何“DoS”类型保护。

我会尝试两件事: 1) Process.Start() 返回一个布尔值。如果返回 false,则向应用程序添加一些错误日志记录,以从 Process 对象中转储信息。 2) 由于问题一旦开始发生就很容易重现运行 Sysinternals ProcMon 并查看是否收到任何进程启动事件并查看进程终止事件。

【讨论】:

  • 记事本只是用于测试的随机选择。 Process.Start 返回 false。但对出了什么问题的描述也不例外。如果您想了解更多详细信息,实际上我们使用的真正应用程序是进程外 COM 服务器。当我们创建该 COM 对象时,我们得到的错误是 CO_E_SERVER_EXEC_FAILURE。 exe 也会在很短的时间内启动并关闭。我可以在 TaskMgr 中看到这一点。如果您尝试仅启动真正的 exe,则行为相同,而记事本 exe 的行为相同。再次,一切都适用于其中任何一个,直到它停止工作的那一刻。真奇怪。
  • 真的很奇怪。此外,当计算机处于此错误状态时,我可以轻松地在测试控制台应用程序中创建该 COM 对象,当然我也可以轻松启动 notepad.exe。这只是与 IIS 进程有关。
猜你喜欢
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2014-05-01
相关资源
最近更新 更多