我已经写在Windows程序中Ç(比方说,一个launcher
)和基于JavaFX的应用装在*jar
(A payload
)。我想要做的就是实现类似于如何JetBrains公司的IntelliJ IDEA的东西的行为。我的意思是,在任务管理器,我们可以看到一个过程“树”或“文件夹”是这样的:
然而,在我来说,我看到两个完全独立的进程:launcher.exe
(仅在[Details]
部分)和Java (TM) Platform SE binary
在[Processes]
部分(其实这是我的payload
)。
我使用的是CreateProcessW
功能产卵我的过程。在我的代码:
STARTUPINFOW info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
CreateProcessW(L"C:\\Path\\To\\java.exe", L" -jar C:\\Path\\To\\payload.jar",
NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo);
我怎样才能让我的Java应用程序在任务管理器看起来更“本土”?我使用jdk1.8.0_172
。感谢帮助。
要创建一个过程“树”或“文件夹”一样显示在您需要满足以下两个要求的任务管理器:
对于你的情况,虽然LAUNCHER.EXE和java.exe的(payload.jar)有父子关系,但不一样的程序/应用程序,使他们无法在任务过程中“树”或“文件夹”经理。
为了演示如何创建一个进程“树”,我创建了以下演示:一个Win32控制台应用程序。(启动TestGroupProcesses.exe,每次按下回车它会创建流程树子进程的时间。)
#include <windows.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
printf("Press Enter to create the child process\n");
while (getchar() != '\n');
// Start the child process.
if (!CreateProcess(NULL, // No module name (use command line)
GetCommandLine(), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
printf("CreateProcess failed (%d).\n", GetLastError());
}
// Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
该过程“树”通过上述演示这个样子的创建:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句