C# Windows窗体-重复运行外部进程

C# Windows窗体-重复运行外部进程,c#,winforms,C#,Winforms,我有一个小的Windows窗体应用程序,它需要能够无限次地运行外部应用程序,而无需在每次运行后关闭该应用程序 外部应用程序作为单个实例运行,非常消耗资源,加载速度也很慢。基本工作流程如下: 1:等待触发器加载外部应用程序 2:触发,使用命令行引用打开外部应用程序 3:监视日志文件 3:外部应用程序处理命令行数据并写入日志文件 4:日志文件已更改,因此将下一个命令行发送到(已打开)外部应用程序 5:转至步骤3 我遇到的问题是,如果不先关闭/终止进程,我无法找到加载外部应用程序的方法 applica

我有一个小的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启动后断开与它的连接,但找不到任何机制来实现这一点

如有任何建议/指示,将不胜感激


谢谢。

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


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

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


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

当您创建一个新的
应用程序流程,并将旧的流程保留在列表或类似的东西中时,它是否起作用?

当您创建一个新的
应用程序流程,并将旧的流程保留在列表或类似的东西中时,它是否起作用?

我通过创建批处理文件将启动应用程序。工作流程如下:

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

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

3:我的应用程序终止并处理流程

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

// Watch for change in log file and then...
applicationProcess.StartInfo.FileName = commandLine;
applicationProcess.Start();
步骤3只是关闭运行批处理文件的进程,而不是主应用程序进程,我需要保持打开状态

批处理文件非常简单:

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

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

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

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

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

3:我的应用程序终止并处理流程

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

// Watch for change in log file and then...
applicationProcess.StartInfo.FileName = commandLine;
applicationProcess.Start();
步骤3只是关闭运行批处理文件的进程,而不是主应用程序进程,我需要保持打开状态

批处理文件非常简单:

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

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

是的,如果我为每次调用创建一个新的ProcessObject,它看起来确实可以工作,但是我担心在运行的应用程序中添加无限数量的process object,因为我认为这会消耗内存/资源,即使目标应用程序仍然是单个实例。是的,但是对于这种重复运行大型应用程序的设计来说,这不是一个固有的问题吗?也许你应该重新考虑一下整个概念。@Neilski,你可以不时地浏览列表,并处置()任何不再使用的进程对象。是的,如果我为每个调用创建一个新的ProcessObject,它看起来确实有效,然而,我担心在运行的应用程序中添加数量不限的进程对象,因为我认为即使目标应用程序仍然是一个实例,这些进程对象也会消耗内存/资源。是的,但对于这种重复运行大型应用程序的设计来说,这不是一个固有的问题吗?也许你应该仔细考虑一下整个概念。@Neilski,你总是可以不时地浏览列表,然后处置()任何不再使用的进程对象。