Здравствуйте. Появилось необходимость из программы, написанной на джаве, перезапускать службу windows. Пока только удалось частично этого добиться следующим образом.
- Написал такой бат-ник:
@echo off
chcp 1251
net stop ActiveMQ && net start ActiveMQ
- Создал ярлык на этот бат-ник, установил у него в свойствах, чтобы он запускался от имени администратора
- Написал в джаве такой метод:
public static Process runCommandForFile(String command) throws Exception {
if (command == null || command.trim().length() < 1) {
return null;
}
command = command.trim();
File file = new File(command);
command = file.getAbsolutePath();
String[] cmd = new String[3];
String osName = System.getProperty("os.name");
if (osName.startsWith("Windows 9") || osName.startsWith("Windows ME")) {
cmd[0] = "command.com";
cmd[1] = "/C";
cmd[2] = command;
} else if (osName.startsWith("Linux") || osName.startsWith("FreeBSD")) {
cmd[0] = "/bin/sh";
cmd[1] = "-c";
cmd[2] = command;
File shellFile = new File("mpo_shell.sh");
if (shellFile.exists() && shellFile.canRead()) {
cmd[1] = "mpo_shell.sh";
}
} else {
// default + Windows
cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = command;
}
Process proc = Runtime.getRuntime().exec(cmd);
return proc;
}
Вызываю этот метод так:
public class View extends JFrame {
private static final int WINDOW_WIDTH = 600, WINDOW_HEIGHT = 500;
private static final String FILE_BAT = "F:\\TEMP\\activemq-restart.bat.lnk";
...
//в теле слушателя нажатия на кнопку
Utils.runCommandForFile(FILE_BAT);
...
}
В итоге он у меня всё делает (пока в скрипте прописал только остановку службы), но перед этим запрашивает в отдельном окне имя администратора и его пароль. И пока не знаю, как сделать, чтобы ввод имени пользователя и его пароля происходил в автоматическом режиме. Пытался сделать это сразу в скрипте, но у меня ничего не получалось.