システムの起動時に実行したいJARファイルがあります(OS = Windows)。システム起動時に実行されるプログラムを実現するために、私は2つのことを行いました。
- 私はC++で実行可能ファイルを作成しました。これにより、JARファイルが開始されます。
- 実行可能ファイルへのパスを値として
MyApp
(名前は実際には関係ありません)という名前のレジストリキーを作成しました。HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
実行可能ファイルのコードは次のとおりです。
BOOL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR commandLine, int nCmdShow) {
ShowWindow(GetConsoleWindow(), SW_HIDE);
// First display a box with text 'Hello!'
stringstream msg; msg << "Hello!";
MessageBox(NULL, msg.str().c_str(), "", MB_OK);
// getJavaHome is a function
stringstream javadir; javadir << getJavaHome() << "\\bin\\java.exe";
stringstream params; params << " -jar jarfile.jar";
STARTUPINFO info = { sizeof (info) };
PROCESS_INFORMATION processInfo;
char* path = stringToCharArray(javadir.str().c_str());
char* args = stringToCharArray(params.str().c_str());
if (CreateProcess(path, args, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &info, &processInfo)) {
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
return 0;
}
ご覧のとおり、このプログラムは、JARファイルを開始する前に、「Hello!」というメッセージボックスを出力することに注意してください。
今ここに奇妙なことがあります:
- 実行可能ファイルをダブルクリックして実行すると、メッセージボックスが表示され、JARファイルが起動します。
- ただし、システムが起動し、アプリケーションが起動するようにトリガーされると、Helloが表示されますが、JARファイルは起動しません。
一体どうやって来るの?Annnd ...それを解決する方法は?