Использование InstallUtil для удаления службы, которая не существует - PullRequest
8 голосов
/ 26 октября 2010

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

Мое текущее событие предварительной сборки, которое удаляется, -

%WinDir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil /u $(TargetPath)

Как можноя использую это для ТОЛЬКО удаления, когда служба уже установлена?

Ответы [ 3 ]

14 голосов
/ 26 октября 2010

Вы можете использовать инструмент Microsoft SC (Sc.exe), чтобы запросить состояние службы или даже создать или удалить ее.Вот статья об использовании этой команды: http://support.microsoft.com/kb/251192

Из окна командной строки (содержимое отредактировано для выделения):

C:\windows\system32>sc
DESCRIPTION:
        SC is a command line program used for communicating with the
        Service Control Manager and services.
USAGE:
        sc <server> [command] [service name] <option1> <option2>...

       The option <server> has the form "\\ServerName"
       Further help on commands can be obtained by typing: "sc [command]"
       Commands:
         query-----------Queries the status for a service, or
                         enumerates the status for types of services.
         queryex---------Queries the extended status for a service, or
                         enumerates the status for types of services.
         start-----------Starts a service.
         pause-----------Sends a PAUSE control request to a service.
         continue--------Sends a CONTINUE control request to a service.
         stop------------Sends a STOP request to a service.
         delete----------Deletes a service (from the registry).
         create----------Creates a service. (adds it to the registry).

Выполнение этой команды для запросаслужба, которая (A) существует и (B) не существует, приводит к:

(A)

C:\Windows\System32>sc query W32Time

SERVICE_NAME: W32Time
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

(B)

C:\Windows\System32>sc query nothere
[SC] EnumQueryServicesStatus:OpenService FAILED 1060:

The specified service does not exist as an installed service.

ИтакВы можете проверить существование службы, прежде чем пытаться удалить ее, используя следующее - (простите за отталкивающее использование оператора FOR, я не совсем уверен, как записать вывод команды sc в переменную или использоватьэто в выражении IF) -

set svcname=W32Time
set svc=exists
for /f "delims=" %%o in ('sc query %svcname% ^| find "FAIL"') do set svc=notexists

if "%svc%"=="exists" sc delete %svcname%
0 голосов
/ 05 февраля 2013

Чтобы построить решение Джима Гримметта и использовать его с .net 4.0, предварительная сборка становится такой:

net stop yourServiceName

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil / u "$ (TargetPath)"

Выход / б 0

и для пост-сборки:

% WinDir% \ Microsoft.NET \ Framework \ v4.0.30319 \ InstallUtil / i "$ (TargetPath)"

net start yourServiceName

rem Выход / b 0

К сожалению, $ (FrameworkDir) не расширился в путь .net 4.0

0 голосов
/ 21 декабря 2011

Я использую Visual Studio 2008 для создания службы, и, как и вы, я хочу переустановить службу для меня, когда мне придется ее перестраивать.

Моя предварительная сборка

net stop P2PSN.Bridge.Service
$(FrameworkDir)\installutil.exe /u $(TargetPath)
Exit /b 0

Сборка моего поста

$(FrameworkDir)\installutil.exe /ShowCallStack $(TargetPath)
net start P2PSN.Bridge.Service

«Выход / b 0» означает, что, даже если служба не установлена, она не выйдет из строя.Точно так же, если вы еще не создали сервис, он все равно будет работать.После первого раза обе эти команды, очевидно, будут успешными.

Чтобы заставить это работать, вы должны запустить визуальную студию с повышенными разрешениями.

Надеюсь, это поможет.

...