Пакетный скрипт для установки или удаления .NET Windows Service - PullRequest
16 голосов
/ 24 февраля 2009

У меня нет опыта написания пакетных сценариев, но мне было интересно, есть ли способ установить службу .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

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

Ответы [ 10 ]

31 голосов
/ 24 февраля 2009

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

@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
24 голосов
/ 10 февраля 2011

Проще сделать самоустанавливающиеся сервисы. Как только вы это осуществите, вы можете запустить 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);
    }
}
13 голосов
/ 24 февраля 2009

Вы можете настроить 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

6 голосов
/ 22 декабря 2010

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

@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
4 голосов
/ 27 сентября 2012

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

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

2 голосов
/ 24 февраля 2009

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

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

0 голосов
/ 30 мая 2014
@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-файл от имени администратора

0 голосов
/ 24 февраля 2009

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

installutil -u c: \ YourServiceLocation \ Service.exe

0 голосов
/ 24 февраля 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

0 голосов
/ 24 февраля 2009

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

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

    echo A message >> logfile.txt

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

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