私はで書かれたWindowsプログラム持っているC(LETの言う、launcher
)とに詰めたJavaFXベースのアプリケーション*jar
(payload
)。私は何をしたいかジェットブレーンズのあるIntelliJ IDEAの振る舞いに似た何かを達成することです。私は、タスクマネージャでは、我々はこのようなプロセスの木」や「フォルダ」を見ることができ、意味します:
しかし、私の場合、私は2つの完全に独立したプロセスを参照してください。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
。手伝ってくれてありがとう。
タスクマネージャに表示されるように、プロセスの木」や「フォルダ」を作成するには、次の2つの要件を満たす必要が:
- ツリー内の処理(アプリでグループ化された)同じプログラム/アプリケーションを実行しています。
- これらのプロセス間の親子関係があります。起動他のプロセスが、それらの子プロセスです親プロセスがあります。(あなたが使用することができ、親子関係を確認するにはプロセスエクスプローラのツールを。)
launcher.exeとのjava.exe(payload.jar)が親子関係を持っていますが、同じプログラム/アプリケーションではありませんが、あなたのケースのために、彼らは、タスク内のプロセスのツリー」または「フォルダ」にすることはできませんので、マネージャー。
「を参照してくださいプロセスとスレッドについて」「子プロセス」
Win32コンソールアプリケーション:私は次のデモを作成するプロセスのツリー」を作成する方法を示します。(TestGroupProcesses.exe、あなたはそれがプロセスツリー内の子プロセスを作成しますEnterキーを押すたびに起動します。)
#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);
}
このようなデモを見上記により作成されたプロセスの木 ':