.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
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