2013-08-19 3 views
7

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

Проблема при удалении приложения программа установки просит закрыть приложение перед продолжением.

Error Dialog

Я создал пользовательское действие, которое будет остановить службу, и я запланирован его с действиями Uninstall.

Но оно не выполняется до тех пор, пока я не нажму OK для диалога с ошибкой после ручного прекращения службы.

Это не удалось на Win7, но я тестировал тот же MSI на WinXP и отлично работал (пользовательское действие выполнено перед проверкой использования файла) !!!

Я использую проект установки VS2010 для создания установщика, но у меня нет проблем с его модификацией (например, с помощью Orca) после сборки.

Вот содержание InstallExecuteSequence таблицы:

enter image description here

Я обнаружил, что InstallValidate действие, проверьте In-Use файлов, но я не могу упорядочить мои пользовательские действия, остановить службу до это потому, что его перед тем InstallInitialize действия, которые требуют, чтобы все пользовательские действия, чтобы после того, как он (ICE77 Evaluator)

ICE77 сообщений об ошибке, если в скрипте-настраиваемое действие секвенировали до Действие InstallInitialize или после действия InstallFinalize.

Что я должен делать, я буду использовать MSIRESTARTMANAGERCONTROL свойство, указывающее, использует ли пакет установщика Windows функциональность FilesInUse Dialog, но мне нужно, чтобы уведомить пользователя о других файлах в использовании.

+0

сталкиваюсь такая же проблема с установщиком окон в VS2015. Как вы избавились от этого? – Rajan365

+0

Вам нужно применить ответ ниже, но поскольку вы используете проект установщика VS, вы не сможете автоматически добавить эту строку в эту таблицу. Я бы предложил создать post-build action для выполнения - например, JScript-файл, который вставляет эту строку вручную (проверьте https: // stackoverflow.com/questions/8318920/insert-in-removefile-table-in-msi) для вставки примерной строки –

ответ

1

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

ServiceControl table MSI - это функция «под капотом» для этого. Большинство инструментов установки предоставляют такие элементы мастера, как GUI, для более простого управления этим способом.

Вот вид управления услугами в одной версии Installshield:

enter image description here

+0

Это ПОЛНОСТЬЮ работало для меня, но, похоже, чего-то не хватает. IS будет устанавливать/удалять службу, но после ее установки она не может работать! Когда я использую свою собственную установку, часть этого - это предоставление имени класса для службы, найденной внутри exe. Для этого нет аргументов. (Эта служба написана на Python, но преобразована в exe с pyInstaller). Я могу установить/удалить через CA, но я тогда застрял на исходном вопросе, размещенном здесь! – BuvinJ