Собственно вызов не сложный.
public static void runBat() {
try {
Runtime.getRuntime().exec("cmd /c start c:/ww.bat ");
} catch (IOException e) {
System.out.println("IOException: " + e.getMessage() );
}
}
Следует помнить о правах процесса, который вызывает java машину. Например, если данный вызов сделать из сервера приложений, который запущен как сервис операционной системы, который, в свою очередь, не имеет по определению окон, то невозможность запуска из такого батника notepad.exe выглядит нормально.
Еще один пример, включающий перенаправление вывода информации в журнал
/**
* Выполнить команду операционной системы
* @param szCommand - сама команда
* @param szEncoding - кодировка, в которой выводится сообщение в консоль ОС
* @return истина, если не упали в процессе выполнения.
*/
private boolean runBat(String szCommand, String szEncoding) {
boolean bResult = true;
BufferedReader in = null;
BufferedReader err = null;
try {
Process p = Runtime.getRuntime().exec( szCommand );
in = new BufferedReader(new InputStreamReader(p.getInputStream(), szEncoding) );
err = new BufferedReader(new InputStreamReader(p.getErrorStream(), szEncoding) );
String szLine = null;
StringBuilder theBuffer = new StringBuilder();
theBuffer.append("\nExecute runtime: ");
theBuffer.append(szCommand);
theBuffer.append( "\nOutput message is: " );
while((szLine = in.readLine()) != null) theBuffer.append( szLine + " " );
theBuffer.append( "\nError message is: " );
while((szLine = err.readLine()) != null) theBuffer.append( szLine + " " );
log().info( theBuffer.toString() );
}
catch (Exception e) {
bResult = false;
log().error("Can't execute " + szCommand + " Exception: " + e.getMessage() );
}
finally{
try{if(in != null) in.close();}catch(Exception Ex){;}
try{if(err != null) err.close();}catch(Exception Ex){;}
}
return bResult;
}
Комментариев нет:
Отправить комментарий