从代码隐藏异步运行.exe文件

本文关键字:exe 文件 运行 异步 代码 隐藏 | 更新日期: 2023-09-27 18:23:35

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

现在我需要从我的web应用程序中自动调用.exe,这样每当我的代码后面出现特定情况时,我都可以用逻辑"fire-and-forget"运行.exe。

我的目标是:

1) 用户不得以任何方式受到控制台应用程序执行的影响(SQL查询和txt文件生成可能需要大约3到5分钟),因此"激发并忘记"的逻辑委托给一个单独的进程。

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

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

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

这个过程会自动结束吗?还是我必须设置一个超时并明确关闭它
在不同用户访问web应用程序的web应用程序环境中,让他们在没有并发访问风险的情况下调用可执行文件是否"安全"?谢谢

编辑:为了更清楚起见,更改为使用内置类,感谢您的提示。

从代码隐藏异步运行.exe文件

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

如果将实际的业务代码封装在类库中,则可以在web应用程序中运行该代码。主要规则是它保存到的文件夹应该在webroot下(物理上或逻辑上),这样你就不必降低安全性。但是,如果逻辑被封装,您可以在web进程中运行"文件筛选器",而无需启动进程。

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

希望这是有道理的。

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

请记住,这被认为是不安全的,因为你是根据你的网络应用程序正在做的任何事情来执行代码的。然而,问题是.exe文件通常以这种方式执行,而不是实际用户访问应用程序。

类似的问题在这里我如何从web应用程序运行命令行进程?