我正在写一个Windows批处理脚本,将安装服务。 如果它已经运行,那么我正在停止并删除服务,然后再次安装服务。
我正面临一个奇特的行为。 当服务已经运行,并且当我正在运行下面的batch file时,该服务再次被安装,但它无法启动。 当我重新启动系统,并启动服务,它开始。
如何解决此启动服务问题,而无需重新启动计算机。 我还join了taskkill / f / PID来杀死进程libertyserver.exe。
这是我的代码:test.bat。 我从命令行运行test.bat。
test.bat的:
@echo off setlocal @echo off set JAVA_SERVICE_EXE=libertyserver.exe ... .... set SERVICE_DISPLAY_NAME="%LIBERTY_SERVICE_NAME%" set SERVICE_DESCRIPTION="%LIBERTY_SERVICE_NAME%" echo Stopping and Deleting existing services for /F "tokens=3 delims=: " %%H in ('sc query %SERVICE_NAME% ^| findstr "STATE" ') do ( if /I "%%H" EQU "RUNNING" ( sc stop %SERVICE_NAME% >nul 2>&1 timeout /t 30 /nobreak >nul 2>&1 ) sc delete %SERVICE_NAME% >nul 2>&1 timeout /t 30 /nobreak >nul 2>&1 ) for /f "tokens=2" %%a in ('tasklist^|find /i "libertyserver.exe"') do (taskkill.exe /f /pid %%a >nul 2>&1) echo Installing liberty profile %SERVICE_NAME% set INSTALL_SERVICE_COMMAND=%DAEMON_EXEC% //IS//%SERVICE_NAME% --Startup=manual --DisplayName=%SERVICE_DISPLAY_NAME% --Description=%SERVICE_DESCRIPTION% ++DependsOn=Tcpip --LogPath=%LOG_PATH% --StdOutput=auto --StdError=auto --StartMode=exe --StartPath=%SERVER_START_COMMAND_PATH% --StartImage=%SERVER_START_COMMAND% --StartParams=start#SIServer --StopMode=exe --StopPath=%SERVER_STOP_COMMAND_PATH% --StopImage=%SERVER_STOP_COMMAND% --StopParams=stop#SIServer %INSTALL_SERVICE_COMMAND% echo Installed liberty profile %SERVICE_NAME%