Windows窗体 - 反复运行外部进程

时间:2011-04-29 14:00:04

标签: c# winforms

我有一个小型的Windows窗体应用程序,它需要能够无限次地运行外部应用程序,而无需在每次运行后关闭该应用程序。

外部应用程序作为单个实例运行,并且非常耗费资源并且加载缓慢。基本工作流程如下:

1:等待触发器加载外部应用程序 2:触发引发,使用命令行参考打开外部应用程序 3:监视日志文件 3:外部应用程序处理命令行数据并写入日志文件 4:日志文件已更改,因此将下一个命令行发送到(已打开)外部应用程序 5:转到第3步

我遇到的问题是,在没有先关闭/终止进程的情况下,我找不到加载外部应用程序的方法。

applicationProcess.StartInfo.FileName = commandLine;
applicationProcess.Start();

// Watch for change in log file and then...
applicationProcess.StartInfo.FileName = commandLine;
applicationProcess.Start();

等等,但如果我不

applicationProcess.Kill();

在我重新发出applicationProcess.Start()方法之前,我得到一个线程异常。

我认为我需要做的是在启动后断开与applicationProcess的连接,但找不到任何机制来执行此操作。

非常感谢任何建议/指示。

感谢。

3 个答案:

答案 0 :(得分:1)

如果您打算启动外部应用程序的新实例,那么只需分配一个新的Process()对象。每次启动外部应用程序时都创建一个Process()对象,而不是尝试重新使用原始应用程序。

如果您打算操作外部应用程序的现有实例(已启动的实例),则无需再次调用Start(),只需继续使用applicationProcess。

答案 1 :(得分:0)

创建新的applicationProcess并将旧版本保存在列表中或类似的内容时,它是否有效?

答案 2 :(得分:0)

通过创建批处理文件启动应用程序,我找到了解决此问题的方法。工作流程如下:

1:我的应用程序使用命令行参数

启动批处理文件

2:批处理文件运行 - 重新运行主应用程序

3:我的应用程序杀死并处理该过程。

步骤3只关闭正在运行批处理文件的进程,而不是主应用程序进程 - 我需要保持打开状态。

批处理文件不可能更简单:

@echo off
"C:\Program Files (x86)\Microsoft Office\Office14\Excel.exe" %1

我已经在循环中运行了一个多小时并且没有发现任何问题。