在Mac上更新Java程序

时间:2017-01-20 21:02:36

标签: java macos shell auto-update

我的Java程序在Mac上运行。 Jar文件打包到* .app中,* .app安装在Mac上的/ Applications文件夹中。

现在,我已经为Skype这样的程序添加了自动更新功能。 1:[enter image description here] 并且无法为Mac OS完成此自动更新功能。

它应该如何运作:

  1. 程序检查特定网址提供的xml
  2. 如果有新版本的软件,那么
  3. 程序使用/ tmp文件夹中的新版本下载* .zip存档(/ Users / Shared / tmp)
  4. 在/ tmp
  5. 中解压* .zip
  6. 从'程序名称'重命名新版本的程序到' newprogram-name'。之所以这是因为我无法使用程序名称复制文件'到/应用程序,因为这样的程序存在并且现在正在运行。
  7. 复制' newprogram-name'从/ tmp到/ Applications
  8. 删除正在运行的'程序名'
  9. 重新命名' new' (位于/ Applications)
  10. 跑。现在它将成为程序的新版本
  11. 步骤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程序执行自动更新功能

0 个答案:

没有答案