Пакетный сценарий для установки или удаления службы .NET Windows

У меня нет опыта написания пакетных сценариев, но мне было интересно, есть ли способ установить службу .NET Windows с помощью installutil.exe с помощью такого сценария или удалить службу, если она уже установлена, в идеале с каким-то подтверждением того, что я действительно хотел бы выполнить удаление (например, нажмите y для удаления).

Вот некоторые подробности:

  • .Exe для службы находится в каталоге C:\Program Files\Data Service.
  • Скрипт должен находиться в том же каталоге, что и .exe для службы.
  • Было бы неплохо добавить простую строку в файл журнала (мы назовем его program.log, также в этом каталоге) после установки службы
  • Машина работает под управлением Windows Server 2003 с установленной .NET Framework в каталоге по умолчанию C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

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


person John Rasch    schedule 24.02.2009    source источник


Ответы (10)


Вы можете настроить свой служебный exe для поддержки саморегистрации / отмены регистрации с использованием аргументов командной строки (-i -u и т. Д.) Вместо того, чтобы писать командный файл, чтобы сделать то же самое.

Информация о создании самоустанавливающихся служб в .NET

http://anotherlab.rajapet.net/2006/06/self-installing-services-in-net.html

http://www.gotnet.biz/WindowsServiceSelfInstaller.ashx

Кроме того, добавление проекта установки в решение и создание установочного пакета Visual Studio может быть быстрее.

Как создать проект установки для службы Windows в Visual Basic .NET или Visual Basic 2005

(VB) http://support.microsoft.com/kb/317421

(C #) http://support.microsoft.com/kb/816169

person VBNight    schedule 24.02.2009
comment
Обратите внимание, что Microsoft удалила тип проекта установки в Visual Studio 2012. - person Anthony F; 06.05.2013
comment
все ссылки, кроме vb, мертвы. - person Tobias Feil; 22.05.2019

Это командные файлы, которые я использовал для установки.

@ECHO OFF

REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Installing MyService...
echo ---------------------------------------------------
InstallUtil /i MyService.exe
echo ---------------------------------------------------
echo Done.
pause

Для удаления я использовал следующее:

@ECHO OFF

REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Uninstalling MyService...
echo ---------------------------------------------------
InstallUtil /u MyService.exe
echo ---------------------------------------------------
echo Done
person Kinze    schedule 24.02.2009
comment
Когда я запускаю командный файл в режиме администратора, PATH относится к C:\Windows\system32\service.exe, а не к пути, по которому файл действительно существует, почему? - person Anoop; 12.06.2014
comment
@Anoop этот пост был старым из-за того, что он работал с ролью администратора при установке службы Windows, так как Windows Vista. Я предлагаю (setlocal enableextensions) и (cd / d% ~ dp0) в верхней части каждого файла. - person Tấn Nguyên; 21.05.2018

Проще просто сделать самоустанавливающиеся сервисы. Как только вы это реализуете, вы можете либо запустить службу exe напрямую с помощью переключателя (/ i или / u), либо, если хотите, обернуть вызов в пакетный файл.

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        //Install service
        if (args[0].Trim().ToLower() == "/i")
        { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/i", Assembly.GetExecutingAssembly().Location }); }

        //Uninstall service                 
        else if (args[0].Trim().ToLower() == "/u")
        { System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); }
    }
    else
    {
        System.ServiceProcess.ServiceBase[] ServicesToRun;
        ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
        System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    }
}
person Annagram    schedule 10.02.2011
comment
Это предложение намного проще, чем поддерживать проекты установки или пакетные сценарии. - person Xorandor; 21.03.2013
comment
Я пытаюсь написать инструкцию Console.WriteLine('') для установки и удаления, но она не отображается. Есть идеи, почему это происходит? - person mrid; 19.05.2020

Это тот, который я использую. Нашел и пользуюсь. Спасибо создателю ..

@echo off

SET PROG="YourServiceHere.exe"
SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v"
SET SECONDPART="\InstallUtil.exe"
SET DOTNETVER=2.0.50727
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.1.4322
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.0.3705
  IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
GOTO fail
:install
  ECHO Found .NET Framework version %DOTNETVER%
  ECHO Installing service %PROG%
  %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG%
  GOTO end
:fail
  echo FAILURE -- Could not find .NET Framework install
:param_error
  echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)]
:end
  ECHO DONE!!!
  Pause
person Jos    schedule 22.12.2010

Я обнаружил, что всегда лучше использовать хороший проект установки, чем использовать пакетные файлы для установки приложения. Однако бывают случаи, когда это невозможно. Несколько работающих проектов были написаны еще во времена Windows NT и ранних версий Windows XP, и для установки использовались простые командные файлы. В те времена преобразование командного файла в упакованный для установки представляет собой больше проблем, чем простая настройка. Путем тщательного поиска я обнаружил, что http://ss64.com/nt/ - очень хороший пакет для Windows. ссылка на файл. (При всем нашем прогрессе в области программных технологий просто странно писать это последнее предложение.)

В любом случае, удачного кодирования! - вне зависимости от «языка».

person iKevin    schedule 26.09.2012

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

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ InstallUtil.exe / i ServiceAssembly.dll

person Al W    schedule 24.02.2009

Предложения:

  • Используйте среду, Windows не может быть установлена ​​на C :. Но вы можете использовать% WinDir%.
  • Вы можете перенаправить эхо для добавления в файл:

    эхо Сообщение >> logfile.txt

  • Отслеживание всего и преобразование всех крайних случаев в cmd.exe может быть сложной задачей, это не богатая среда.

  • Нет единого места для документации. Но справка (из командной строки) по «cmd», «if», «for», «set» и «call» покрывает большую часть доступного синтаксиса.
  • Отключите эхо в начале, чтобы видеть команды по мере их выполнения.
person Richard    schedule 24.02.2009

создайте файл с расширением .bat и поместите его в файл

installutil -u c: \ YourServiceLocation \ Service.exe

person Oscar Cabrero    schedule 24.02.2009

Я сделал это с помощью старомодного командного файла ....

Скопируйте installutil.exe в тот же каталог, что и ваш исполняемый файл (для упрощения работы). Ниже приведен общий пример содержимого необходимого командного файла: (у меня были просто имена instal.bat)


installutil MyService.exe 
sc config MyService type= interact type= own
sc failure MyService reset= 6000  actions= restart/5000/restart/5000/restart/5000
sc start MyService 

Дополнительную информацию о параметрах командной строки для installutil.exe см. здесь .

Чтобы удалить службу, используйте другой командный файл со следующим содержимым:


installutil MyService.exe /u

person David    schedule 24.02.2009

@echo off

SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install

GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause

запустите этот bat-файл от имени администратора

person chevhfghfghfgh    schedule 30.05.2014