2009-02-24 4 views
14

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

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

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

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

ответ

13

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

+4

Обратите внимание, что Microsoft удалила тип проекта установки в Visual Studio 2012. –

0

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

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

    эхо А сообщение >> LogFile.txt

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

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

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

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Installutil.exe/я ServiceAssembly.dll

27

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

@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 
+0

Спасибо ... прекрасно работавшую – Lijo

+3

Когда я запустить пакетный файл в режиме Администратора 'PATH' ссылается на службу C: \ Windows \ system32 \.exe', а не путь к файлу на самом деле, почему? – Anoop

0

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

Скопировать в 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, see here.

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


installutil MyService.exe /u 

0

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

InstallUtil -uc: \ YourServiceLocation \ Service.exe

6

Это тот, который я использую. Я нашел его и использовал. 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 
22

Проще просто сделать услуги самообучения. Как только вы это реализуете, вы можете либо запустить службу 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); 
    } 
} 
+1

Это предложение намного проще, чем поддерживать проекты установки или пакетные скрипты. – Xorandor

+1

Так просто! Спасибо –

+1

Это один из самых удобных сообщений, которые я прочитал! – Force

4

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

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

0
@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 

запустить эту летучая мышь файл как администратор

 Смежные вопросы

  • Нет связанных вопросов^_^