我有一个JAR文件,我想在系统启动时运行(OS = Windows)。为了实现在系统启动时运行的程序,我做了两件事:
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!”
现在这是奇怪的事情:
到底怎么样?安德......如何解决?
答案 0 :(得分:1)
我认为这是工作目录的一个问题 - 最终它在自动启动时完全不同。所以你应该通过正确的工作目录(不能判断是否可以用CreateProcess()
完成);或者为JAR文件提供固定的绝对路径。