两个进程之间的进程间通信怎么办?

发布于 2024-12-04 20:32:11 字数 296 浏览 1 评论 0原文

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

我有一个应用程序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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

生生漫 2024-12-11 20:32:11

看一下 XDMessaging,它使用 Windows Messaging 或文件 IO 进行 IPC。您还可以使用全局 Mutex信号量来实现基本信号发送。

或者一种基本方法(如果适合的话)。以下代码在新进程中启动应用程序 B,并阻塞直至其退出。您可以使用退出代码来控制行为。

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

您还可以创建与某些自定义对话框并行运行的更新 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.

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

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.

老娘不死你永远是小三 2024-12-11 20:32:11

我不会为此使用 Mutex 。我会使用 EventWaitHandle。请参阅将消息从一个正在运行的控制台应用发送到另一个 了解详细信息。

I wouldn't use a Mutex for this. I'd use an EventWaitHandle. See Send message from one running console app to another for details.

百善笑为先 2024-12-11 20:32:11

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

也就是说,

  1. 一旦 B 启动,A 就会死亡。
  2. B 下载并应用 msi
  3. B 启动 A 并退出。无论下载是否完成都会发生这种情况

I do not think this should be done using IPC. I think B should start A if user cancels download.

That is,

  1. A dies as soon as B starts.
  2. B download and then applies the msi
  3. B starts A and exits. This happens irrespective of whether download completes or not
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文