如何处理两个进程之间的进程间通信?

时间:2011-09-17 17:50:39

标签: c# process ipc mutex

我需要一些关于进程间通信的帮助。

我有申请A和申请B. 应用程序B的目的是更新应用程序A.由于应用程序A无法更新自己,因此必须更新某些dll,这就是使用Applicaiton B的原因。 应用程序A启动App B和App B关闭App A并开始更新A. 更新程序过程是两步 1)复制msi位 2)安装位

如果用户在应用程序A等待的第一步中取消应用程序B,是否有任何方法可以向应用程序A发出信号,因为更新已被取消,因此请继续启动应用程序A.

实现这一目标的最佳方法是什么?互斥是唯一的解决方案吗?

3 个答案:

答案 0 :(得分:1)

查看XDMessaging,它使用Windows Messaging或File IO for IPC。您还可以使用全局MutexSemaphore来实现基本信令。

或者基本方法(如果这适合)。以下内容在新进程中启动应用程序B并阻塞直到它退出。您可以使用退出代码来控制行为。

Process appB = Process.Start("C:\\applicationb.exe");
appB.WaitForExit();
int exitCode = appB.ExitCode;

您还可以创建与某些自定义对话框并行运行的更新MSI,并在更新前使用自定义操作关闭其他应用。有许多方法可以实现这一目标,从杀死进程到通过Windows Messaging发送信号。

答案 1 :(得分:0)

我不会使用Mutex。我使用EventWaitHandle。有关详细信息,请参阅Send message from one running console app to another

答案 2 :(得分:0)

我认为不应该使用IPC来完成。如果用户取消下载,我认为B应该启动A

即,

    {li> A会在B开始后立即死亡。
  1. B下载然后应用msi
  2. B启动A并退出。无论下载是否完成,都会发生这种情况