@MaxLich
java developer

Как перезапустить windows-службу из программы на java?

Здравствуйте. Появилось необходимость из программы, написанной на джаве, перезапускать службу windows. Пока только удалось частично этого добиться следующим образом.
  1. Написал такой бат-ник:
    @echo off
    chcp 1251
    net stop ActiveMQ && net start ActiveMQ


  2. Создал ярлык на этот бат-ник, установил у него в свойствах, чтобы он запускался от имени администратора
  3. Написал в джаве такой метод:
    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);
    ...
    }




В итоге он у меня всё делает (пока в скрипте прописал только остановку службы), но перед этим запрашивает в отдельном окне имя администратора и его пароль. И пока не знаю, как сделать, чтобы ввод имени пользователя и его пароля происходил в автоматическом режиме. Пытался сделать это сразу в скрипте, но у меня ничего не получалось.
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы