我正在尝试使用此
在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");
}
它运行时没有例外但不启动服务。我做错了什么?
答案 0 :(得分:0)
尝试弄清楚注册的服务名称是什么,并使用它而不是完整的可执行文件。例如:
net start "Adobe Acrobat Update Service"
您可以通过在命令窗口(打印所有已注册服务的列表)上运行net start
或通过单击开始<在服务控制面板中查找服务来查找服务名称。 / em>按钮,输入services.msc
,然后按 Enter 。如果服务名称含糊不清,您可以右键单击服务控制面板中的服务,然后单击属性以确认该服务的可执行文件。
您可能需要使用升级的权限执行命令。您可以通过禁用UAC(不推荐),通过在启动程序时使用提升的权限启动javaw.exe,或使用Elevate.exe等实用程序执行任何特权命令来执行此操作。
如果您无法通过Runtime.exec进行出价,请尝试改为使用ProcessBuilder。
最后,始终阅读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服务。