[笔记] Windows Win32应用分发


应用打包

Windows由于历史原因,打包应用程序制作安装包的方式层出不穷,四世同堂。

EXE安装包

推荐NSIS。NSIS全称Nullsoft Scriptable Install System,是一款开源的专业Windows应用程序打包工具,它采用NSI脚本描述安装包来打包应用程序。
建议配合HM NIS Edit使用:先使用HM NIS Edit的Wizard向导功能生成一个脚本,然后用NSIS编译。

MSI安装包

推荐微软官方的免费软件Microsoft Visual Studio Installer Projects。Microsoft Visual Studio Installer Projects曾是Visual Studio的内置功能,后来成为了Visual Studio的插件。
官方的教程有些不知所云,可以参考这篇。

MSIX/AppX

MSIX是现代的Windows应用安装包格式,它与以往的MSI有很大区别,更像Android平台的apk格式,使用者不能选择安装目录,只能由系统分配。它还有诸多新特性,比如强制数字签名等等。同时也对用户系统要求更高,MSIX原生只支持Windows 10及以后的版本,微软也推出了MSIX Core来支持最早到Windows 7的版本
这里推荐使用Windows SDK中的MakeApp.exe在命令行下打包:

  1. 准备好数字证书(pfx)和应用程序
  2. 编写appxmanifest.xml,填写发布者,名称,包名,启动程序等等
  3. 运行 makeappx.exe pack /d 应用程序目录 /p 输出文件名 打包应用程序
  4. 运行 signtool.exe" sign /fd SHA256 /a /f 证书.pfx /p 密码 app.msix 签名安装包
  5. 如果证书是自签名的,分发时还应附带公钥证书,让用户添加到受信任的根证书中

单文件

一些软件可以将应用程序打包成单文件,比如商业软件Enigma Virtual Box。

用户自行安装运行环境

一些动态语言编写的软件,若用户有一定的基础,可以让用户自己安装运行环境,这可以节省用户的硬盘和发行文件的大小。

以JVM生态为例,可以让用户自行安装JRE,JRE 8建议用Oracle JRE。 JRE 11和JRE 17建议用Eclipse Adoptium JRE,然后分发jar文件即可。

这个门槛对普通用户还是有点高的,而且Oracle不再发布新版JRE也是鼓励开发者打包一份JRE给用户,但这造成了JVM应用很大,浪费不少空间。