2012-09-28 42 views
9

Tengo el siguiente en un archivo bat:¿Cómo instalar el servicio de Windows con el archivo por lotes?

@ECHO OFF 

REM The following directory is for .NET 4.0 
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319 
set PATH=%PATH%;%DOTNETFX2% 

echo Installing IEPPAMS Win Service... 
echo --------------------------------------------------- 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil My.WindowsService.exe 
echo --------------------------------------------------- 
pause 
echo Done. 

El problema es que incluso si el archivo del palo se encuentra en la misma carpeta que el My.WindowsService.exe que tratará de buscar en C : \ Windows \ System32 .....

¿Cómo soluciono esto?

+0

Simplemente adivinando, pero ¿qué pasa con. \ My.WindowsService.exe? – akluth

Respuesta

9

Ésta es la forma en que se resuelve:

@ECHO OFF 

REM The following directory is for .NET 4.0 
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319 
set PATH=%PATH%;%DOTNETFX2% 

echo Installing IEPPAMS Win Service... 
echo --------------------------------------------------- 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil "%~dp0My.WindowsService.exe" 
echo --------------------------------------------------- 
pause 
echo Done. 
+0

"% ~ dp0": la variable% ~ dp0 (que es cero) cuando se hace referencia en un archivo por lotes de Windows se ampliará a la letra de la unidad y a la ruta de ese archivo por lotes. Las variables% 0-% 9 se refieren a los parámetros de línea de comandos del archivo por lotes. % 1-% 9 hace referencia a los argumentos de la línea de comando después del nombre del archivo por lotes. % 0 hace referencia al archivo por lotes en sí. [Marque esta respuesta] (https://stackoverflow.com/a/10290765/3378621) –

5

De acuerdo con varios artículos que he encontrado, pasar un camino absoluto a su servicio es lo que desea. Por ejemplo:

{...Path_To_.NET_Framework...}\InstallUtil C:\MyFolder\My.WindowsService.exe 

Usted puede agarrar el directorio actual con algo como esto en su archivo por lotes, si quieres una trayectoria generada dinámicamente:

set CURDIR=%CD% 
{...Path_To_.NET_Framework...}\InstallUtil %CURDIR%\My.WindowsService.exe 

Referencias:

1

Es demasiado viejo, pero fue útil para mí ... He hecho algunos cambios.

Mi servicio se inicia manualmente, así que en el lote incluí el comando de inicio y luego abro la consola para verificar el Servicio instalado.

@ECHO OFF 

REM The following directory is for .NET 4.0 
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319 
set PATH=%PATH%;%DOTNETFX2% 

echo Installing MyService Win Service... 
echo --------------------------------------------------- 
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil /i "%~dp0MyService.exe" 
net start MyService 
services.msc 
echo --------------------------------------------------- 
pause 
echo Done. 
Cuestiones relacionadas