WiX CloseApplication для EXE и DLL - PullRequest
       45

WiX CloseApplication для EXE и DLL

1 голос
/ 07 октября 2010

Я создал проект установки WiX на основе статьи Учебное пособие по WiX 3: Понимание основного файла WXS и WXI главным образом потому, что оно дает WiX, необходимый для завершения работы приложения.

Однако, я озадачен результатом. Вот ситуация:

У нас есть исполняемый файл, который использует DLL и создает установку, которая устанавливает исполняемый файл и DLL. Мы выполняем настройку.

CASE 1 : Далее мы меняем исполняемый файл, а не DLL и создаем установку заново. Затем мы запускаем установленное приложение и проверяем, что dll также загружена. Если мы теперь выполним вторую настройку, появится диалоговое окно с просьбой отключить исполняемый файл, как мы и ожидали.

CASE 2 : Но если мы не изменим приложение, а только dll, а затем выполним настройку, пока приложение работает и dll загружена, диалог не отображается. В конце настройки появится диалоговое окно с вопросом, хотим ли мы перезагрузить компьютер.

Является ли это ожидаемым поведением и как я могу заставить диалоговое окно завершения работы приложения CASE 1 также, когда изменяется только DLL, как в CASE 2? Я не хочу, чтобы пользователь перезагружал компьютер, потому что приложение работает на сервере, который не может быть перезапущен.

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Я не проверял код, но думаю, что происходит, потому что действие CloseApplication не запущено, потому что он видит, что exe-файл не изменился.Насколько я знаю, вы не можете настроить таргетинг на DLL с помощью CloseApplication.Если вы запустите установку с ведением журнала, вы сможете увидеть, запущено ли действие.Я предполагаю, что у вас есть расписание RemoveExistingProducts в конце установки, если вы переместите его после InstallValidate, он будет каждый раз удалять exe и, следовательно, запускать действие.

0 голосов
/ 07 октября 2010

Все это определяется установщиком Windows в процессе калькуляции.Программа установки решает, какие файлы необходимо установить / обновить, и рассчитывает, сколько дискового пространства необходимо и есть ли какие-либо блокировки файлов.Если существуют блокировки файлов, он пытается разрешить блокировку для процесса с помощью дескриптора окна.Если это может сделать это, вы получите диалог.Если это невозможно, вы не будете.Это не означает, что перезагрузка не понадобится, просто она не может дать вам полезную информацию о том, как ее избежать.

Несколько дополнительных замечаний:

Убедитесь, что вы работаете с версиямиваш EXE и DLL.Если старая DLL - 1.0.0.0, а новая - 1.0.0.0, то стоимость скажет «Ничего не делать здесь».

Как EXE-файл использует DLL во время выполнения?Он может просто не иметь блокировки на протяжении всей жизни процесса.

Понимать, что поведение MSI при перезагрузке может быть изменено с помощью таких свойств, как REBOOT = ReallySuppress

Вот некоторые хорошиеСтатьи для чтения:

InstallValidate FileInUseDialog Перезагрузка системы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...