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

C# 从代码隐藏异步运行.exe文件,c#,web-applications,executable,code-behind,C#,Web Applications,Executable,Code Behind,我有一个控制台应用程序,它将从数据库检索到的信息写入txt文件。到目前为止,我手动执行控制台应用程序生成的可执行文件 现在,我需要从我的web应用程序中自动调用.exe,以便每次在我的代码中发生特定情况时,我都可以使用逻辑“fire and forget”运行.exe 我的目标是: 1) 用户不得以任何方式受到控制台应用程序执行的影响(SQL查询和txt文件生成可能需要大约3到5分钟),因此“触发并忘记”的逻辑将委托给一个单独的进程 2) 由于在某些情况下,可执行文件仍将手动运行,因此我更希望将

我有一个控制台应用程序,它将从数据库检索到的信息写入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文件将自行终止。它将使用与web服务器相同的凭据运行

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


这里类似的问题

就机制而言,我假设CommandLineProcess包装了流程?如果是这样的话,乍一看,我并不认为它有什么必然的问题。我只是对从web应用程序将其作为可执行文件运行存在一些问题,因为与rearchitect相比,您更可能降低安全性以使其正常工作(如果您遵循我在开发中看到的正常路径)

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

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


希望这有意义。

CommandLineProcess似乎是一些自定义类。考虑在提问时使用内置类,或者至少提供对文档/源的引用。(+ 1)Web应用程序运行在Intranet中,不允许外部访问,IP被筛选为只允许某些子网访问。该.exe由我们以前开发的控制台应用程序生成,仅由我的web应用程序使用。我想直接使用它来避免重新编写代码,但主要是让它调用asynch,因为生成txt文件可能需要5分钟(即使这样,并发访问也没有问题?)。此外,在某些情况下,exe必须手动执行,因此将所有代码放在一个位置会更好。我仍然对web应用程序有点怀疑,但安全问题可能没有那么重要。什么触发了更新的需要?如果可能,您是否可以让进行更改的应用程序(可能是您的web应用程序?)执行此操作?例如,web应用程序中的新客户端创建是一个触发器,它应该创建txt文件。我可以在web应用程序本身中这样做,但它会让用户在返回控件之前等待3-5分钟。由此我的想法是分离txt文件的生成。我还考虑了一个计划任务,每5分钟运行一次.exe。我会修改console应用程序,首先在DB上的特定表上进行查找(当触发发生时由web应用程序填充),并仅在该表启用了正确的标志并在执行后重置时生成txt文件。