Java JAR文件赢得';当它';它是由C++;Windows启动时的应用程序

Java JAR文件赢得';当它';它是由C++;Windows启动时的应用程序,java,c++,windows,Java,C++,Windows,我有一个JAR文件,我想在系统启动时运行(OS=Windows)。为了实现在系统启动时运行的程序,我做了两件事: 我用C++编写了一个可执行文件,它将触发JAR文件的启动。 在HKEY\U LOCAL\U MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中创建了一个名为MyApp(名称实际上并不重要)的注册表项,其值为可执行文件的路径 可执行文件的代码如下所示: BOOL WinMain(HINSTANCE hInstance, HI

我有一个JAR文件,我想在系统启动时运行(OS=Windows)。为了实现在系统启动时运行的程序,我做了两件事:

    我用C++编写了一个可执行文件,它将触发JAR文件的启动。
  • HKEY\U LOCAL\U MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
    中创建了一个名为
    MyApp
    (名称实际上并不重要)的注册表项,其值为可执行文件的路径
可执行文件的代码如下所示:

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;
}
BOOL-WinMain(HINSTANCE-HINSTANCE、HINSTANCE-hppreinstance、LPSTR命令行、int-nCmdShow){
显示窗口(GetConsoleWindow(),SW_HIDE);
//首先显示一个文本为“Hello!”的框

stringstream msg;msg我想这是工作目录的问题,最终在自动启动时它是完全不同的。因此,您应该传递正确的工作目录(无法判断是否可以使用
CreateProcess()
);或为JAR文件提供固定的绝对路径。

我想这是工作目录的问题,最终自动启动时会完全不同。因此,您应该传递正确的工作目录(无法判断是否可以使用
CreateProcess()
);或为JAR文件提供固定的绝对路径。

尚未测试,但我猜此答案描述了问题。让我们测试它…:-)尚未测试,但我猜此答案描述了问题。让我们测试它…:-)