发布和打包

当我们的Winform程序开发完成后,直接把Visual Studio工程扔出去让用户自己编译显然不是个好主意,我们的工程需要打包为适合分发的文件或安装包,这样用户使用起来才比较友好。这篇笔记我们介绍Winform程序发布和打包相关的知识。

Visual Studio发布

Visual Studio内置了一个“发布”功能,它能将我们的Winform程序构建并生成完整的程序交付文件夹。在Visual Studio 2022中点击生成 -> 发布选定内容,即可打开发布选项界面,如下图所示。

我们这里选择发布目标为文件夹,文件夹位置保持默认的类似bin\Release\net8.0-windows\publish\路径即可,最后点击确定,IDE会帮我们在Properties/PublishProfiles下生成一份发布配置。

我们可以在界面上以图形化的方式编辑这些配置。

如果你和我一样使用的是新版本.NET,其中比较重要的一个配置是“部署模式”,选择“依赖框架”意味着用户计算机上需要预先安装.NET运行时,而“独立”意味着发布的文件夹中会自带.NET运行时,用户的计算机无需安装.NET运行时。

这里其实新版本.NET比较尴尬。对于古早的.NET Framwork,像Windows10/11操作系统都自带了.NET Framwork 4.8,发布程序时不需要自带运行时,打包输出文件夹只有几百KB。然而对于新版.NET运行时,所有版本的Windows操作系统都不自带,因此为了便于用户使用,最简单的方式是选择“独立”发布模式,但这也导致发布文件夹的体积极大,像我使用的.NET8打包一个Hello World程序竟也有149MB,部署包膨胀了一千倍。有人说可以在安装程序中引导用户为系统全局安装.NET运行时,但我觉得指望用户弄明白安装.NET运行时基本不大可能,149MB也只能忍了,这确实没什么更好的办法。

一切都配置完成后,点击“发布”按钮,构建完成后我们就可以在指定目录看到发布结果。

此时最简单的分发方式就是直接把这个文件夹拷贝给用户,用户就可以直接使用你的Winform程序了。

Inno Setup制作安装包

发布程序更规范的方式是制作EXE或MSI格式的安装程序包,用户运行安装包安装我们的Winform程序,安装过程中用户可以指定安装路径等信息,安装程序还可以自动执行初始化相应的系统配置、编辑注册表项等操作,安装完成后可以在控制面板看到安装信息,以及执行卸载程序移除程序文件、恢复系统配置。制作安装程序包并不需要我们再开发一个程序,而是有一些现成的工具可用,Inno Setup和WiX Toolset都是非常流行的安装包制作工具,其中Inno Setup使用非常简单,不过其限制是只支持EXE安装程序,不支持生成MSI安装程序。我们这里对Inno Setup进行简单介绍。

Inno Setup是一个开源的安装包制作工具,使用起来非常简单,我们需要编写一个安装包制作脚本,它是Pascal‑like的自定义配置DSL,然后运行Inno Setup工具编译这个脚本即可,Inno Setup会根据这个脚本来生成最终的安装包。我们可以在Github上找到Inno Setup项目地址:https://github.com/jrsoftware/issrc,在Releases界面我们可以下载Inno Setup工具。

安装完成后,我们打开Inno Setup Compiler程序。

Inno Setup脚本内容还是比较复杂的,我们不需要从头手写,在初始界面选择“Create a new script file using the Script Wizard”,用向导创建脚本模板,不过在此之前我们需要先用Visual Studio将项目发布到文件夹中,具体Inno Setup向导中的设置内容这里就不展开逐一介绍了,相信大家都能看得懂,最终我们会在Inno Setup编辑器中得到类似如下的脚本文件。

脚本中,注意不要弄错的是这个[Files]配置,我们不要只打包发布文件夹内的exe,而是要把所有文件都打包进来。

[Files]
Source: "H:\workspace-csharp\Gacfox.Demo\bin\Release\net8.0-windows\publish\win-x64\*"; DestDir: "{app}"; Flags: ignoreversion

这个脚本我们可以保存下来,它通常是以.iss结尾的文本文件,想要再次使用时,直接用Inno Setup Compiler工具打开就可以。

一切都配置完成后,在Inno Setup Compiler工具中点击Build -> Compile,我们最终的安装包就可以生成了。

如果我们之前在Visual Studio中是以“独立”模式发布的,那么用户直接执行这个安装包安装,将程序文件释放到磁盘,然后我们的Winform程序就可以正式投入使用了。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。