L
Lionel
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.
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.