これは、Java および外部プロセスの実際の問題のようです。
Windows 7 および Java 7 (32 ビット) では次のようになります。
ProcessBuilder b = new ProcessBuilder();
Map<String, String> env = b.environment();
for (String key : env.keySet())
System.out.println(key + ": " + env.get(key));
生産する
SystemRoot: C:\Windows
Path: xbox
つまり、実行中のプログラム環境とサブプロセス環境には、正確に「xbox」という値を持つパス変数が含まれている必要があります(たとえば、ナンセンスです。私の PC のどこにも xbox という名前のディレクトリはありません)。
プロトコルのみ:
Map<String, String> env = System.getenv();
for (String key : env.keySet())
System.out.println(key + ": " + env.get(key));
まったく同じ結果が得られます。
私が走るとき
b.command("convert.exe", "/?").inheritIO().start();
このプロセスビルダーと環境で
Konvertiert FAT-Volumes in NTFS.
CONVERT Volume /FS:NTFS [/V] [/CvtArea:Dateiname] [/NoSecurity] [/X]
Volume Bestimmt den Laufwerkbuchstaben (gefolgt von einem Doppelpunkt),
den Bereitstellungspunkt oder das Volume.
/FS:NTFS Bestimmt das in NTFS zu konvertierende Volume.
/V Legt fest, dass CONVERT im ausf�hrlichen Modus ausgef�hrt wird.
/CvtArea:Dateiname
Bestimmt die zusammenh�ngende Datei im Stammverzeichnis, die als
Platzhalter f�r NTFS-Systemdateien dienen soll.
/NoSecurity Bestimmt die Sicherheitseinstellungen f�r konvertierte Dateien
und Verzeichnisse, die f�r jeden Benutzer zug�nglich sind.
/X Erzwingt ggf. das Aufheben der Bereitstellung.
Alle ge�ffneten Handles auf das Volume sind in diesem Fall
ung�ltig.
これは(ドイツ語)の出力です
C:\Windows\System32\convert.exe
私が使用するときも同じことが起こります
Runtime.getRuntime().exec(new String[]{"convert.exe", "/?"});
また、ネイティブ環境を置き換えたため、私の環境は非常に小さいことに注意してください。つまり、プログラム全体がまさにこれら 2 つの環境変数を持っているということです。