2

一種の「ランチャー」アプリケーションとして作成したWindowsプログラムを介してJavaプログラムを実行しようとしています。通常、このJavaプログラムを実行するには、バッチファイルを実行するか、cmdプロンプトウィンドウ(Windowsキー+ R、「cmd」と入力)に直接移動して、と入力しjava -Xmx4096M -Dsun.java2d.noddraw=true [...]ます。重要なのは、このウィンドウではJavaが認識されているように見えるということです。

一方、アプリケーションからコマンドプロンプトを起動すると、Javaは「内部または外部コマンド、操作可能なプログラム、またはバッチファイルとして認識されなくなります」。

TCHAR szPath[MAX_PATH];
if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_SYSTEM, NULL, 0, szPath))) {
    PathAppend(szPath, TEXT("cmd.exe"));
    ShellExecuteW( GetSafeHwnd(),L"open", szPath, NULL, NULL, 1 );
}

なんでそうなの?

4

1 に答える 1

3

この問題を抱えている将来の訪問者のために、これが私の実用的な解決策です:

PVOID OldValue = NULL;
if( Wow64DisableWow64FsRedirection(&OldValue) )  {
        TCHAR szPath[MAX_PATH];
    if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_SYSTEM, NULL, 0, szPath))) {
        PathAppend(szPath, TEXT("cmd.exe"));
        ShellExecuteW( GetSafeHwnd(), L"open", szPath, NULL, NULL, 1 );
    }
    if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) ) {
        AfxMessageBox(L"A script that should never fail has failed.");
        return;
    }
}

私を正しい方向に導いてくれたHansPassantに感謝します。

于 2013-03-02T00:26:28.447 に答える