1

大家好,我创建了一个 java 文件,在该 java 中,我编写了一个用于启动、停止和重新启动 Windows 服务的代码,因为我想创建一个日志文件并将窗口服务的输出写入控制台,如果有人知道,请给出建议我用代码停止服务

      public static void stopService(String serviceName) throws IOException,
        InterruptedException {

    String executeCmd = "cmd /c net stop \"" + serviceName + "\"";
    Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
    int processComplete = runtimeProcess.waitFor();

    System.out.println("processComplete: " + processComplete);

    if (processComplete == 1) {// if values equal 1 process failed
        System.out.println("Service failed");
    }

    else if (processComplete == 0) {
        System.out.println("Service Success");
    }

}
4

3 回答 3

1

实现这一点的最佳方法可能是 Log4J。如果您在它看起来很霸道之前没有使用过它,但是如果您需要的话,有很多很好的教程可供您挑选。将 LogFactory 放入您的类定义中,然后弹出 log.info.println("service starting") 之类的行。另一个需要关注的关键字是 FileAppender。(抱歉没有更好的参考资料,用我的手机写!)

于 2012-10-17T06:44:50.893 回答
0

最好的解决方案是使用一些日志记录 API 看看http://www.vogella.com/articles/Logging/article.html教程。或者另一个简单的选项是重定向在某个文本文件中执行命令的输出。更改命令

String executeCmd = "cmd /c net stop \" + serviceName + "\"+" >> "+ fileName".

于 2012-10-17T06:52:04.673 回答
0

为了获得命令的输出,您可以这样做:

    String lineSeparator = System.getProperty("line.separator");
    stderr = runtimeProcess.getErrorStream();
    stdout = runtimeProcess.getInputStream();


    // clean up if any output in stdout
    BufferedReader brCleanUp =
            new BufferedReader(new InputStreamReader(stdout));
    StringBuilder output = new StringBuilder();
    String line;
    while ((line = brCleanUp.readLine()) != null) {
        output.append(line).append(lineSeparator);
    }
    brCleanUp.close();

     // clean up if any output in stderr
    brCleanUp =
            new BufferedReader(new InputStreamReader(stderr));
    StringBuilder error = new StringBuilder();
    while ((line = brCleanUp.readLine()) != null) {
        error.append(line).append(lineSeparator);
    }
    brCleanUp.close();

现在在输出和错误字符串中,您拥有执行过程的“标准输出”和“标准错误”。

于 2012-10-17T20:05:13.477 回答