powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как перезапустить windows-службу из программы на java?
25 сообщений из 66, страница 1 из 3
Как перезапустить windows-службу из программы на java?
    #39576238
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Появилось необходимость из программы, написанной на джаве, перезапускать службу windows. Пока только удалось частично этого добиться следующим образом.

1. Написал такой бат-ник:

автор @echo off
chcp 1251
net stop ActiveMQ && net start ActiveMQ



2. Создал ярлык на этот бат-ник, установил у него в свойствах, чтобы он запускался от имени администратора
3. Написал в джаве такой метод:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public static Process runCommandForApplication(String command) throws Exception {
            if (command == null || command.length() < 1) {
                return null;
            }
            if (isWindows()) {
                command = command.replace('/', '\\');
            } else {
                command = command.replace('\\', '/');
            }
            Process proc = Runtime.getRuntime().exec(command);
            return proc;
        }

        public Process runCommand(Collection command) throws Exception {
            if (command == null || command.size() < 1) {
                return null;
            }
            String[] cmd = new String[command.size()];
            int iCmd = 0;
            for (Iterator<String> iter = command.iterator(); iter.hasNext(); ) {
                String commandPart = iter.next();
                ;
                if (isWindows()) {
                    commandPart = commandPart.replace('/', '\\');
                } else {
                    commandPart = commandPart.replace('\\', '/');
                }
                cmd[iCmd++] = commandPart;
            }
            Process proc = Runtime.getRuntime().exec(cmd);
            return proc;
        }



Вызываю этот метод так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    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);
    ...
    }



В итоге он у меня всё делает (пока в скрипте прописал только остановку службы), но перед этим запрашивает в отдельном окне имя администратора и его пароль. И пока не знаю, как сделать, чтобы ввод имени пользователя и его пароля происходил в автоматическом режиме. Пытался сделать это сразу в скрипте, но у меня ничего не получалось.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576262
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гошпади, сколько говнокода-то. Вы понимаете что половину вашего кода можно выкинуть и хуже от этого работать не станет?
А вы знаете что разделители пути не ограничиваются символами / и \? И что под виндой можно использовать оба?
А вопрос по-сути к Java отношения не имеет. Windows не даёт простому пользователю исполнять админские действия без подтверждения. Стандартный UAC. Можете своё приложение под админом сразу запустить и тогда вопросов не будет.
Возможно через .lnk выйдет, если вы там укажете всегда запускать под админом, а потом командой (start?) будете запускать именно lnk.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576284
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заметил, что выложил код не того метода, вот правильный:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
    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;
    }
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576291
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczГошпади, сколько говнокода-то. Вы понимаете что половину вашего кода можно выкинуть и хуже от этого работать не станет?
А вы знаете что разделители пути не ограничиваются символами / и \? И что под виндой можно использовать оба?
А вопрос по-сути к Java отношения не имеет. Windows не даёт простому пользователю исполнять админские действия без подтверждения. Стандартный UAC. Можете своё приложение под админом сразу запустить и тогда вопросов не будет.
Возможно через .lnk выйдет, если вы там укажете всегда запускать под админом, а потом командой (start?) будете запускать именно lnk.
1. Код не мой, мне его дали (взяли с какого-то американского проекта).
2. Во втором пункте я и писал, что использовал ярлыки и прописывал там запуск с админскими правами.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576313
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

агонь. вообще есть константа File.separator ))) как раз то что надо тсу ))

а вообще да. как то видел код навроде:

иф (Файл.сепаратор="/") зен ос.сетТайп("линукс") елс ос.сетТайп("виндовс")

тс, пиши батник, а да ты уже его написал )) и запускай его вот этой командой:

cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = command;
}
Process proc = Runtime.getRuntime().exec(cmd);

которую ты в принципе тоже уже написал.

в чем вопрос то? в админских правах? ну так ты можешь происать запуск батника с нужными правами. или самой джаве дать в системе админские права. но тут как бы не вопрос к джаве, а к админам твоей виндовс-машины.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576322
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaT,
Извините, вы пьяны???) И обратились не ко мне, и пишите так сумбурно. Ещё и как-то невнимательно читаете.))

Я думал о том, что может быть в джаве есть что-то, чтобы сразу запустить команду или программу с правами администратора (и без запроса пароля). Как я писал в своём первом посте, если вешать права на линк и его запускать, то запрашивается логин и пароль. Нужно, чтобы всё происходило в авто-режиме.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576327
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichЯ думал о том, что может быть в джаве есть что-то, чтобы сразу запустить команду или программу с правами администратора (и без запроса пароля). Как я писал в своём первом посте, если вешать права на линк и его запускать, то запрашивается логин и пароль. Нужно, чтобы всё происходило в авто-режиме.
В Java ничего такого нет. Фишка чисто виндовая и кросплатформенной Java на неё плевать. Но для виндовс ещё куча способов решить вопрос.
https://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac/11042773
https://stackoverflow.com/questions/4662574/how-do-i-elevate-my-uac-permissions-from-java
http://www.naturalborncoder.com/java/2012/08/02/starting-and-stopping-services-from-java/

Ищите инфу про UAC. На чистой Java тут ничего не закодить.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576328
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я то как раз нет а вы - хз. правами в системе заведует только одна программа. и эта программа называется "операционная система", а не та, которую вы пишете. дайте права своей жвм права админа, и никакие пароли у вас требоваться не будут. если не хотите - можете внутри скрипта прописать их.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576331
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichЗдравствуйте. Появилось необходимость из программы, написанной на джаве, перезапускать службу windows.Не может быть такой необходимости.
Примите это как данность и озвучьте, пожалуйста, проблему, которую вы решаете, а не способ, который вы придумали.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576338
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у них по ходу месадж брокер периодически зависает и они решили написать патч для программы для перезапуска очереди ))
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576341
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLich
Код: java
1.
        if (osName.startsWith("Windows 9") || osName.startsWith("Windows ME"))

У мелкомягких учитесь? У них в SDK тоже есть условия на "мотороллеры" из прошлого тысячелетия.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576342
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaT,
в точку. Как раза месседж брокер периодически гонит (к сожалению без внешних ошибок, служба продолжает работать нормально), и нужно его перезапускать, чтобы всё заработало.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576344
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
нет, древний код. Проект начало 2000-ых. Проект называется "Протеже". Какой-то там американский институт разработал. Насколько я знаю, у меня в команде это кто-то взял с сайта оракла по джаве (из примеров).
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576346
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichandreykaT,
в точку. Как раза месседж брокер периодически гонит (к сожалению без внешних ошибок, служба продолжает работать нормально), и нужно его перезапускать, чтобы всё заработало.
решение канеш рабочее, тут не поспоришь, но это, простите, как понос винной пробкой лечить. в принципе, на какое-то время сдержит.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576348
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichмесседж брокер периодически гонит (к сожалению без внешних ошибок, служба продолжает работать нормально), и нужно его перезапускать, чтобы всё заработало.1. Озадачьте сисадминов разбором проблем со службой. С вашей стороны - логи службы, с их - аудит системы. Ну или всё с их стороны, а с вашей - ссылки на доки;
2. В качестве временного костыля зарядите в планировщик ежечасный перезапуск службы - всяко лучше вашего велосипеда;
2.1. Если есть критерий зависания - сделайте из этого критерия триггер для вашего задания - будет перезапуск по условию, а не по времени;
3. Курите "sc sdset", но сразу предупреждаю, что у SDDL - марсианский синтаксис.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576352
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichНасколько я знаю, у меня в команде это кто-то взял с сайта оракла по джаве (из примеров).Есть у программистов плохая привычка решать сисадминские задачи прикладным кодом.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576355
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или так: есть у программистов привычка решать сисадминские задачи
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576358
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продублирую ответ из windows-подфорума: выкинуть враппер Тануки и взять Apache Procrun .
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576359
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ActiveMQ это же тоже Java. Можно написать обертку, которая будет слушать сигналы и закрывать Java процесс. Не исключено что такая уже есть. А Windows Service сам его перезапустит
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576365
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576392
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да способов мониторинга дофига , но лично я вангую проблемы service wrapper, который у Тануки сильно ограничен в бесплатной версии.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576544
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, Попробовал. На втором шаге выдаёт:
автор".\activemq" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576547
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, Критерием является ошибка (эксепшн) в программе.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576549
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, мониторинг мне не нужен, мне нужно управление.
...
Рейтинг: 0 / 0
Как перезапустить windows-службу из программы на java?
    #39576571
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichBlazkowicz, Попробовал. На втором шаге выдаёт:
Ну, вы бы это. Прежде чем что-то делать попробовали бы разобраться? Командная строка не важна. Важно что должен быть JMX интерфейс у брокера, у которого может оказаться команда перезапуска.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как перезапустить windows-службу из программы на java?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]