我的Java程序在Mac上运行。 Jar文件打包到* .app中,* .app安装在Mac上的/ Applications文件夹中。
现在,我已经为Skype这样的程序添加了自动更新功能。 1:[] 并且无法为Mac OS完成此自动更新功能。
它应该如何运作:
步骤1-6我可以通过运行Java程序来完成 步骤7-8我无法做到,因为程序在运行时无法从磁盘中删除。
为了实现这7-9个步骤,我编写了一个可以执行步骤7-9的脚本。
#!/bin/bash
mkdir tmp-dir
while [[ $(pgrep myapp-process | wc -l) -ne "0" ]]; do
echo "myapp is Running"
sleep 3s
done
echo "myapp has been Stopped"
rm -rf /Applications/myapp.app
mv /Applications/newmyapp.app /Applications/myapp.app
chmod -R 755 /Applications/myapp.app
open /Applications/myapp.app
所以,理论上我只需要在退出之前从Java程序运行这个脚本 - System.exit(0);像这样
String macTmpFolder = properties.getProperty(ConfigConstants.MAC_TMP_DIR);
String command = "sh "+macTmpFolder+"/ak-restart.sh";
logger.debug("Shell command is:"+command);
try {
//Desktop.getDesktop().open(new File(macTmpFolder+"/ak-restart.app"));
Process exec = Runtime.getRuntime().exec(command);
} catch (IOException e) {
logger.error(e);
}
System.exit(0);
}
但在实践中,它并不适用于Java,因为' rm'命令需要' sudo'权利。不能将配置添加到' sudoers'文件。如果我手动运行脚本就行了。
我不是Mac OS和基于unix的系统的专家。我不知道如何重新启动新版本的程序。将不胜感激任何帮助。或许有人知道如何在Mac OS上使用* .app
打包的Java程序执行自动更新功能