使用批处理文件安装Windows服务?

11

我在一个批处理文件中有以下代码:

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

问题是,即使批处理文件与My.WindowsService.exe位于同一文件夹中,它仍然会尝试在C:\Windows\System32中查找它.....

我该如何解决这个问题?


只是猜测,那么.\My.WindowsService.exe怎么样? - akluth
4个回答

14

解决方法如下:

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

"%dp0" - 当在Windows批处理文件中引用%dp0(零)变量时,它将扩展为该批处理文件的驱动器号和路径。变量%0-%9是批处理文件的命令行参数。 %1-%9是批处理文件名后的命令行参数。 %0指的是批处理文件本身。查看此答案 - Mike Bovenlander
1
当您已经将InstallUtil的路径硬编码为C:\Windows\Microsoft.NET\Framework\v4.0.30319\时,为什么还要费心设置set DOTNETFX2set PATH呢? - nothingisnecessary

6
根据我找到的几篇文章,将绝对路径传递给您的服务是您想要的。例如:
{...Path_To_.NET_Framework...}\InstallUtil C:\MyFolder\My.WindowsService.exe

如果您想要一个动态生成的路径,可以在批处理文件中使用以下代码来获取当前目录:

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

参考资料:


2

虽然它有些过时,但对我很有用...我进行了一些更改。

我的服务需要手动启动,所以在批处理中我包含了启动命令,然后打开控制台检查已安装的服务。

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

1

安装和卸载示例


@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 Instalar Servicio......
echo ---------------------------------------------------
InstallUtil /i "%~dp0WindowsService1.exe"
echo ---------------------------------------------------
pause
echo Done.



@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 Desintalar Servicio...
echo ---------------------------------------------------
InstallUtil /u "%~dp0WindowsService1.exe"
echo ---------------------------------------------------
pause
echo Done.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接