下午好。
我需要承认这是一项奇怪的工作,但我需要它......: - )
今天有一个C#控制台应用程序(我将其命名为App1.exe)由我的同事调用,在COBOL中工作。当App1.exe完成其工作,关闭自身,然后COBOL程序可以继续读取从App1生成的文件。
这个App1每天开启和关闭一百次,而且不是那么快...... 现在我需要在系统托盘应用程序中获取业务逻辑,随时准备好,快速回复请求,但我不能强迫我的同事更改他们的程序:他们将调用App1.exe,等待它关闭。所以我创建了一个单一的App2.exe(我不能使用系统服务)做的工作;所以现在我想到了这个解决方案:App1.exe只调用App2.exe(传递命令行参数),然后它保持待机状态(使用Process.Start(App2.exe)和Process.WaitForExit())。当App2.exe完成工作时,杀死App1.exe,因此COBOL程序可以检测到工作已完成并继续读取从App2.exe生成的文件。
在这个解决方案中(快速而肮脏的方式,我只是在尝试......)有一个问题:App2.exe被App1.exe调用,所以看来一个被调用的exe无法杀死他的父,不是它?
有更好的/推荐的方式来做这种工作吗? 我只能使用C#2.0。
谢谢你们,欢迎任何想法 南多
答案 0 :(得分:2)
使用其中一个进程间通信机制让app1.exe与app2.exe对话。套接字,命名管道,远程处理,WCF。由于您只需要传递命令行,因此简单的套接字可以完成工作。当你从app2.exe收到一条消息说该作业已经完成时退出app1.exe,不需要杀死任何东西。
答案 1 :(得分:0)
创建一个监督整个过程的经理/监控应用程序。它按需创建一个新的子应用程序(App1)。然后,App1可以通过询问经理/监视器来请求启动App2。
如果App2然后想要关闭App1,它可以要求经理/监视器执行此操作。
通过这种方式,您可以调试,记录,监控,审核和制定每个应用程序启动/停止时的规则。好多了!
答案 2 :(得分:0)
这是我用来调用和终止进程的代码。
//App1.exe
var p = Process.Start("App2.exe", myargs);
p.WaitForExit();
//App2.exe
//do the work calling my App2.exe business logic plugin...
//Close calling exe; caller variable is fullpath of my App1.exe, like D:\myapp\app1.exe
Process[] pArry = Process.GetProcesses();
foreach (Process p in pArry)
{
string s = p.ProcessName;
s = s.ToLower();
if (s.CompareTo(caller) == 0)
{
p.Kill();
}
}
非常简单的代码,可能太简单了:-)
谢谢!
答案 3 :(得分:0)
我发现了一个有趣的项目:WCF Killer 这是一个简单而强大的客户端 - 服务器TCP堆栈实现;可能是我需要的一个很好的解决方案 再见,Nando