Отмена установки / удаления службы Windows с помощью установщика Windows приводит к неполной установке / удалению службы - PullRequest
0 голосов
/ 20 мая 2018

Я создал установщик Windows для службы Windows с VS 2017. Служба Windows содержит установщик проекта и класс установщика службы.Когда я отменяю процесс удаления на полпути, процесс удаляет службу Windows, но не обновляет данные, поэтому при следующем запуске программы установки я получаю опцию Восстановить или удалить службу Windows.Попытка удалить службу Windows теперь приводит к ошибке, что «указанная служба не существует», и, следовательно, процесс удаления откатывается.Теперь система находится в состоянии, когда служба не может быть ни установлена, ни удалена.Чтобы иметь возможность полностью удалить службу, ее необходимо снова установить из командной строки, чтобы ее можно было правильно удалить.Есть ли способ обойти эту проблему?Я думал об использовании таблицы установки службы, чтобы убедиться, что служба удаляется должным образом даже при отмене, но затем я получаю сообщение об ошибке, что служба уже установлена ​​при попытке установить службу [Классы Установщик проекта / Установщик службы выполняют эту установку,Я думаю]

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Сначала убедитесь, что вы выполнили все узлы установщика службы настраиваемых действий, в частности, заполнили настраиваемые действия узла фиксации и отката.Все эти пользовательские действия работают вместе, поэтому, если вы пропустили одно из них, это может вызвать проблему.Теоретически при отмене удаления следует отметить, что служба больше не устанавливается, и ее следует переустановить.

Если это не проблема, то это, вероятно, ошибка.Самое полезное, что вы можете сделать, чтобы исправить это, - переопределить base.Uninstall () в классе установщика и добавить некоторый код, чтобы проверить, действительно ли служба установлена ​​перед вызовом base.Uninstall ().

Проекты установки Visual Studio - единственные, которые используют код для установки служб, и они представляют собой настраиваемые действия для вызова методов класса установщика.Все остальные используют таблицы ServiceInstall и ServiceControl, предоставляемые установщиком Windows.

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

  1. Таблицы ServiceControl и ServiceInstall не слишком сложны, еслиВы знаете что-то об услугах.Если вы прокрутите отсюда вниз до абзаца о Visual Studio и установке сервисов, вам поможет статья и программа:

http://www.installsite.org/pages/en/msi/tips.htm

Вы можете погрузиться в WiX достаточно, чтобы создать модуль слияния, который установит службы вместе с любыми необходимыми действиями запуска / остановки.Затем объедините этот модуль слияния с вашей установкой Visual Studio.Никаких настраиваемых действий не требуется (а установочные классы - это настраиваемые действия, поэтому они вам не нужны).
0 голосов
/ 20 мая 2018

Установщики MSVS и пользовательские действия : Вы используете Проекты установщика Microsoft Visual Studio 2017 ? Они очень ограничены .Использование пользовательских действий для установки службы является одним из признаков этого.В общем случае использование пользовательских действий очень подвержено ошибкам (может быть чрезмерная запись), а для установки службы это почти никогда не правильный подход.Избавьтесь от пользовательских действий, когда это возможно, и частота ошибок развертывания упадет.

Встроенные функции установки службы : следует использовать встроенную установку службыфункции установщика Windows ( ServiceInstall и ServiceControl таблиц - с которыми вы, кажется, знакомы), и есть ряд инструментов, которые могут помочь вам сделать это. Вот несколько альтернативных инструментов (бесплатных и коммерческих), которые вы можете использовать .WiX отлично справляется со своей задачей, но у него есть кривая обучения.


Состояние службы : я бы перезагрузился в вашем случае, чтобы избавиться от службытекущее состояние ошибки.Это может быть нечетное состояние в ожидании удаления, которое может привести к странным результатам теста.Я никогда не трачу время на то, чтобы должным образом исследовать такие проблемы, вместо этого предпочитаю попытаться устранить их, просто перезагрузившись, чтобы избавиться от состояния ошибки.Затем выполните правильное развертывание со встроенными функциями, и это состояние ошибки никогда не должно возникать.Устранена ли проблема, решено ли десять проблем?(желаемое за действительное :-)).


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