Что делать с межпроцессным взаимодействием двух процессов? - PullRequest
0 голосов
/ 17 сентября 2011

Мне нужна помощь по межпроцессному взаимодействию.

У меня есть Приложение A и Приложение B. Цель приложения B - обновить Приложение A. Поскольку приложение A не может обновлять себя, должна быть какая-то необходимость в dllбыть обновленным, поэтому применяется Приложение B.Приложение A запускает приложение B, а приложение B закрывает приложение A и начинает обновление A. Процесс обновления состоит из двух этапов: 1) Копирование битов msi. 2) Установка битов

Если пользователь отменяет приложение B на первом этапе, пока приложениеА ожидает, есть ли способ сообщить о Приложении А, чтобы продолжить запуск Приложения А, поскольку обновление было отменено.

Каков наилучший способ добиться этого и как?Является ли Mutex единственным решением?

Ответы [ 3 ]

1 голос
/ 17 сентября 2011

Взгляните на XDMessaging , который использует Windows Messaging или File IO для IPC.Вы также можете использовать глобальный Mutex или Семафор для достижения базовой сигнализации.

В качестве альтернативы базовый подход (если это подходит).Следующее запускает Приложение B в новом процессе и блокирует его до его завершения.Вы можете использовать коды выхода для управления поведением.

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

Вы также можете создать обновленный MSI, который запускается параллельно с некоторым настраиваемым диалогом, и использовать настраиваемое действие, чтобы закрыть другое приложение перед обновлением.Есть несколько способов добиться этого, от остановки процесса до сигнализации через Windows Messaging.

0 голосов
/ 17 сентября 2011

Я не думаю, что это должно быть сделано с помощью IPC. Я думаю B должно начаться A, если пользователь отменяет загрузку.

То есть

  1. A умирает, как только начинается B. * * 1010
  2. B скачать и затем применить MSI
  3. B начинает A и выходит. Это происходит независимо от того, завершена загрузка или нет
0 голосов
/ 17 сентября 2011

Я бы не использовал Mutex для этого. Я бы использовал EventWaitHandle. Подробнее см. Отправка сообщения из одного запущенного консольного приложения в другое .

...