我们有一个 Java 项目。它有 5 个 CLI 命令指向 Project.jar
他们去像
示例服务器:这是一个在 CMD 中持续运行且不会关闭的服务器进程。
客户端代理示例:这是一个客户端进程,它在第二个 CMD 中继续运行并且不会关闭。在“示例服务器”完全启动之前,这无法启动。
3, 4, 5:这些是以下命令,例如“示例登录,...示例写入”等,可以在单个 cmd 中运行。在“示例服务器”和“示例客户端”完全启动之前,这些无法启动。
现在我正在尝试通过 C++ 可执行文件运行所有这些 jar
我不能使用 shell 执行,因为如果我为每个 java -jar 命令提供 shellexecute,它们都会同时运行(我不想要)。所以我使用 ShellExecuteEx 是这样的:
SHELLEXECUTEINFO A= { 0 };
A.cbSize = sizeof(SHELLEXECUTEINFO);
A.fMask = SEE_MASK_NOCLOSEPROCESS;
A.hwnd = NULL;
A.lpVerb = NULL;
A.lpFile = L"\\java.exe";
A.lpParameters = L"-jar";
A.lpDirectory = NULL;
A.nShow = SW_SHOW;
A.hInstApp = NULL;
ShellExecuteEx(&A);
WaitForSingleObject(A.hProcess, 20000);
SHELLEXECUTEINFO B= { 0 };
B.cbSize = sizeof(SHELLEXECUTEINFO);
B.fMask = SEE_MASK_NOCLOSEPROCESS;
B.hwnd = NULL;
B.lpVerb = NULL;
B.lpFile = L"\\java.exe";
B.lpParameters = L"-jar";
B.lpDirectory = NULL;
B.nShow = SW_SHOW;
B.hInstApp = NULL;
ShellExecuteEx(&B);
WaitForSingleObject(B.hProcess, 20000);
SHELLEXECUTEINFO C= { 0 };
C.cbSize = sizeof(SHELLEXECUTEINFO);
C.fMask = SEE_MASK_NOCLOSEPROCESS;
C.hwnd = NULL;
C.lpVerb = NULL;
C.lpFile = L"\\java.exe";
C.lpParameters = L"-jar";
C.lpDirectory = NULL;
C.nShow = SW_SHOW;
C.hInstApp = NULL;
ShellExecuteEx(&A);
WaitForSingleObject(C.hProcess, 10000);
现在我知道硬编码时间不是一个好习惯。我可以做一些让 C 在 A 和 B 启动后执行的事情吗?