установка службы Windows с помощью SC.exe или InstallUtil.exe - есть разница, но какая? - PullRequest
43 голосов
/ 14 января 2011

SC.exe и InstallUtil обе устанавливают / удаляют службы Windows.Но, похоже, они не работают одинаково.

В чем разница?


Например, InstallUtil завершается ошибкой (какой-то файл или зависимость не найдена) пока Sc create с радостью установит сервис.Слишком добавить к странности;служба не отображается, если я запускаю net start в консоли.Но это действительно появляется в графическом интерфейсе сервисов.Варианты этого случаются, когда я пытаюсь удалить.

Я написал сервис самостоятельно, и более ранние версии работают.Dotnet3.5.

Ответы [ 5 ]

27 голосов
/ 14 января 2011

Да, установка службы не особенно сложна.Это просто требует написания нескольких ключей реестра.Вы можете посмотреть Regedit.exe, перейдите к HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services.

Sc.exe также может писать эти ключи, используя предоставленные аргументы командной строки.Тем не менее, это не правильный способ сделать это.Суть InstallUtil.exe в том, что он может активировать пользовательский установочный код.Код, который написал автор сервиса.Что не редкость, сервисы, как правило, заполняют конфигурационную информацию своими регистрационными ключами для собственного использования.Вы увидите множество доказательств этого, когда загляните в Regedit.

13 голосов
/ 28 сентября 2012

Я предпочитаю sc.exe миллиону раз по сравнению с installutil.exe.

InstallUtil заставляет вас добавить ужасный класс ProjectInstaller (я полагаю) и жестко закодировать там имя службы и описание службы.

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

Вот почему я просто не использую InstallUtil.exe вообще. Также из-за предыдущих ответов: он должен быть в вашем пакете развертывания. sc.exe уже есть в любой Windows XP и выше (я считаю).

5 голосов
/ 24 апреля 2014

Основное отличие заключается в том, что InstallUtil - это не утилита, предназначенная для установки службы, а средство общего назначения. На страницах MSDN видно, что:

"Программа установки - это утилита командной строки, которая позволяет вам установить и удалить ресурсы сервера, выполнив установщик компоненты в указанных сборках. Этот инструмент работает в сочетании с классами в пространстве имен System.Configuration.Install. "

Так что он может установить сервис, но у него есть много-много других преимуществ. Создание исполняемых файлов на основе Класс установщика дает вам программный контроль над всей процедурой установки / удаления. ServiceInstaller и ServiceProcessInstaller , например, используются для установки службы.

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

В вашем примере
1. Он не предназначен для установки с InstallUtil , и об ошибке должно быть достаточно ясно.
2. InstallUtil завершается ошибкой из-за ошибки в коде установки и использовании sc create вероятно создаст неисправный сервис для вас. Проверьте в {exe_name} .InstallLog для деталей.

2 голосов
/ 25 октября 2011

Из опыта использования удаления: sc.exe под windows 7 сразу удаляет запись из списка, а после удаления с помощью installutil возникает необходимость перезагрузки

1 голос
/ 09 февраля 2018

Хотя InstallUtil является предпочтительным способом работы со службами .NET, одним из его недостатков является то, что он не получает перенаправления привязки из вашего app.config, что в некоторых случаях может привести к сбою установки.Вот где использование SC может принести вам некоторую пользу за счет невозможности выполнения кода во время установки.

К сожалению для OP, TopShelf не существовало на моментего вопрос.Он работает с недостатками SC и InstallUtil и позволяет запускать службу с подключенным отладчиком при запуске в Visual Studio.Кроме того, гораздо проще набрать myservice install, чем переходить к определенной папке для InstallUtil или вводить тонну параметров для SC.

...