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

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

Вот несколько деталей:

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

@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

Ответ 3

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

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);
    }
}

Ответ 4

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

@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

Ответ 5

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

В любом случае, Happy Coding! - независимо от "языка".

Ответ 6

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

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

Ответ 7

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

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

    echo Сообщение → logfile.txt

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

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

Ответ 8

Я сделал это со старомодным пакетным файлом....

Скопируйте файл 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

Ответ 9

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

installutil -u c:\YourServiceLocation\Service.exe

Ответ 10

@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 как администратор