Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Что делать с межпроцессным взаимодействием между двумя процессами?

Автор вопроса: alice7Ответов: 3

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

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

Если пользователь отменяет приложение B на первом этапе, пока приложение A находится в ожидании, есть ли какой-либо способ сигнализировать приложению A о продолжении запуска приложения A, поскольку обновление было отменено.

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

  • mutex, безусловно, не единственное решение. У вас есть полный контроль над обоими приложениями, и это два приложения Windows Forms или WPF? если B отменяется, что вы хотите, чтобы A продолжал делать? Снова открыть B или проигнорировать и продолжать работать в обычном режиме? Davide Piras 17.09.2011
  • Оба являются приложениями WPF. Да, у меня есть контроль. Если B отменяется, я хочу, чтобы A продолжалось в обычном режиме alice7 17.09.2011
  • Вы можете отредактировать свой вопрос с более подробной информацией? Например, может ли пользователь продолжать использовать A, пока B работает? зачем вам два отдельных приложения? Davide Piras 17.09.2011
  • @David: я добавил более подробное описание своей проблемы. alice7 17.09.2011

ipcprocessmutex

Ответы

Ответ 1 · рейтинг 1 · TheCodeKing

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

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

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

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

Ответ 2 · Jim Mischel

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

Ответ 3 · Miserable Variable

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

Это,

  1. A умирает, как только начинается B.
  2. B загрузите, а затем примените msi
  3. B запускает A и выходит. Это происходит независимо от того, завершена загрузка или нет.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы