我有一个小型的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)
如果您打算启动外部应用程序的新实例,那么只需分配一个新的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
我已经在循环中运行了一个多小时并且没有发现任何问题。