В Java ждет службы Windows, чтобы начать / остановить?

1

Я ищу способ проверить статус службы Windows в цикле до тех пор, пока он не будет полностью наклонен или запущен.

Я использовал код Malik Ehtasham Здесь, чтобы получить статус сервиса. Но мне нужно нажать кнопку, чтобы получить статус. Я бы хотел, чтобы он просто продолжал проверять статус, говоря... подождите, потом скажите, наклонился или начал.

Это то, что я должен запустить:

String[] StartSpooler = {"cmd.exe", "/c", "sc", "start", "spooler"};
    try {
        Process process = new ProcessBuilder(StartSpooler).start();
        InputStream inputStream = process.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String StartSpoolerLine;
        while ((StartSpoolerLine= bufferedReader.readLine()) != null) {
            System.out.println(StartSpoolerLine);
        }
    } catch (Exception ex) {
        System.out.println("Exception : " + ex);
    }

Это то, что я должен продолжать проверять статус службы, но не работает

    try {
        Process p = Runtime.getRuntime().exec("sc query spooler");

        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = reader.readLine();
        while (line != null) {
            if (line.trim().startsWith("STATE")) {
                while (!"4".equals(line.trim().substring(line.trim().indexOf(":") + 1, line.trim().indexOf(":") + 4).trim())) {
                   System.out.println("Starting....");    
                 }
System.out.println("Service is started and running");
            }
            line = reader.readLine();
        }

    } catch (IOException e1) {
    } 

Пожалуйста, помогите, спасибо!

Теги:
service

2 ответа

1
Лучший ответ

Я использовал ваш код, и это работает на моем оконном компьютере. Повторите попытку.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class WindowServiceTest {

    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec("sc query spooler");

            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = reader.readLine();
            while (line != null) {
                if (line.trim().startsWith("STATE")) {
                    while (!"4".equals(line.trim().substring(line.trim().indexOf(":") + 1, line.trim().indexOf(":") + 4).trim())) {
                       System.out.println("Starting....");    
                     }
                      System.out.println("... Service is started and running");
                }
                line = reader.readLine();
                System.out.println("SERVICE DETAILS --> "+ line);
            }

        } catch (IOException e1) {
        } 

    }

}


OUTPUT
===========
SERVICE DETAILS --> SERVICE_NAME: spooler
SERVICE DETAILS -->         TYPE               : 110  WIN32_OWN_PROCESS (interactive)
SERVICE DETAILS -->         STATE              : 4  RUNNING 
... Service is started and running
SERVICE DETAILS -->                                 (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
SERVICE DETAILS -->         WIN32_EXIT_CODE    : 0  (0x0)
SERVICE DETAILS -->         SERVICE_EXIT_CODE  : 0  (0x0)
SERVICE DETAILS -->         CHECKPOINT         : 0x0
SERVICE DETAILS -->         WAIT_HINT          : 0x0
SERVICE DETAILS --> null
  • 0
    Я думаю, что я понял часть моей проблемы. Когда я запускаю сервис, то проверяю статус, который он зацикливает без остановки. Мне пришлось добавить сон между запуском и проверкой состояния try { Thread.sleep(5000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); }
2

Это отлично работает для меня.

private static String[] scriptStart = { "net", "start", SERVICE_NAME};
  private static String[] scriptStop = {"net", "stop", SERVICE_NAME};


Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(scriptStart);//or scriptStop
    process.waitFor();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню