我有一个JAR文件,我想在系统启动(OS = Windows)上运行。 为了实现程序在系统启动时运行,我做了两件事:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
以as值HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
可执行文件的path创build一个名为MyApp
的registry项(名称实际上并不重要)。 可执行文件的代码如下所示:
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文件之前输出一个消息框,指出“你好!
现在这是奇怪的事情:
地球究竟如何? Annnd …如何解决它?
我想这是工作目录的一个问题 – 最终在自动启动时是完全不同的。 所以你应该通过正确的工作目录(不能告诉这是否可以用CreateProcess()
); 或者给你的JAR文件提供一个固定的绝对路径。