2011-04-29 134 views
1

我有一个小的Windows窗体应用程序需要能够运行一个外部应用程序无限次数,而不必在每次运行后关闭该应用程序。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一旦开始就断开连接,但是找不到任何机制来做到这一点。

任何意见/方向将不胜感激。

谢谢。

回答

0

我已经通过创建一个批处理文件启动应用程序发现了解决此问题的方法。的工作流程如下:

1:我的应用程序启动用命令行参数的批处理文件

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

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

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

的批处理文件不能再简单:

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

我有一个循环了一个多小时运行这一点,并没有发现问题。

1

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

如果您打算操作已经启动的外部应用程序的现有实例,那么您不需要再次调用Start(),只需继续使用applicationProcess即可。

0

当你创建一个新的applicationProcess,并保留旧列表或类似的东西时它工作吗?

+0

是的,如果我为每个调用创建一个新的ProcessObject它似乎工作,但我担心如何将无限数量的过程对象添加到正在运行的应用程序,因为我认为这些将消耗内存/资源,即使目标应用程序仍然是一个实例。 – Neilski 2011-04-29 14:40:37

+0

是的,但是这种设计不是固有的问题,您需要反复运行沉重的应用程序?也许你应该认为整个概念结束了。 – LueTm 2011-04-29 16:07:20

+0

@Neilski,您可以随时浏览列表,并Dispose()您将不再使用的任何过程对象。 – Eric 2011-04-29 17:52:18