Traps: Runtime.exec(cmdStr)

public class Demo {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        String szCmd = "notepad.exe 'd:/fdasf/er   a d.exe'";
        System.out.println(szCmd);
        Process pro = Runtime.getRuntime().exec(szCmd);
    }
}

With tool "Process monitor", I can find actually it execute : notepad.exe 'd:/fdasf/er a d.exe'


Use above, it works:
String[] szCmd = {"notepad.exe","'d:/fdasf/er   a d.exe'"};
System.out.println(szCmd);
Process pro = Runtime.getRuntime().exec(szCmd);



The traps in Runtime.exec() are primarily due to the C libraries it has to invoke to start the new process. The feature of coalescing of multiple spaces into a single space is a mixture of Java and C and the mistake made by the Runtime.exec() authors was to include the single string version of exec() in the first place.
https://forums.oracle.com/forums/thread.jspa?messageID=9974874#9974874
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

你可能感兴趣的:(Runtime)