Мне нужна помощь в отношении межпроцессного взаимодействия.
У меня есть приложение A и приложение B. Целью приложения B является обновление приложения A. Поскольку приложение A не может обновлять себя, должны быть обновлены некоторые dll, поэтому используется Applicaiton B. Приложение A запускает приложение B, а приложение B закрывает приложение A и начинает обновление A. Процесс обновления состоит из двух шагов: 1) копирует биты msi 2) устанавливает биты
Если пользователь отменяет приложение B на первом этапе, пока приложение A находится в ожидании, есть ли какой-либо способ сигнализировать приложению A о продолжении запуска приложения A, поскольку обновление было отменено.
Каков наилучший способ добиться этого и как? Является ли Mutex единственным решением?
Ответ 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.
Ответ 3 · Miserable Variable
Я не думаю, что это следует делать с помощью IPC. Я думаю, что B должен начать A, если пользователь отменит загрузку.
Это,
A умирает, как только начинается B.
B загрузите, а затем примените msi
B запускает A и выходит. Это происходит независимо от того, завершена загрузка или нет.