我有一个 JAR 文件,我想在系统启动时运行(OS=Windows)。为了实现程序在系统启动时运行,我做了两件事:
- 我在 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...如何解决?