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

StackOverflow https://stackoverflow.com/questions/3008250

Вопрос

В настройках Wix у меня есть, при обновлении приложения я установил требование закрыть приложения, которые могут быть включены в файлы, которые необходимо обновить:

<util:CloseApplication
    Id="CloseMyApp" 
    Target="[MyAppExe]"
    CloseMessage="yes"
    Description="!(loc.MyAppStillRunning)"
    RebootPrompt="no"
    ElevatedCloseMessage="no"
/>

Приложение, с другой стороны, будет захватывать окно с помощью диалогового окна «Удобное», где пользователь может подтвердить, что он или она хочет закрыть приложение.

Когда установщик запускает схематическое применение, он обнаруживает, что приложение должно быть остановлено, но не удается закрыть мое приложение. Одна теория заключается в том, что диалоговое окно останавливает приложение от закрытия.

Таким образом, вопрос в том, может ли это быть возможной проблемой? Если это так - как я могу иметь это диалоговое окно подтверждения и все еще вести себя правильно, когда установщик задает приложение закрыть? Должен ли я слушать сообщения Win32 (например, wm_quit / wm_close) или есть .net API, которую я могу использовать для правильной реагирования на эти события?

Обновлять: Согласно с список рассылки, Сдача подачи заявления отправит WM_CLOSE к приложению. У меня все еще есть проблема с другим поведением, если пользователь закрывает приложение против близкого сообщения, отправленного Wix. Не уверен, как я могу определить различные источники того, как приложение закрывается.

Это было полезно?

Решение 2

Когда VM_Close получает отправку в мое приложение WPF, я получаю как Джим упоминает событие закрытия. В этом событии закрытия я проводил проверку на свойство iSfocused на моем окне класса. Когда это возвращает false, я бросил приложение без какого-либо подтверждения пользователя.

Другие советы

Ваше приложение должно получить WM_CLOSE, которая должна поверхности в вашем приложении .NET как «закрытие» события в вашей основной форме. При обработке, что вы можете использовать API Win32 GetlastiveactivePopup. Чтобы проверить любые активные диалоговые окна, которые вы открываете и закрывают их в зависимости от ситуации.

Вы можете проверить вашу реализацию, открывая диспетчер задач и выполняю «конечный процесс» в вашем приложении. Это попытается сделать нежное отключение сначала, используя метод, аналогичный, какой WIX, вероятно, делает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top