功能是 定时检测,当发现版本和服务器版本不一致的时候,去下载最新的版本,并重启服务(jar包都注册成服务了。在windows环境)
不知道为什么 执行完net stop,就不执行下面这行了....
我看java日志是stop了,但是看计算机管理-服务-具体的这个服务还是正在运行状态的,可能这块有问题,没有关闭;但是我双击这个重启.bat,服务是会重启的,好奇怪
功能是 定时检测,当发现版本和服务器版本不一致的时候,去下载最新的版本,并重启服务(jar包都注册成服务了。在windows环境)
不知道为什么 执行完net stop,就不执行下面这行了....
我看java日志是stop了,但是看计算机管理-服务-具体的这个服务还是正在运行状态的,可能这块有问题,没有关闭;但是我双击这个重启.bat,服务是会重启的,好奇怪
我先确认一下,你这个脚本停止的,是你这个 Java 程序本身吗?
如果是的话当然有问题了……
net stop
不是强杀进程的,它是给服务发送一个停止信号,来让服务自己平稳地退出自己。但你这里 Java 程序此时在 exec()
这句阻塞着呢,它当然不会退出了。
你这里的流程就变成了:
所以你没发现绝大部分软件,主程序和 updater 这种东西是两个完全独立的程序么……
如果你真的就想用一个程序来控制,那就别用 Runtime
这种会阻塞主线程的方式了,换成 ProcessBuilder
吧。
P.S. 注意用 ProcessBuilder 就别再调用 wait 了,否则那又变成阻塞了。
8 回答6.6k 阅读
4 回答721 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答799 阅读✓ 已解决
把关闭服务和启动服务的操作放两个文件里,然后中间加一个延迟试试: