3

マウント コマンドを Java プロセスとして実行しようとしています。以下は、コマンドの作成方法です。

List<String> command = new ArrayList<String>();

command.add("cmd.exe");
command.add("/c");
command.add("mount.exe");
command.add("-u:" + username);
command.add("-p:" + password); 
command.add(IP + ":" + mountPoint);
command.add(driveLetter + ":");

ProcessBuilder processBuilder = new ProcessBuilder(command);

processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();

これを実行すると、次のエラーが表示されます。

'mount.exe' is not recognized as an internal or external command,
operable program or batch file.

mount.exe をインストールし、パスを環境変数に設定しました。

C:\>where mount.exe
C:\Windows\System32\mount.exe

C:\>path
PATH=C:\Windows\System32;C:\Windows; ... [removed the remaining entries]

コマンド プロンプトでコマンドを手動で実行すると、正常に動作します。

C:\>cmd.exe /c mount.exe -u:<user> -p:<password> <IP>:<mount point> Z:

誰かが私に欠けているものを指摘できれば幸いです。

ありがとう。

4

2 に答える 2

1

TeamCity ビルド エージェント (サービスとして動作し、システム ユーザーとして実行) からWindows Server 2008 x64でマウントアンマウントを実行する際にも同じ問題があります。スクリプトは、.cmd ファイルをクリックしてユーザー セッションから実行すると正常に動作しますが、TeamCity ビルド エージェントがスクリプトを実行しようとすると、まったく同じエラーが表示されます。

「C:\Windows\System32\umount.exe」は内部または外部コマンドとして認識されません

今、私は解決策を持っています。

cmdはC:\Windows\System32\でマウントを検索するため、C:\Windows\System32\cmd.exe で実行するとマウントが機能します。

c:\Windows\SysWOW64\cmd.exe で実行すると、マウントが失敗します。これは、このコマンドが c:\Windows\SysWOW64\ でマウントを検索するためです。

于 2013-04-04T08:08:43.773 に答える
0

command.add() 呼び出しで mount.exe のフル パスを記述するとどうなるかを確認してください。これは私の勘違いかもしれませんが、自分でコマンド プロンプトから cmd.exe を呼び出すと、呼び出されたプログラムに環境変数が自動的に渡されると思います。これは、ProcessBuilder を使用して正しく行われていない可能性があり、完全なパスが機能する場合は、その兆候である可能性があります。

于 2013-03-07T16:25:52.807 に答える