异步运行后面的代码运行.exe文件

时间:2012-02-06 17:45:46

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

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

现在我需要从我的Web应用程序中自动调用.exe,这样每次在我的代码后面发生特定情况时,我都可以使用逻辑“火上浇之忘记”来运行.exe。

我的目标是:

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

2)由于可执行文件在某些​​情况下仍会手动运行,我宁愿在一个地方使用所有逻辑,以避免出现不同行为的风险。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

希望这是有道理的。

答案 1 :(得分:0)

是的,如果.exe文件将自行终止,它将自行消亡。它将使用与Web服务器相同的凭据运行。

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

此处类似问题How do I run a command line process from a web application?