首页 > 解决方案 > jar 服务器停止触发 shutdown.exe

问题描述

我想编写一个 c++ 代码来启动一个 java 服务器(文件名为 server.jar),当服务器停止时我想运行 shutdown.exe 我查找了如何启动 server.jar 但我找不到关于如何检测它停止的任何可理解的

我想要实现的是:

  1. 运行脚本 --> 服务器启动并运行一段时间
  2. 服务器收到来自客户端的停止命令
  3. 服务器停止 --> 脚本运行 shutdown.exe

标签: c++windowsjarshutdown

解决方案


我使代码工作,所以这里是:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <windows.h>
#include <stdlib.h>

int main() {
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
wchar_t cmdline[] = L" -jar server.jar";
//wchar_t path[] = L"C:\\Program Files\\Java\\jre*\\bin\\javaw.exe";

char* pathc= std::getenv("_JAVAW");
wchar_t* path;
path = (wchar_t*)malloc(sizeof(wchar_t) * strlen(pathc));
mbstowcs(path, pathc, strlen(pathc)+1);

if (CreateProcess( path, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
    std::cout << "running" << std::endl;
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    wchar_t cmdline[] = L" -s -t 60";
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);
    if (CreateProcess(L"C:\\WINDOWS\\system32\\shutdown.exe", cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {

    }
    WaitForSingleObject(processInfo.hProcess, INFINITE);
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);
}
return 0;

}


推荐阅读