【问题标题】:Best practise: App1.exe start process App2.exe, then App2.exe need to close App1.exe最佳做法:App1.exe启动进程App2.exe,然后App2.exe需要关闭App1.exe
【发布时间】:2011-02-10 16:14:06
【问题描述】:

下午好。

我需要承认这是一项奇怪的工作,但我需要它...... :-)

今天有一个 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 生成的文件。

在这个解决方案中(快速而肮脏的方式,我只是在尝试......)有一个问题:App1.exe 调用了 App2.exe,所以看起来被调用的 exe 无法杀死他的父级,不是是吗?

有更好的/推荐的方法来做这种工作吗? 我只能使用 C# 2.0。

谢谢大家,欢迎提出任何想法。
南多

【问题讨论】:

  • 能否请您粘贴来自应用程序 1 和应用程序 2 的相关代码(即进程启动和终止逻辑)?

标签: c# process


【解决方案1】:

使用一种进程间通信机制让 app1.exe 与 app2.exe 对话。套接字、命名管道、远程处理、WCF。由于您只需要传递一个命令行,一个简单的套接字就可以完成工作。当您从 app2.exe 收到消息表明工作已完成时,只需退出 app1.exe,无需杀死任何东西。

【讨论】:

  • 我对这类代码没有经验;因为我只能使用 C# 2.0,所以远程处理可能是正确的工具。几年前我尝试过 IPC,调试起来不太舒服。谢谢!
【解决方案2】:

创建一个管理器/监控器应用来监督整个过程。它按需创建一个新的子应用程序 (App1)。然后,App1 可以通过询问经理/监视器来请求启动 App2。

如果 App2 然后希望 App1 关闭,它可以要求经理/监视器这样做。

通过这种方式,您可以调试、记录、监控、审核并为每个应用的启动/停止时间制定规则。好多了!

【讨论】:

  • 这可能是一个解决方案,但如果我需要花时间处理一些代码,我可能会把它花在远程处理上。谢谢!
【解决方案3】:

这是我用来调用和终止进程的代码。

//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();
    }
}

非常简单的代码,可能太简单而无法工作:-)
谢谢!

【讨论】:

    【解决方案4】:

    我发现了一个有趣的项目:WCF Killer
    这是一个简单而强大的客户端-服务器 TCP 栈实现;可能是满足我需求的好解决方案。
    再见,南多

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多