我需要一些关于进程间通信的帮助。
我有申请A和申请B. 应用程序B的目的是更新应用程序A.由于应用程序A无法更新自己,因此必须更新某些dll,这就是使用Applicaiton B的原因。 应用程序A启动App B和App B关闭App A并开始更新A. 更新程序过程是两步 1)复制msi位 2)安装位
如果用户在应用程序A等待的第一步中取消应用程序B,是否有任何方法可以向应用程序A发出信号,因为更新已被取消,因此请继续启动应用程序A.
实现这一目标的最佳方法是什么?互斥是唯一的解决方案吗?
答案 0 :(得分:1)
查看XDMessaging,它使用Windows Messaging或File IO for IPC。您还可以使用全局Mutex或Semaphore来实现基本信令。
或者基本方法(如果这适合)。以下内容在新进程中启动应用程序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
。
即,
A
会在B
开始后立即死亡。
B
下载然后应用msi B
启动A
并退出。无论下载是否完成,都会发生这种情况