2017-01-10 6 views
0

私はC++アプリケーションを使って別のプロセスを起動しています。このプロセスはjavaであるため、javaw.exeを実行する必要があります。しかし私は、互換性のあるJavaバージョンがインストールされているWindowsシステムとWindows検索パスでアプリケーションを動作させたい。C++ Windows検索パス経由で実行可能ファイルを見つける

CreateProcessでプロセスを起動しますが、最初の引数には実行可能ファイルの完全パスが必要ですが、Windows検索パスは検索されません。

CPPコード内のWindows検索パスからjavaw.exeの完全なパスを探して、CreateProcessに渡して、TerminateProcessを使用して適切に開始し、後で実行できるようにしたいと考えています。外部プログラムを停止します。

Windows検索パス経由でjavaw.exeのフルパスを見つける方法を教えてください。

編集:この質問は異なるです。私の特定の質問は、Windowsの検索パス(btwにはローカルディレクトリ、PATH環境変数、およびいくつかの標準的な場所が含まれています)を使用するためです。私はCPPを使って具体的にこれをしたいと思います。私は特に、ユーザーが複数のjavaw.exeを持っている可能性があり、私が実装したカスタム検索方法ではなく、Windowsの標準検索パスを使って予測可能なものを使いたいので、Windows検索パスシステムを使いたいと思う。

+1

可能な複製(http://stackoverflow.com/questions/17602113/how-to-find- [javaw.exeのがインストールされている場所を見つける方法?]:ここで

は、いくつかのサンプルコードですwhere-javaw-exe-is-installed) –

+0

Windows検索パスでPATHを意味する場合は、パスを取得してJavaの場所を抽出できるはずです。時にはJAVA_HOMEセットもありますが、これも使用できます。 – Rakete1111

+0

これは、私がC++経由でこれをWindows検索パス経由で実行しようとしているので重複していません。その問題は言語に依存せず、可能な限りの方法でそれを見つけたかったのです。理想的な解決策は、適切なexeパスを返すcpp "where"または "which"関数です。 – Jim

答えて

1

SearchPathと呼ばれるWin32 API関数があります(レジストリ設定に応じて)、まずローカルディレクトリを検索してから、Windows PATH変数を検索します。別のディレクトリを追加して検索することもできます。詳細はthe documentation on MSDNにあります。

LPSTR lpFilePart; 
char filename[MAX_PATH]; 

if(!SearchPath(NULL, "javaw", ".exe", MAX_PATH, filename, &lpFilePart)) 
{ 
    //error handling here 
} 

std::cout<<"The path is " << filename<<std::endl; 
関連する問題