nssm manager ejemplo desde create .net installer service batch-file windows-server-2003

.net - manager - sc create ejemplo



Secuencia de comandos por lotes para instalar o desinstalar un servicio de Windows.NET (10)

No tengo experiencia en la escritura de scripts por lotes, pero me preguntaba si habría una manera de instalar un servicio .NET de Windows usando installutil.exe usando tal script, o desinstalar el servicio si ya está instalado, idealmente con algún tipo de confirmación de que Realmente me gustaría realizar la desinstalación (por ejemplo, presione y para desinstalar).

Aquí hay algunos detalles:

  • El .exe para el servicio se encuentra en el directorio C:/Program Files/Data Service
  • La secuencia de comandos debe estar en el mismo directorio que el .exe para el servicio
  • Sería bueno agregar una línea simple a un archivo de registro (lo llamaremos program.log , también en este directorio) después de que se haya instalado el servicio
  • La máquina ejecuta Windows Server 2003 con .NET Framework instalado en el directorio predeterminado C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727

Si crees que esto podría hacerse de una mejor manera, sería bueno escuchar otras sugerencias. Siempre podría escribir un instalador de servicio, pero eso no es una prioridad.


Descubrí que siempre es mejor usar un buen proyecto de instalación que usar archivos por lotes para instalar una aplicación. Hay veces que eso no se puede hacer. Varios proyectos en el trabajo se escribieron en los días de Windows NT y principios de Windows XP y utilizan archivos de proceso por lotes simples para la instalación. Durante esos momentos, convertir el archivo por lotes en una instalación empaquetada es más problemático que un simple ajuste. A través de mucha búsqueda, he encontrado que http://ss64.com/nt/ es una muy buena referencia de archivo por lotes de Windows. (Simplemente se siente extraño, con todo nuestro avance en tecnologías de software, tener que escribir la última oración).

De todos modos, feliz codificación! - Independientemente del "idioma".


Es más fácil simplemente hacer servicios de autoinstalación. Una vez que implemente esto, puede ejecutar el exe de servicio directamente con el (conmutador / io / u), o envolver la llamada en un archivo por lotes si lo desea.

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


Este es el que yo uso. Lo encontré y lo uso. Gracias al creador ..

@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


Estos son los archivos por lotes que solía instalar.

@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

Para desinstalar usé lo siguiente:

@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


Hice esto con un archivo por lotes a la antigua ...

Copie el archivo installutil.exe en el mismo directorio que su ejecutable (para facilitar las cosas) El siguiente es un ejemplo genérico del contenido del archivo por lotes necesario: (el mío era solo nombres 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

Para obtener más información sobre las opciones de la línea de comandos para installutil.exe, consulte aquí .

Para desinstalar el servicio, use un archivo por lotes diferente con el siguiente contenido:

installutil MyService.exe /u


No estoy seguro de por qué necesitaría un archivo por lotes para una sola línea. esto es lo que usaría.

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


Puede configurar su exe de servicio para admitir el registro / anulación de registro automático utilizando argumentos de línea de comando (-i -u, etc.) en lugar de escribir un archivo por lotes para hacer lo mismo.

Información sobre cómo crear servicios de auto instalación en .NET

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

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

Además, agregar un Proyecto de instalación a su solución y hacer que Visual Studio compile un paquete de instalación podría ser más rápido.

Cómo crear un proyecto de instalación para un servicio de Windows en Visual Basic .NET o en Visual Basic 2005

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

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


Sugerencias:

  • Hacer uso del entorno, Windows no puede instalarse en C :. Pero puedes usar% WinDir%.
  • Puedes redirigir el eco para adjuntarlo a un archivo:

    echo un mensaje >> logfile.txt

  • Hacer un seguimiento de todo y convertir todos los casos perimetrales puede ser difícil en cmd.exe, no es un entorno rico.

  • No hay lugar consistente para la documentación. Pero la ayuda (desde la línea de comandos) en "cmd", "if", "for", "set" y "call" cubre gran parte de la sintaxis disponible.
  • Activa el eco al inicio para ver los comandos a medida que se ejecutan.

cree un archivo con la extensión .bat y colóquelo en el archivo

installutil -uc: / YourServiceLocation / Service.exe


@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

ejecutar este archivo bat como administrador