Arhn - архитектура программирования

Как остановить службу во время удаления с помощью WiX Toolset (установщик MSI)?

Я использую WiX Toolset для создания установщика MSI. Это устанавливает приложение Java, которое имеет собственную оболочку, которая устанавливается как служба.

У меня есть это для установки, но когда я пытаюсь удалить его, диспетчер перезапуска обнаруживает используемые файлы и отображает диалоговое окно, в котором говорится, что требуется перезагрузка.

Служба Windows запускает собственную оболочку bin\wrapper-windows-x86-64.exe. Конфигурация компонентов для этого:

    <DirectoryRef Id="bin97543xxxx">
        <Component Guid="cb21cd16-4bb9-4e57-a13c-4d064f01cd43" Id="bin_wrapper_windows_x86_64_exe189026768">
            <File KeyPath="yes" Source="bin\wrapper-windows-x86-64.exe" DiskId="1" Name="wrapper-windows-x86-64.exe" Id="fl_bin_wrapper_windows_x86_64_exe189026768"/>
            <RemoveFile Name="wrapper.log" On="uninstall" Id="rm_fl_bin_wrapper_log123456789"/>
            <ServiceInstall Name="Test App" Description="Test App" Arguments="-s &quot;..\conf\wrapper.conf&quot; wrapper.console.flush=true" Type="ownProcess" Vital="yes" Start="auto" Account="LocalSystem" ErrorControl="ignore" Interactive="no"/>
            <ServiceControl Id="StartService" Name="Test App" Start="install" Stop="both" Remove="uninstall" Wait="yes"/>
        </Component>
    </DirectoryRef>

Эта собственная оболочка запускает JVM java.exe с некоторыми другими JAR и собственными библиотеками DLL. Эти JAR и DLL определены как отдельные компоненты, такие как:

    <DirectoryRef Id="bin_wrapper_lib172428748">
        <Component Guid="91ea3118-769e-4100-80a2-f09a586500a5" Id="bin_wrapper_lib_wrapper_jar565349582">
            <File Source="bin\wrapper\lib\wrapper.jar" DiskId="1" Name="wrapper.jar" Id="fl_bin_wrapper_lib_wrapper_jar565349582"/>
        </Component>
    </DirectoryRef>

Когда я пытаюсь удалить программу, она обнаруживает файлы, используемые java.exe, даже если при остановке службы останавливается JVM. Я проверил это, вручную остановив службу перед попыткой удаления. Также следует отметить, что если я продолжу, все файлы будут успешно удалены, только служба Windows все еще существует (но помечена как удаленная). Журналы MSI показывают это:

Action start 15:48:40: InstallValidate.
... 
MSI (s) (AC:68) [15:48:40:424]: RESTART MANAGER: Detected that application with id 3636, friendly name 'java.exe', of type RmCritical and status 1 holds file[s] in use.
MSI (s) (AC:68) [15:48:40:424]: RESTART MANAGER: Did detect that a critical application holds file[s] in use, so a reboot will be necessary.
...
MSI (s) (AC:68) [15:48:59:078]: RESTART MANAGER: The user chose to go on with the installation, although a reboot will be required.
...
The setup must update files or services that cannot be updated while the system is running. If you choose to continue, a reboot will be required to complete the setup.

Я видел несколько похожих вопросов по SO и списку рассылки пользователей WiX Toolset, но ничего, что действительно помогло. Многие люди пытаются использовать настраиваемые действия, и им сказали использовать вместо этого ServiceControl, который я уже использую.

Я также видел, как кто-то упомянул «логику использования файлов», что, как я полагаю, и делает диспетчер перезапуска. Было предложено добавить связанные файлы в компонент с элементом ServiceControl, но это здесь не похоже (или, по крайней мере, я не уверен, как это сделать, и все еще следую лучшим практикам по разделению компонентов).

Может кто-то указать мне верное направление?


Ответы:


1

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

Установите MSIRESTARTMANAGERCONTROL = Disable. Если это не сработает, закройте диалоговое окно FileInUse из своего MSI-файла;)

30.10.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..