【问题标题】:Run .exe file from code behind asynchronously从后面的代码异步运行 .exe 文件
【发布时间】:2012-02-06 17:45:45
【问题描述】:

我有一个控制台应用程序,它写入从数据库检索到的 txt 文件信息。到目前为止,我手动执行控制台应用程序生成的可执行文件。

现在我需要从我的 Web 应用程序中自动调用 .exe,以便每次在我的代码中发生特定情况时,我都可以使用逻辑“即发即弃”来运行 .exe。

我的目标是:

1) 用户不得受到控制台应用程序执行的任何影响(SQL 查询和 txt 文件生成可能需要大约 3 到 5 分钟),因此“一劳永逸”的逻辑委托给一个单独的进程。

2) 由于在某些情况下仍会手动运行可执行文件,因此我希望将所有逻辑放在一个位置,以避免出现不同行为的风险。

我可以安全地使用 System.Diagnostics.Process 来实现这一目标吗?

System.Diagnostics.Process cmd = new System.Diagnostics.Process();
cmd.Start("Logger.exe");

该过程是自动结束还是我必须设置超时并明确关闭它?
在不同用户访问 Web 应用程序的 Web 应用程序环境中是否“安全”,让他们调用可执行文件而没有并发访问的风险? 谢谢。

编辑: 更改为使用内置类更清晰,感谢提示。

【问题讨论】:

  • CommandLineProcess 似乎是一些自定义类。在提问时考虑使用内置类,或者至少提供对文档/源的参考。

标签: c# web-applications executable code-behind


【解决方案1】:

就机制而言,我假设 CommandLineProcess 包装了 Process?如果是这样,乍一看,我认为它没有任何问题。我只是在将其作为 Web 应用程序的可执行文件运行时遇到了一些问题,因为与重新架构相比,您更有可能降低安全性以使其正常工作(如果您遵循我在开发中看到的正常路径)。

如果将实际业务代码封装在类库中,则可以在 Web 应用程序中运行代码。主要规则是它保存到的文件夹应该位于 webroot 下(物理上或逻辑上),因此您不必降低安全性。但是,如果封装了逻辑,您可以在 Web 进程中运行“文件创建器”,而无需启动进程。

您的另一个选择是将进程包装在服务中(我喜欢非 HTTP WCF 服务,但如果需要,您可以使用 Windows 服务)。如果遵循带有服务端点的 SOA 路径是有意义的,我只会朝这个方向发展。由于这很可能被隔离到单个应用程序中,因此进程中更有意义(除非您要保存到 webroot 之外的目录)。

希望这是有道理的。

【讨论】:

  • (+1) Web 应用程序在 Intranet 中运行,不允许外部访问,并且过滤 IP 以仅允许某些子网能够访问它。.exe 由控制台应用程序生成以前由我们开发,只能由我的网络应用程序使用。我想直接使用它来避免重新编写代码,但主要是让它调用 asynch,因为生成 txt 文件可能需要长达 5 分钟(即使这样并发访问没有问题?)。此外,在某些情况下,exe必须手动执行,因此将所有代码放在一个地方会更好。
  • 我对 Web 应用程序仍然有点怀疑,但安全问题可能不是最重要的。什么触发了更新的需求?如果可能,您是否可以使用相同的应用程序进行更改(可能是您的网络应用程序?)来完成这项工作?
  • 例如,在 Web 应用程序中创建新客户端是应该创建 txt 文件的触发器。我可以在 Web 应用程序本身中执行此操作,但它会让用户等待最多 3-5 分钟,然后再返回控件。由此我的想法是分离txt文件的生成。我还在考虑每 5 分钟运行 .exe 的计划任务。我会修改控制台应用程序以首先查找数据库上的特定表(在触发发生时由 Web 应用程序填充),并且仅当该表启用了正确的标志并在执行后将其重置时才生成 txt 文件。
【解决方案2】:

是的,它会自行终止 - 前提是 .exe 文件会自行终止。它将使用与 Web 服务器相同的凭据运行。

请记住,这被认为是不安全的,因为您正在根据您的 webapp 正在执行的任何操作执行代码。但是,问题在于 .exe 文件通常以这种方式执行,而不是实际用户访问应用程序。

这里有类似的问题How do I run a command line process from a web application?

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2023-04-04
    • 2012-03-29
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多