Executing command with Runtime.getRuntime.exec() fails
- From: Lionel <lionelv_@xxxxxxxxx>
- Date: Thu, 29 Nov 2007 21:56:14 +1000
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.
.
- Follow-Ups:
- Re: Executing command with Runtime.getRuntime.exec() fails
- From: Roedy Green
- Re: Executing command with Runtime.getRuntime.exec() fails
- From: Gordon Beaton
- Re: Executing command with Runtime.getRuntime.exec() fails
- From: Patrick McNicol
- Re: Executing command with Runtime.getRuntime.exec() fails
- Prev by Date: Re: Creating directories with File
- Next by Date: Re: JNI UnsatisfiedLinkError
- Previous by thread: ValueFirst "FAME" Awards for programmers
- Next by thread: Re: Executing command with Runtime.getRuntime.exec() fails
- Index(es):
Relevant Pages
|