Windows 7 を実行しており、Java で次のコマンドを使用して実行しようとしている exe ファイルがあります。
File dir = new File("C:\\PATH\\TO\\DIR");
String[] cmdArray = {"file.exe"};
if(dir.exists()){
for(String s : dir.list()){
if(s.equals(cmdArray[0]))
System.out.println("File exists!");
}
}
Runtime.getRuntime().exec(cmdArray,null,dir);
ただし、exec(...) コマンドを実行すると、次のエラーが表示されます。
Cannot run program "file.exe" (in directory "C:\PATH\TO\DIR"): CreateProcess error=2, The system cannot find the file specified
上記のコードは、「ファイルが存在します!」と出力します。そのため、ファイルはそこにあり、Java はそれがそこにあることを認識しています。これがどのように可能かわかりません。
また、Runtime.getRuntime().exex(...) を使用する必要があります。この呼び出しは、実際には変更しないと思われる別のメソッド内にあるため、代替ソリューションは機能しません。前もって感謝します!
編集: 管理者権限なしでコマンド ウィンドウでファイルを実行したところ、次のメッセージが表示されました。
Error in Opening Configuration File in Read Mode
したがって、許可の問題があると思います。実行できるようにするには、どのようにアクセス許可を変更すればよいですか?
EDIT2:
cmdArray をこれに変更してみました:
String[] cmdArray = {"C:\\PATH\\TO\\DIR\\file.exe"};
そしてそれは魅力のように機能しました。1つ質問ですが。なぜこれが機能したのに、他の方法では機能しなかったのですか? 私は、Runtime.exec() が cmd wibndow のように高レベルで実行されると想定しました。
pushd dir
cmdArray[0] cmdArray[1] cmdArray[2] ... cmdArray[length - 1]
popd dir
これは間違った仮定ですか?