使用Java启动Windows服务

时间:2012-03-20 17:37:13

标签: java windows-services

我正在尝试使用此

在java中启动Windows服务
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 :(得分:0)

  1. 尝试弄清楚注册的服务名称是什么,并使用它而不是完整的可执行文件。例如:

    net start "Adobe Acrobat Update Service"

    您可以通过在命令窗口(打印所有已注册服务的列表)上运行net start或通过单击开始<在服务控制面板中查找服务来查找服务名称。 / em>按钮,输入services.msc,然后按 Enter 。如果服务名称含糊不清,您可以右键单击服务控制面板中的服务,然后单击属性以确认该服务的可执行文件。

  2. 您可能需要使用升级的权限执行命令。您可以通过禁用UAC(不推荐),通过在启动程序时使用提升的权限启动javaw.exe,或使用Elevate.exe等实用程序执行任何特权命令来执行此操作。

  3. 如果您无法通过Runtime.exec进行出价,请尝试改为使用ProcessBuilder

  4. 最后,始终阅读STDOUT和STDERR(来自Process.getOutputStream()Process.getErrorStream())的内容是个好主意。它们可能包含诊断信息;但更重要的是,如果缓冲区在Process仍在输出时填满,Process将会挂起。

答案 1 :(得分:0)

试试这段代码:

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");

答案 2 :(得分:0)

看起来你的main()退出了,所以你的服务会死掉。在这种情况下,您需要使用

安装服务
sc create "servicename" binpath="path", 

然后用

启动它
sc start "servicename.

也就是说,服务.exe仍然需要安装为Windows服务。