1

システムの起動時に実行したい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 ...それを解決する方法は?

4

1 に答える 1

1

作業ディレクトリに問題があると思います。最終的には、自動起動すると完全に異なります。したがって、適切な作業ディレクトリを渡す必要があります (これを で実行できるかどうかはわかりませんCreateProcess())。または、JAR ファイルへの固定絶対パスを指定します。

于 2013-03-06T10:58:34.537 に答える