两个进程之间的进程间通信怎么办?
我需要一些有关进程间通信的帮助。
我有一个应用程序A和一个应用程序B。 应用程序B的目的是更新应用程序A。由于应用程序A无法更新自己,因此必须更新某些dll,这就是使用应用程序B的原因。 应用程序 A 启动应用程序 B,应用程序 B 关闭应用程序 A 并开始更新 A。 更新程序过程分为两步 1) 复制msi位 2) 安装位
如果用户在第一步中取消应用程序 B,而应用程序 A 正在等待,是否有任何方法可以通知应用程序 A 在更新被取消时继续启动应用程序 A。
实现这一目标的最佳方法是什么以及如何实现?互斥体是唯一的解决方案吗?
I need some help regarding interprocess communication.
I have an Application A and Application B.
Application B purpose is to update Application A. As Application A can't update himself, there must be some dll's need to be updated that is why Applicaiton B is used.
Appication A launches App B and App B closes App A and start updating A.
The updater process is two step
1) Copies the msi bits
2) Install the bits
If the user cancels Application B in first step while App A is waiting, is there any way to signal Application A go to ahead launching Application A as updating is been cancelled.
What is the best way to achieve this and how? Is a Mutex the only solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看一下 XDMessaging,它使用 Windows Messaging 或文件 IO 进行 IPC。您还可以使用全局 Mutex 或 信号量来实现基本信号发送。
或者一种基本方法(如果适合的话)。以下代码在新进程中启动应用程序 B,并阻塞直至其退出。您可以使用退出代码来控制行为。
您还可以创建与某些自定义对话框并行运行的更新 MSI,并在更新之前使用自定义操作关闭其他应用程序。有多种方法可以实现此目的,从终止进程到通过 Windows 消息传递发出信号。
Take a look at XDMessaging, which uses Windows Messaging or File IO for IPC. You can also use a global Mutex or Semaphore to achieve basic signalling.
Alternatively a basic approach (if this fits). The following starts Application B in a new process and blocks until it's exited. You can use exit codes to control behaviour.
You could also create an update MSI that runs in parallel with some custom dialog, and use a custom action to close the other app before updating. There's a number of ways to achieve this, from killing the process to signalling via Windows Messaging.
我不会为此使用
Mutex
。我会使用EventWaitHandle
。请参阅将消息从一个正在运行的控制台应用发送到另一个 了解详细信息。I wouldn't use a
Mutex
for this. I'd use anEventWaitHandle
. See Send message from one running console app to another for details.我认为这不应该使用 IPC 来完成。我认为如果用户取消下载,
B
应该启动A
。也就是说,
B
启动,A
就会死亡。B
下载并应用 msiB
启动A
并退出。无论下载是否完成都会发生这种情况I do not think this should be done using IPC. I think
B
should startA
if user cancels download.That is,
A
dies as soon asB
starts.B
download and then applies the msiB
startsA
and exits. This happens irrespective of whether download completes or not