5

Java アプリケーションで発生している問題を例として使用して質問を説明しますが、この質問は実際には Java とは何の関係もありません。

Windows 7 (64 ビット) を使用しており、GUI Java アプリケーションを実行するための [スタート] メニューのショートカットを作成したいと考えています。Java 8 の時点で、インストーラーは NTFS シンボリック リンクを、リリース固有の (つまり、頻繁に変更される) ディレクトリを指す既知の場所に配置します。

C:\>where javaw
C:\ProgramData\Oracle\Java\javapath\javaw.exe

C:\>dir C:\ProgramData\Oracle\Java\javapath\javaw.exe
 Volume in drive C is OS
 Volume Serial Number is D4DC-33AF

 Directory of C:\ProgramData\Oracle\Java\javapath

05/03/2015  15:40    <SYMLINK>      javaw.exe [C:\Program Files\Java\jre1.8.0_40\bin\javaw.exe]

ターゲット コマンド ラインが C:\ProgramData\Oracle\Java\javapath\javaw.exe java_app.jarであるショートカットを作成しましたが、実行すると Windows で javaw.exe パスが存在しないと表示されます。Windows の [ファイル名を指定して実行] ダイアログから同じコマンド ラインを正常に実行できます。ショートカットからではありません。誰でも解決策を提供できますか? (コマンドを実行するためのバッチ ファイルを作成しない方がよいと思います。無駄なコンソール ボックスが作成されるためです。)

(NB Java を使用せずに同じ問題を確認することもできます。(MKLINK コマンドを使用して) Notepad.exe へのシンボリック リンクを作成し、シンボリック リンクへのショートカットを作成してみてください。)

4

2 に答える 2

0

役に立たないバッチファイルを実行できます。その中でCALLを使用して、アプリケーションの起動直後にコンソール ウィンドウを閉じます。

また、現在Windowsマシンではありませんが、代わりにショートカットを作成して、そこにコマンドを渡すことはできますCMD.exeか? CALLコンソール ウィンドウが表示された場合に合わせて実行できます。

于 2015-03-06T19:03:11.403 に答える
0

この単純なランチャーが役立つ場合があります。javaw.exe へのショートカットで使用したのと同じコマンド ライン パラメータを使用して、1 つまたは複数のショートカットを作成できます。

#include <Windows.h>

void NoCRTMain(void)
{
    wchar_t * cmdline = GetCommandLineW();
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    GetStartupInfo(&si);

    if (!CreateProcess(L"C:\\ProgramData\\Oracle\\Java\\javapath\\javaw.exe", cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        MessageBox(NULL, L"Unable to launch Java.", L"runjava.exe", MB_OK);
    }

    ExitProcess(0);
}

Visual Studio でコンパイルするには、いくつかのプロジェクト設定を変更する必要があります。

  • C/C++ コード生成でバッファー セキュリティ チェックを [いいえ] にする
  • リンカー入力ですべてのデフォルト ライブラリを無視してはいにする
  • Linker Advanced の NoCRTMain へのエントリ ポイント
  • /DYNAMICBASE:NO および /FIXED:YESここで説明されているように

(または、メイン関数を NoCRTMain から WinMain に変更できますが、C ランタイムをインストールするか、静的にリンクする必要があります。)

もちろん、javaw.exe 以外のシンボリック リンクを実行するようにコードを簡単に変更することもできますargv[0]

于 2015-03-15T20:38:05.110 に答える