Служба Windows не появляется в списке служб после установки - PullRequest
52 голосов
/ 13 октября 2009

Я создал службу Windows в C #, используя Visual Studio 2008 Я в значительной степени следовал за этим: http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

Я создал проект установки, как указано в статье, и запустил его ... он устанавливает мой сервис в папку c: \ program files \ product и т. д. .... однако в списке сервисов он не появляется.

Чего мне не хватает?

Ответы [ 8 ]

102 голосов
/ 13 октября 2009

Самая важная часть статьи, которую вы связали, находится здесь

Добавление пользовательского действия в проект установки

1.В обозревателе решений щелкните правой кнопкой мыши проект установки, выберите View, затем выберите Пользовательские действия. Обычай Появится редактор действий.

2.В редакторе пользовательских действий щелкните правой кнопкой мыши узел Пользовательские действия. и выберите Добавить настраиваемое действие. Выберите пункт в диалоговом окне проекта появляется.

3. Дважды щелкните папку приложения в списке, чтобы открыть ее, выберите первичный выход из MyNewService (Активен) и нажмите ОК. Главная выход добавляется ко всем четырем узлам пользовательские действия Установить, зафиксировать, Откат и удаление.

4. Сборка проекта установки.

Если вы пропустите эти шаги, ваш проект установки создаст и скопирует ваши файлы в правильный каталог; однако они не зарегистрируют ваш двоичный файл как сервис без этих шагов.


Следует также отметить, что это работает для более старых версий Visual Studio, которые имели / имеют встроенный шаблон проекта установки / развертывания. Более новые версии Visual Studio имеют различные проекты установки / развертывания (для некоторых требуется стороннее программное обеспечение.)

Я бы порекомендовал посмотреть WiX Toolset и проверить здесь WiX Установка служб Windows.

6 голосов
/ 18 июля 2011

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

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

Или, если вы делаете это в коде, убедитесь, что вы установили:

serviceInstaller.Parent = this;

и

serviceProcessInstaller.Parent = this;
6 голосов
/ 11 марта 2010

Это лицо мне принадлежало, поэтому я помещаю это здесь на всякий случай, если кто-нибудь еще столкнется с ним.

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

3 голосов
/ 31 января 2014

При установке сервисов я настоятельно рекомендую использовать NSSM , который хорошо мне подходит для всех моих потребностей WinService. Он может установить любой исполняемый файл (даже если .bat, .cmd) в качестве службы и гарантирует, что ваша служба всегда работает и работает.

Чтобы использовать этот инструмент:

  1. Скачать с здесь

  2. И следуйте инструкциям здесь

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

1 голос
/ 13 октября 2009

Следуйте этим инструкциям, они работали для меня. Специально для настройки эта часть находится в нижней части статьи.

MSDN. Пошаговое руководство. Создание службы Windows

0 голосов
/ 28 августа 2017

Я обнаружил, что ваш класс установщика находится в том же проекте, что и Сервис. Установщик не может существовать в проекте библиотеки, на который ссылается Сервис.

0 голосов
/ 28 сентября 2015

Вот хорошее руководство от tgeek001 от CodeProject.com, которое мне помогло. Это включает в себя несколько вещей, которые я не видел в постах выше: 1. Код обработчика событий для остановки службы перед ее удалением 2. Конкретные условия и свойства в коде настраиваемых действий, которые необходимо установить для предотвращения сбоев (они исправили ошибку 1001, возникшую при выполнении инструкций в принятом ответе выше) 3. Свойство Win Service «Удалить предыдущую версию» имеет значение true

http://www.codeproject.com/Tips/575177/Window-Service-Deployment-using-VS

Ниже приведено учебное пособие по настройке пользовательских действий (случай имеет значение):

  • Установить, установить для свойства Condition следующее: «НЕ (установлено или предварительно установлено)»
  • Удалите, установите для свойства Condition значение «NOT UPGRADINGPRODUCTCODE»
  • Фиксация: установите для поля «Данные пользовательских действий» значение: / OldProductCode = "[PREVIOUSVERSIONSINSTALLED]"

Наконец, в проекте WinService обязательно установите для раскрывающегося списка «Удалить предыдущие версии» значение true.

ура

0 голосов
/ 12 июня 2015

В Visual Studio 2013 я столкнулся с той же проблемой, используя шаблон InstallShield для приложения-службы. Но это работает как очарование при использовании шаблона проекта установки https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d

поэтому загрузите шаблон Setup Project, закройте вашу Studio, запустите эту установку и запустите вашу Studio, это будет работать.

Dunn.

...