【问题标题】:Is it a good idea to run an EXE from IIS from the code behind?从后面的代码从 IIS 运行 EXE 是个好主意吗?
【发布时间】:2023-04-04 15:16:02
【问题描述】:

我有一个 ASP.NET Web API,我正在尝试通过控制器下载 ZIP 文件 - 例如,DownloadZipController

为了生成这个 ZIP 文件,我的控制器方法调用了一个工厂方法createandGetZip,它启动一个 exe 并等待 EXE 完成其执行。当 EXE 生成 ZIP 时,它被传递给工厂方法createandGetZip。此 ZIP 生成需要一些时间 - 大约 2 分钟。

我在 IIS 服务器上托管了这个 Web api,AppPool 标识为 LOCALSYSTEM。

我的问题是:这是从托管在 IIS 服务器上的代码启动 EXE 的最佳方式吗?或者是否有任何其他方法可以从代码启动 EXE 而无需将 AppPool 身份指定为 LOCALSYSTEM,因为我已经读过这可能会导致安全漏洞。

请告诉我最好的方法或比我目前使用的更好的方法。

【问题讨论】:

  • 你有这个exe的源代码吗?
  • 是的,我有EXE的源代码。它是在内部开发的。
  • 保护 IIS 对于 SO 来说这个话题太宽泛了。
  • 是什么阻止您为您的应用分配另一个具有 LocalSystem 以外身份的 AppPool?有很多关于这个的教程。
  • @ivan_pozdeev 如果不将 Localsystem 的身份分配给我的应用程序池,我将无法启动我的 exe。请告知是否可以通过其他一些好的方式来完成。

标签: c# asp.net iis exe


【解决方案1】:

我相信这在实践中很好(我经常使用赛门铁克病毒扫描程序 DoScan.exe 执行此操作)。如果这对您很重要,请尝试防止外部进程永远旋转,并限制 EXE 上的应用程序池安全权限。

当然,还要确保您知道 EXE 在做什么。

【讨论】:

  • 感谢您的快速回复,但正如我所提到的,我将向我的应用程序池授予 Localsystem 身份,只有这样我才能开始该过程。这样做很好。我也没有明白你所说的外部应用程序永远旋转的意思。您是否可以共享应用程序池身份的详细信息以及您为应用程序池提供的安全权限。
  • 我的意思是,如果外部应用程序没有完成(无论出于何种原因),它可能会导致您的服务器线程锁定,具体取决于您的实现方式。只需考虑一件事。
  • 好的,我知道了,但我能知道您为应用程序池提供的应用程序池标识是什么,以启动 DoScan.Exe。
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2020-09-29
相关资源
最近更新 更多