zoukankan      html  css  js  c++  java
  • 搬运:制作windows安装包

    python软件更新及安装

    一、启动时更新

    这一步其实是最简单的, 在上一篇文章 怎么实现软件更新? 里,我们已经用一个函数main()把整个过程封装起来,所以我们只需要在我们的软件代码的主程序里引入这个函数,并且放到其他语句的最前面。

    # 引入函数
    from update import main
    # 中间代码省略
     ...
    if __name__ == '__main__':
        # 放在最前面
        main()
        app = MainWindows()
        app.mainloop()

    使用pyinstaller制作文件

    1. 最简单的方法就是:
    pyinstaller -w -F main.py

    参数解释: - -F 表示生成单个文件,比如上面的命令就是生成 main.exe - -w 表示不要控制台显示,就我们测试时经常看到的那个黑漆漆的cmd框,让用户使用时当然不希望用户看到这么丑的一个东西出现呀,所以去除控制台 - -p 表示自定义加载的类路径,一般情况不用 - -i 表示可执行文件的图标 用这种方法生成的文件直接就是可执行文件了,当然也不用考虑安装了,我们常说的绿色软件就差不多是这样了,免安装,拿到就可以用,而且我们还贴心的自动更新,人性化不。

    1. 文件夹方式:
    pyinstaller -w main.py

    其实也简单,不加-F 就是直接生成一个文件夹。

    打包完成后,会生成一个dist文件夹,打开里面会有一个main文件夹,就是与我们的命令的主文件名一样,再打开main,里面还有一个main.exe。这个就是我们正常的执行文件,可以双击运行。

    呃,怎么出错了,这难道就是大型翻车现场!!! 其实,问题很简单,还记得我们的更新文件吗?如果不记得可以看看我们的上一篇文章 怎么实现软件更新?, 由于软件启动首先要运行的是自动更新,而我们的更新文件需要一个json, 所以启动当然出错。 把文件放进文件夹,再来一次。

    这下可以正常运行了。其实,大家如果看的仔细,应该知道,这里的自动更新是有问题的,因为我们上一篇文章实际上是针对的单个执行文件,而不是文件夹的,当然这里只是演示一下,相信朋友们自己琢磨下,也能做出针对文件夹的自动更新。原理都是一样的。

    二、如何让软件能够安装

    上面的内容总的来说还是一个回顾和配置前提,是为这一部分做的提前准备。我们为什么要打包成文件夹形式呢?因为接下来我们要用的工具就是针对文件夹的。还有文件夹形式相对于单个执行文件,大小会小一点。

    使用HM NIS Edit

    这个软件可以让我们制作出非常正式的安装包,就像大家常用的QQ安装包一样。接下来,就让我们一起看看。 首先,双击打开HM NIS Edit编译器。

     

     

    图标是什么,没看懂,感觉有点像乌贼。进入软件界面。点击文件选择新建脚本:向导

     

    点击下一步, 填写应用程序信息:

     

     

    继续下一步,基本上是默认,不用更改,不过安装程序语言要选择simpChinese,也就是简体中文,不然安装时就会出现乱码。

     

     

    接着下一步, 这一步,应用程序默认目录就是用户按装时会出现的默认选项,我们设置了允许用户更改。授权文件其实就是用户安装时会出现的关于应用的一些说明,授权你使用的范围。我们随便写了一个。

     

     

    下一步后,出现下面第一张图片内容,点击修改文件路径,这里添加程序所在的整个目录:

     

     

    配置完成再点下一步, 这里直接默认就好了:

     

     

    第七步也是默认:

     

     

    第八步为卸载相关设置,可以根据自己需要设置:

     

     

    最后,点保存脚本,保存好后,脚本会自动进行编译:

     

     

    虽然前面的设置,基本上能满足所有需求,不过我们的软件有引入一些库,而这些库是在子文件夹下的,如下所示:

     

     

    而这些,子文件夹,我在测试时,发现不能通过前面的设置直接安装到安装文件夹下,导致软件启动不了。所以我们要在编译脚本里做以下的修改:

    # 编译成setup.exe文件时的操作
    Section "MainSection" SEC01
      SetOutPath "$INSTDIR"
      SetOverwrite ifnewer
      File "mainmain.exe"
      File /r "main*.*" # 这里是修改后的内容,添加一个/r符号,可以递归
      CreateDirectory "$SMPROGRAMS敦煌工具"
      CreateShortCut "$SMPROGRAMS敦煌工具敦煌工具.lnk" "$INSTDIRmain.exe"
      CreateShortCut "$DESKTOP敦煌工具.lnk" "$INSTDIRmain.exe"
    SectionEnd
    
    # 卸载时的操作
    Section Uninstall
      Delete "$INSTDIR${PRODUCT_NAME}.url"
      Delete "$INSTDIRuninst.exe"
      Delete "$INSTDIR*.*" # 修改内容,删除安装文件夹下的所有内容
      Delete "$INSTDIRmain.exe"
    
      Delete "$SMPROGRAMS敦煌工具Uninstall.lnk"
      Delete "$SMPROGRAMS敦煌工具Website.lnk"
      Delete "$DESKTOP敦煌工具.lnk"
      Delete "$SMPROGRAMS敦煌工具敦煌工具.lnk"
    
      RMDir "$SMPROGRAMS敦煌工具"
      RMDir /r "$INSTDIR*.*" # 修改内容,可以完整的删除安装文件夹
    
      DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
      DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
      SetAutoClose true
    SectionEnd

    三、安装测试

    经过上面的步骤后,如果一切设置正确,编译完成后会直接启动安装程序。其实在保存文件夹下有个setup.exe文件,双击启动也可以。

     

     

    第一步,启动软件:

     

     

    第二步,前面所说的授权文件内容就是在这里显示的:

     

     

    第三步,选择安装的地址,用户可以自己修改:

     

     

    第四步,开始安装:

     

     

    第五步,安装完成,可以结束也可以直接运行我们的软件:

     

     

    这时,在启动目录里也有了相应的卸载工具:

     

     

    第六步,运行软件,可以出现我们的软件界面了,输入内容测试也能正常使用:

     

     

    第七步,卸载测试,这里是直接从安装目录里下载工具进行操作的,方便展示,大家从启动目录里操作,效果也是一样:

     

    最后

    就这样,我们就把自己做的软件包装成一个高大上的正式软件了,怎么样?学会了吗?有什么不懂的,可以关注我的公众号一起讨论,文中示例已经上传至百度网盘,回复关键词:安装软件 获取

  • 相关阅读:
    Debian 安装配置(包括kdevelop)
    linux matlab2016 安装
    Qt5.7 无法输入中文问题
    阻塞方法与InterruptedException
    java的null
    原子性、可见性、有序性与指令重排序
    物理机内存模型与java内存模型
    java构造函数总结
    什么时候需要用super
    重载与重写
  • 原文地址:https://www.cnblogs.com/beilong/p/14707491.html
Copyright © 2011-2022 走看看