Запустите службу Windows с Java - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь запустить службу Windows в Java, используя этот

public static void main(String[] args) throws IOException {
        String startCom = "net start";
        String startProc = "\"C:/Program Files/Common Files/Apple/Mobile Device Support/bin/AppleMobileDeviceService.exe\"";
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(startCom + startProc);       
        System.out.println("Starting It");

}

Он работает без исключений, но не запускает службу.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 15 июля 2014

Попробуйте этот код:

public static void main(String[] args) throws IOException {

    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec("cmd start /c C:/Program Files/Common Files/Apple/Mobile Device Support/bin/AppleMobileDeviceService.exe");       
    System.out.println("Starting It");
0 голосов
/ 02 июня 2017

Похоже, ваш main () завершает работу, поэтому ваш сервис умрет. В этом случае вам необходимо установить сервис, используя

sc create "servicename" binpath="path", 

и затем начните с

sc start "servicename.

То есть служба .exe все еще должна быть установлена ​​как служба Windows.

0 голосов
/ 20 марта 2012
  1. Попробуйте выяснить, какое имя зарегистрированной службы, и используйте его вместо полного исполняемого файла.Например:

    net start "Adobe Acrobat Update Service"

    Чтобы узнать имя службы, введите net start в командном окне (которое печатает список всех зарегистрированных служб) или найдите службу.на панели управления службами нажмите кнопку Пуск , введите services.msc и нажмите Введите .Если имя службы зашифровано, вы можете щелкнуть правой кнопкой мыши службу на панели управления службами и щелкнуть Свойства , чтобы подтвердить исполняемый файл для этой службы.

  2. Возможно, вынеобходимо выполнить команду с повышенными привилегиями.Вы можете сделать это, отключив UAC (не рекомендуется), запустив javaw.exe с повышенными привилегиями при запуске вашей программы, или используя утилиту, например Elevate.exe , для выполнения любых привилегированных команд.

  3. Если у вас возникли проблемы с запуском Runtime.exec, попробуйте вместо этого использовать ProcessBuilder .

  4. Наконец,хорошая идея всегда читать содержимое STDOUT и STDERR (из Process.getOutputStream() и Process.getErrorStream()).Они могут содержать диагностическую информацию;но что еще более важно, если буферы заполняются, пока Process все еще выводит на них, Process зависнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...