远程调用cmd更新本地jar

2019-08-16 11:05:13来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

远程调用cmd更新本地jar

最近遇到一个项目需求需要实现远程更新,但是本地项目无法更新自己,这让博主很是头疼,既然自己无法更新自己的话,那就自建新的项目,通过本地项目来调用新项目接口来更新本地项目。

代码如下:

 1     /**
 2      * 重启完成更新
 3      */
 4     public void restart() {
 5         log.info("restart");
 6         String command = "cmd /c start C:\\rct\\winsw\\rct\\update.bat";
 7         //测试
 8         String distName = "dist";
 9         String jarName = "rct-demo-1.0.jar";
10         String bat;
11         if (type.equals("dist")) {
12             log.info("dist");
13             bat = "@echo off\n" +
14                     "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
15                     "cd /d \"%~dp0\"\n" +
16                     "net stop \"" + webService + "\"" + "\n" +
17                     "xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" +
18                     "net start \"" + webService + "\"";
19         } else if (type.equals("jar")) {
20             log.info("jar");
21             bat = "@echo off\n" +
22                     "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
23                     "cd /d \"%~dp0\"\n" +
24                     "net stop \"" + jarService + "\"" + "\n" +
25                     "xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" +
26                     "net start \"" + jarService + "\"";
27         } else {
28             log.info("all");
29             bat = "@echo off\n" +
30                     "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n" +
31                     "cd /d \"%~dp0\"\n" +
32                     "net stop \"" + jarService + "\"" + "\n" +
33                     "net stop \"" + webService + "\"" + "\n" +
34                     "xcopy /Y /E /i " + sourceFile + "\\" + jarName + " " + targetFile + "\\" + jarName + "\n" +
35                     "xcopy /Y /E /i " + sourceFile + "\\" + distName + " " + targetFile + "\\" + distName + "\n" +
36                     "net start \"" + jarService + "\"" + "\n" +
37                     "net start \"" + webService + "\"";
38         }
39         creatBat(bat);//创建bat脚本
40         log.info("cmd exec");
41         try {
42             HttpUtil.HttpClientPost(cmdUrl, command);     
43         } catch (Exception e) {
44             log.error("http请求异常");
45             e.printStackTrace();
46         }
47         log.info("cmd success");
48     }

中间if-else那一坨,主要是用来存储bat脚本,为了方便,通过creatBat方法(自己实现)将bat脚本写入本地,然后通过post请求去传递参数(自己实现),新项目接口收到命令后,可以调用Runtime.getRuntime().exec(command)调用cmd执行脚本,实现更新操作,当然更新之前肯定要关闭对应的服务才能更新,调用cmd的用处在这里就体现出来了,同样大家在更新jar包前可以做点其它的事情,比如远程下载,在线解压等等。


原文链接:https://www.cnblogs.com/longmaodaxia/p/11238884.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:在工作中常用的Linux命令

下一篇:独享还是共享,你选择哪一种锁?