Executing command with Runtime.getRuntime.exec() fails



I wrote this test to show what's happening:

public class TestClass {

public static void main(String args[]) {
testMySQLService();
}

public static void testMySQLService() {
MySQLInterfaceManager mysqlInterface =
MySQLInterfaceManager.getInstance();
String mysqlServiceCommand =
"cmd /c \"C:\\Program Files\\MySQL\\MySQL " +
"Server 5.0\\bin\\mysqld-nt.exe --install MySQL1 " +
"--defaults-file=\"C:\\Program Files\\MySQL\\MySQL Server 5.0\\my-large.ini\"";
System.out.println(mysqlServiceCommand);
Process isRunningProcess = null;

try {
isRunningProcess =
Runtime.getRuntime().exec(mysqlServiceCommand);
readStandardError(isRunningProcess);
readStandardOut(isRunningProcess);
isRunningProcess.waitFor();
} catch(java.io.IOException ioe) {
ioe.printStackTrace();
return;
} catch(InterruptedException ie) {
//Assume processing has finished.
ie.printStackTrace();
return;
}
}

/**
* Reads the standard ouput stream of the provided Process one character at
* a time until the stream is closed or there is no more data. Stores the
* result in standardOut.
*/
private static void readStandardOut(final Process process) {
Thread inputStreamThread = new Thread() {
@Override
public void run() {
try {
InputStreamReader inputStreamReader =
new InputStreamReader(process.getInputStream());
int currentChar;
while ((currentChar = inputStreamReader.read()) != -1) {
System.out.print((char) currentChar);
}
inputStreamReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
};
inputStreamThread.start();
}

/**
* Reads the error stream of the provided Process one character at
* a time until the stream is closed or there is no more data. Stores the
* result in standardError.
*/
private static void readStandardError(final Process process) {
Thread errorStreamThread = new Thread() {
@Override
public void run() {
try {
InputStreamReader inputStreamReader =
new InputStreamReader(process.getErrorStream());
int currentChar;
while ((currentChar = inputStreamReader.read()) != -1) {
System.out.print((char) currentChar);
}
inputStreamReader.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
};
errorStreamThread.start();
}
}

The output of the above is:

cmd /c "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe --install MySQL1 --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my-large.ini"
'C:\Program' is not recognized as an internal or external command,
operable program or batch file


If I change mysqlServiceCommand to
"cmd /c \"C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin\\mysqld-nt.exe --install MySQL1";

It works as expected.

Does anyone have any idea what's going on?

Thanks

Lionel.
.



Relevant Pages

  • Re: Executing command with Runtime.getRuntime.exec() fails
    ... public static void main{ ... InputStreamReader inputStreamReader = ... int currentChar; ...
    (comp.lang.java.programmer)
  • Re: Why WebHttpRequest.GetResponse() stuck?
    ... public static void Main ... private static void testWeb ... HttpWebRequest request = WebRequest.Create; ... automatically makes sure you don't open too many connections. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Why WebHttpRequest.GetResponse() stuck?
    ... public static void Main ... private static void testWeb ... HttpWebRequest request = WebRequest.Create; ... using (HttpWebResponse response = (HttpWebResponse)request.GetResponse) ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: been workin hard
    ... private static void out{ ... public static void getTime{ ... int m = now.MINUTE; ...
    (comp.lang.java.help)
  • Re: could i pls get sum hlp w/this???
    ... public static void showClock() ... int m = now.getMinutes; ... class MyClock extends JPanel{ ...
    (comp.lang.java.help)