Остановить метод, не вызываемый при завершении службы Windows
Я преобразовал Java-приложение в Windows Service, используя procrun. Когда я останавливаю службу с помощью программы Windows Services, она зависает и не отвечает. Когда я запускаю его в режиме отладки, а затем, когда я завершаю его с помощью ctrl + c, я не вижу вызываемого метода stop. Я дал печатное заявление, которое не печатается. Ниже мой код. Пожалуйста посоветуй. В журналах Windows Even нет ничего, связанного с этим сервисом.
public static void main(String[] args) {
if ("start".equals(args[0])) {
start(args);
} else if ("stop".equals(args[0])) {
stop(args);
}
}
public static void start(String[] args) {
KubeSdkMain sdkMain = new KubeSdkMain();
sdkMain.startSDK();
}
public static void stop(String[] args) {
System.out.println("stop");
stop = true;
}
Ниже приведено содержимое файла bat, который я запускаю для установки сервиса.
cd "G:\Projects"
set PR_PATH="G:\Projects"
SET PR_SERVICE_NAME=TestService
SET PR_JAR=KKSDK.jar
SET START_CLASS=com.example.test
SET START_METHOD=start
SET STOP_CLASS=com.example.test
SET STOP_METHOD=stop
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%
Пауза
1 ответ
Я думаю, что вы должны использовать крюк отключения, чтобы при нажатии ctrl+c
отключение крюка вызывается.
Эта ссылка может помочь вам
ShutDownHook