【问题标题】:ASP.NET Web application running an exe works in VS, not in IIS运行 exe 的 ASP.NET Web 应用程序在 VS 中工作,而不是在 IIS 中
【发布时间】:2016-05-04 20:41:59
【问题描述】:

C# 代码使用 Process.Start 运行在运行代码的同一台 PC 上本地保存的 exe。在 Visual Studio 中,这可以正常工作,调用 exe 并弹出 cmd 窗口。 exe 完成后,控制权将传递回 C# 调用应用程序。但是,一旦将 Web 应用程序发布到本地 IIS,将应用程序池标识设置为自定义帐户,这将不再有效。该 exe 在任务管理器中可作为正在运行的进程查看,但不会弹出 cmd 窗口以向用户指示它正在运行。 try/catch 块没有捕获任何错误。应用程序池标识确实有权运行 exe。我如何确保 cmd 窗口在 IIS 中对用户可见,就像在 Visual Studio 中一样?

【问题讨论】:

  • EXE 是否以登录 Web 服务器的用户身份运行?
  • iis 应用程序池在具有管理员访问权限的自定义用户帐户下运行。正如建议的那样,我还测试了使用同一用户登录 PC 的情况,不幸的是,同样的问题仍然存在。此用户确实有权运行该 exe。
  • 但是 EXE 是否做它需要做的事情?为什么需要看到弹出的CMD窗口? IIS 进程不是交互式进程。

标签: c# asp.net iis exe


【解决方案1】:

Microsoft 不建议从 Web 应用程序调用 .exe,因为出于安全原因,w3wp.exe 在沙盒环境中运行,因此它启动的任何线程/任务/进程与启动它时的不同您自己,因此可能无法按预期工作。

您可能希望将控制台应用程序重新编码为 ASP.NET Web API(以前称为 WCF),可能托管在 IIS 或 Windows 服务中。

Similar question.

【讨论】:

【解决方案2】:

我使用 JavaScript 解决了这个问题。我向我的按钮添加了一个“OnClientClick”事件,这启动了我的 javascript 函数。该函数创建了一个新的 ActiveXObject,然后运行了有问题的文件。这现在可以通过 IIS 成功运行。

【讨论】:

  • 如果它在 javascript 中运行,它可能在客户端而不是服务器上运行。这可能无法在锁定的客户端上运行。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2016-12-13
  • 2012-06-20
  • 2021-10-25
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多