установка/удаление служб Windows во время разработки

Я хотел бы знать, есть ли более простой способ установить или удалить службы Windows в средах разработки или тестирования без создания пакетов установки? Иногда у меня возникают проблемы с удалением пакетов Visual Studio (даже после остановки службы и закрытия консоли управления службами перед удалением, вынуждающим меня перезагрузить компьютер). эту проблему можно решить с помощью таких инструментов, как InstallShield или WIX, для создания установочных пакетов, но во время разработки будет проще, если я смогу установить службу (вместе со всеми зависимыми файлами) в среде разработки или тестирования без создания установочного пакета.


person RKP    schedule 21.02.2011    source источник
comment
Я лично пишу свои сервисы так, чтобы они могли работать как простое приложение или как сервис, что определяется переключателем командной строки. Это значительно упрощает тестирование, отладку и т. д.   -  person David Heffernan    schedule 21.02.2011
comment
Обычно единственный раз, когда у меня возникают проблемы с удалением служб Windows, - это когда я удаляю с все еще открытым диалоговым окном диспетчера управления службами. Кажется, это распространенная проблема, и это всегда исправляло ее для моих сценариев. Это может помочь вам в определенные моменты.   -  person Jeff LaFay    schedule 21.02.2011


Ответы (4)


Используйте installutil, который является частью .net-фреймворк. Теперь вам все еще нужно скопировать каталог bin на нужную машину и зарегистрировать любые COM-объекты, если вы их используете.

person John Koerner    schedule 21.02.2011
comment
спасибо за ответ, если служба Windows ссылается на некоторые библиотеки DLL внешних компонентов, то должен ли я создать папку в папке C:\Program files\Company с именем службы, а затем скопировать все файлы в папку службы перед запуском InstallUtil? - person RKP; 21.02.2011
comment
installutil записывает что-то в реестр? потому что одна раздражающая проблема с установками с использованием пакетов Visual Studio заключается в том, что иногда они не удаляются должным образом, оставляя некоторые следы в реестре, а также служба помечается как отключенная, и единственный способ избавиться от нее - перезагрузить машину - person RKP; 21.02.2011
comment
Вы можете поместить файлы куда угодно, но да, скопируйте все файлы, а затем запустите installutil. Как сказал Адриан в своем ответе, после первоначальной установки вы можете просто остановить службу и просто заменить файлы, которые были обновлены с момента последней установки. - person John Koerner; 21.02.2011
comment
Если вы удалите службу, вам необходимо перезагрузить компьютер, чтобы установить службу с тем же именем. Для разработки просто остановите службу и замените файлы новыми, не удаляйте и не устанавливайте службу заново. - person Jason Goemaat; 21.02.2011

Если вы правильно помните (на данный момент нет доступа к моей машине разработки). Остановите службу - и замените экзешники и dll) перезапустите службу. Вы можете заскриптовать это. Вам нужно будет выполнить первоначальную установку или использовать installutil.exe

Я обнаружил, что это намного проще, чем постоянно устанавливать и удалять.

person Mesh    schedule 21.02.2011
comment
это классно. поэтому, как только служба будет установлена, позже я могу просто остановить службу, заменить файлы и перезапустить службу, и это будет работать без необходимости каждый раз устанавливать и удалять? это правильно? - person RKP; 21.02.2011
comment
это то, что я делал. Даже был bat-скрипт, чтобы сделать это в два нажатия на клавиатуру... - person Mesh; 21.02.2011
comment
может быть, я просто повторяю то, что ты сказал, но просто дважды проверяю, правильно ли я это понял. Я думал, что мне нужно установить и удалить каждый раз, когда я хочу развернуть обновленную службу - person RKP; 21.02.2011
comment
Я разместил свой комментарий до того, как увидел ваш ответ на мой комментарий. спасибо, это весьма полезно. - person RKP; 21.02.2011

Я считаю, что команду SC.EXE легко использовать во время разработки. Вставьте его в файл NAnt/BuildBuild/Perl/BAT и мгновенная легкая автоматизация.

person Christopher Painter    schedule 21.02.2011

Я знаю, что это старый вопрос, но я считаю, что эта информация очень актуальна для всех, кто борется с этой проблемой:

Проблема связана с изменением установщика, включенного в Visual Studio. Я думаю, что изменение произошло между VS2005 и VS2008. Несмотря на это, после изменения, чтобы программа установки обновлений работала правильно без удаления предыдущего продукта, было рекомендовано устанавливать службы с помощью настраиваемых действий на этапах установки, фиксации и отката, но не на этапе удаления. Я полагаю, это связано с тем, что изменение вызвало действие «Удалить» после установки новой версии, удаляя вашу службу при обновлении. Условие «НЕ ПРЕДЫДУЩИЕ ВЕРСИИ УСТАНОВЛЕНЫ» помещается в 3 настраиваемых действия, а проверка наличия предыдущих версий должна быть ИСТИНА. Это приводит к тому же результату, что и копирование файлов поверх старых (но также сохраняет любые другие действия по установке, такие как регистрация объектов и т. д.).

Все это прекрасно работает для обновлений; новая версия установится поверх существующей версии, сервис останется зарегистрированным, все хорошо. Однако, если вы удалите, ваша служба останется зарегистрированной, и новая установка попытается зарегистрировать ее снова, что приведет к ошибке 1001. Я использую SC.EXE для удаления службы вручную при удалении, чтобы избежать этого. Вы можете выполнить чистую деинсталляцию, но это нарушит установку обновлений, на ваш выбор.

person G DeMasters    schedule 22.04.2016