这似乎是 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”(例如废话,我的电脑上的任何地方都没有名为 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", "/?"});
请注意,我的环境是如此之小,因为我替换了原生环境。这意味着整个程序恰好具有这两个环境变量。