3

いくつかの引数を使用して exe ファイルを呼び出し、出力を処理する Java アプリケーションを作成しようとしています。いくつかのバリエーションと ProcessBuilder クラスで Runtime.getRuntime().exec() を試しましたが、何も機能しませんでした。パス環境変数が正しいにもかかわらず、ファイルが見つからないと言われました。

アイデアから、私は次のことを試しました:

File f = new File("C:\\Windows\\system32\\query.exe");
System.out.println(f.exists());

それは言っfalseた。

パスに何か問題があるのではないかと思い(バックスラッシュ?大文字?)、次のことを試しました:

FileChooser chooser = new JFileChooser("C:\\Windows\\System32");
chooser.setFileHidingEnabled(false);
chooser.showOpenDialog(null);       
File f = chooser.getSelectedFile();
System.out.println(f.exists());

ファイルはFileChooser に表示されません(FileChooser に手動で入力すると、結果はfalse再び表示されます)。しかし、私は再確認しました、それそこにあります。現在、エクスプローラー ウィンドウが開いています。cmd.exe 内から起動できます。where query印刷しC:\\Windows\\System32\\query.exeます。

アクセス権に関係している可能性があると思いましたが、クエリ ファイルのセキュリティ設定を表示されている他の設定と比較しました。それらは同じです。管理者として Eclipse を実行しましたが、結果は同じでした。ここで何が起こっているのですか?

4

1 に答える 1

2

問題は、JVM が 32 ビット プロセスとして実行されており、OS が 64 ビットであることです。つまり、ファイル システム リダイレクターが発生しています。

ほとんどの場合、32 ビット アプリケーションが にアクセスしようとする%windir%\System32と、アクセスは にリダイレクトされ%windir%\SysWOW64ます。

にチェックを入れた場合C:\\Windows\\SysWOW64query.exe存在しません。あなたが目撃している動作を説明してください。

于 2013-08-01T09:31:45.853 に答える