ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Captura 安装包构建全指南:Inno Setup 配置解析与发布流水线实践

Captura 安装包构建全指南:Inno Setup 配置解析与发布流水线实践 Captura 安装包构建全指南Inno Setup 配置解析与发布流水线实践【免费下载链接】CapturaCapture Screen, Audio, Cursor, Mouse Clicks and Keystrokes项目地址: https://gitcode.com/gh_mirrors/ca/CapturaCaptura 使用 Inno Setup 来生成 Windows 安装程序Setup 安装包。本文以 docs/Setup.md 为纲领逐段拆解仓库根目录下的 Inno.iss 安装脚本并结合 Cake 构建脚本、AppVeyor 持续集成配置完整还原从源码到Captura-Setup.exe的打包与发布链路。读完本文你将掌握 Inno Setup 脚本各段落的实际含义、Captura 安装包的产物来源与输出位置以及如何在本地或 CI 环境中一键产出安装包。一、为什么选择 Inno Setup官方说明 docs/Setup.md 只有一句话Captura 的安装程序由Inno Setup构建。这一点在 docs/Acknowledgements.md 中也得到印证Setup files for Captura are built using Inno Setup.Inno Setup 是一款开源、免费的 Windows 安装程序制作工具其核心优势在于使用类 Pascal 的脚本语言.iss描述安装逻辑配置直观、可版本化管理原生支持 LZMA 压缩、多语言安装界面、任务与快捷方式管理等常见需求与命令行工具ISCC深度集成适合在 Cake / CI 流水线中无界面调用。因此 Captura 的安装包配置被完整收纳在仓库根目录的 Inno.iss 中随源码一同进行版本控制。二、Inno.iss 脚本逐段拆解仓库根目录的 Inno.iss 是安装包的唯一配置来源全文约 60 行结构清晰下面按段解析。2.1 头部宏定义Preprocessor Directives; Override version before compiling ;#define MyAppVersion 6.0.0 #define MyAppName Captura #define MyAppPublisher Mathew Sachin #define MyAppURL https://MathewSachin.github.io/Captura #define MyAppExeName captura.exe宏值作用MyAppVersion默认被注释应用版本号注释中明确提示在编译前覆盖Override version before compiling实际值由构建流水线在调用 ISCC 时注入MyAppNameCaptura应用显示名称贯穿 [Setup]、[Icons] 等段落MyAppPublisherMathew Sachin发布者信息写入安装包元数据MyAppURL项目主页用于 PublisherURL / SupportURL / UpdatesURLMyAppExeNamecaptura.exe主程序可执行文件名供快捷方式与运行段引用其中MyAppVersion与构建流水线关系最密切Cake 构建脚本通过-build_version参数如v9.0.0、v9.0.0-beta3控制版本可以推断在编译安装脚本前会用该版本值覆盖MyAppVersion宏从而保证安装包版本号与 docs/Changelogs 中登记的版本保持一致。2.2 [Setup] 段安装包全局属性[Setup] AppId{{C1670C5E-5042-4300-9491-6BFFF963823F} AppName{#MyAppName} AppVersion{#MyAppVersion} AppVerName{#MyAppName} v{#MyAppVersion} AppPublisher{#MyAppPublisher} AppPublisherURL{#MyAppURL} AppSupportURL{#MyAppURL} AppUpdatesURL{#MyAppURL} DefaultDirName{pf}\{#MyAppName} DisableProgramGroupPageyes OutputBaseFilenameCaptura-Setup Compressionlzma SolidCompressionyes SetupIconFilesrc/Captura/Images/Captura.ico OutputDirtemp逐项说明AppId安装的全局唯一标识GUID。它决定了同一应用的升级安装识别逻辑升级时不能随意更改否则会被系统视为两个不同程序。AppName / AppVersion / AppVerName应用名、版本号及名称 版本的展示形式。AppPublisher / AppPublisherURL / AppSupportURL / AppUpdatesURL发布者与官方/支持/更新链接写入安装包属性页。DefaultDirName默认安装目录{pf}是 Inno 内置常量指Program Files目录即默认安装到Program Files\Captura。DisableProgramGroupPageyes禁用选择程序组页面安装过程中不询问开始菜单文件夹。OutputBaseFilename安装包输出文件名最终产物为Captura-Setup.exe。Compressionlzma / SolidCompressionyes使用 LZMA 压缩算法并启用固态压缩以减小安装包体积。SetupIconFile安装程序图标指向 src/Captura/Images/Captura.ico与应用自身图标复用。OutputDirtemp安装包输出到temp目录。这与构建脚本 scripts/constants.cake 中的定义严格对应readonly var SetupPath tempFolder File(Captura-Setup.exe);也与 appveyor.yml 中声明的 CI 制品路径temp/Captura-Setup.exe完全一致形成脚本输出 → Cake 定位 → CI 收集的闭环。2.3 [Languages] 段多语言安装界面[Languages] Name: english; MessagesFile: compiler:Default.isl Name: danish; MessagesFile: compiler:Languages\Danish.isl Name: dutch; MessagesFile: compiler:Languages\Dutch.isl Name: finnish; MessagesFile: compiler:Languages\Finnish.isl Name: french; MessagesFile: compiler:Languages\French.isl Name: german; MessagesFile: compiler:Languages\German.isl Name: hebrew; MessagesFile: compiler:Languages\Hebrew.isl Name: italian; MessagesFile: compiler:Languages\Italian.isl Name: norwegian; MessagesFile: compiler:Languages\Norwegian.isl Name: polish; MessagesFile: compiler:Languages\Polish.isl Name: portuguese; MessagesFile: compiler:Languages\Portuguese.isl Name: russian; MessagesFile: compiler:Languages\Russian.isl Name: spanish; MessagesFile: compiler:Languages\Spanish.isl Name: ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl安装程序内置 14 种语言界面英语、丹麦语、荷兰语、芬兰语、法语、德语、希伯来语、意大利语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、乌克兰语。compiler:前缀表示消息文件来自 Inno Setup 编译器自带的语言包无需额外下载。安装时会根据系统区域自动选择语言也可手动切换。2.4 [Tasks] 段可选安装任务[Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked定义创建桌面图标任务默认不勾选Flags: unchecked用户可自愿勾选。{cm:...}是 Inno 的本地化消息引用会自动按 [Languages] 段所选语言显示对应文案。2.5 [InstallDelete] 段升级前清理旧文件; Remove Assemblies from previous installation to prevent conflicts [InstallDelete] Type: files; Name: {app}\lib\*.dll安装升级开始时删除安装目录lib子目录下所有旧 DLL。注释明确说明意图移除旧版本程序集避免与新版程序集发生冲突——这是 .NET 应用升级安装时防止版本残留导致加载异常的常见做法。2.6 [Files] 段打包内容来源[Files] Source: dist\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs这是安装包的核心内容声明Source从dist\*收集全部文件该目录由构建流水线在打包前准备汇集编译产物DestDir安装到应用目录{app}Flagsignoreversion不依赖文件版本比对直接用新文件覆盖、recursesubdirs递归包含子目录、createallsubdirs保持目录结构。2.7 [Icons] 段快捷方式[Icons] Name: {commonprograms}\{#MyAppName}; Filename: {app}\{#MyAppExeName} Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon第一条为所有用户{commonprograms}在开始菜单创建Captura快捷方式指向{app}\captura.exe第二条在公共桌面{commondesktop}创建快捷方式但仅在用户勾选desktopicon任务时生效。2.8 [Run] 段安装完成后的动作[Run] Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, , )}}; Flags: nowait postinstall skipifsilent安装完成后提供运行 Captura选项postinstall表示显示在安装完成页面nowait表示启动后不等待程序退出skipifsilent表示静默安装时自动跳过启动动作。StringChange(MyAppName, , )是对按钮文案中字符的转义处理。三、从源码到安装包构建与发布流水线有了 Inno.iss 脚本安装包的产出还需要准备dist产物 调用 ISCC 编译两个环节这两步由 Cake 构建脚本与 AppVeyor CI 协作完成。3.1 本地构建Cake 脚本前置条件参考 docs/Build.mdVisual Studio 2019 或更新版本含 .NET 桌面开发工作负载.NET Core 2.1 或更高版本Cake 工具dotnet tool install -g Cake.Tool --version 0.32.1。安装 docs/Cake.md 说明运行构建dotnet-cake --targetCI --configurationRelease主要参数参数说明-build_version构建版本如v9.0.0稳定版或v9.0.0-beta3预发布版构建时会据此更新各项目的 AssemblyInfo-configurationRelease 或 Debug-target要执行的 Cake Task执行CI目标后安装包即出现在temp/Captura-Setup.exe见 scripts/constants.cake。3.2 持续集成AppVeyor仓库使用 AppVeyor 做 CI详见 docs/CI.md。关键配置在 appveyor.ymlinstall: - dotnet tool install -g Cake.Tool --version 0.32.1 - choco install innosetup -y --no-progress build_script: - ps: - ... dotnet-cake --targetCI --configuration$env:CONFIGURATION --build_version$tag两个细节值得注意Inno Setup 由 Chocolatey 安装choco install innosetup保证了 CI 环境具备ISCC编译器与构建脚本协同完成.iss→.exe的编译tag 构建触发发布推送 git tag如v9.0.0时以该 tag 作为-build_version执行 CI 构建非 tag 提交则使用v0.0.{构建号}作为开发版本。构建产物声明在artifacts段artifacts: - path: temp/Captura-Portable.zip name: Portable - path: temp/Captura-Setup.exe name: Setup - path: temp/captura.*.nupkg name: Chocolateytemp/Captura-Setup.exe即 Inno Setup 脚本的输出被 AppVeyor 收集为Setup制品。Release 配置下的 tag 构建会进一步将 Portable 与 Setup 两个制品部署到 GitHub Releases草稿同时将 Chocolatey 包推送到 Chocolatey 源。日常获取开发版安装包的方式见 docs/CI.md进入 AppVeyor 项目页面选择 Debug/Release 构建打开Artifacts选项卡下载 Portable 或 Setup 版本即可注意开发版仅用于测试可能不稳定。四、安装包相关的配套发布形态安装程序不是 Captura 唯一的交付形态了解配套渠道有助于完整理解 docs/Setup.md 所述安装包在整个发布体系中的位置。4.1 便携版Portable从 v9.0.0 起便携版的约定见 docs/Portable.md设置默认保存在应用目录的Settings文件夹删除该文件夹后回退到%AppData%\Captura也可用--settings命令行参数覆盖FFmpeg 默认下载到应用目录的Codecs文件夹删除后回退到%LocalAppData%\Captura在设置 FFmpeg 目录、Settings 目录或输出目录时可用%CAPTURA_PATH%指代应用目录例如%CAPTURA_PATH%/Settings。便携版与 Setup 版共用同一套编译产物只是打包方式不同zip 而非安装程序。4.2 Chocolatey 包Chocolatey 包由 Cake 构建脚本生成并在 tag 构建时由 AppVeyor 自动部署配置见 choco/captura.nuspec 与 choco/tools/chocolateyinstall.ps1。安装命令choco install captura -y详见 docs/Choco.md。五、小结与验证回顾整条安装包生产链路构建系统产出应用文件并汇集到dist目录Inno.iss 通过[Files]段将dist\*全量打入安装包并配好默认目录Program Files、14 种语言界面、桌面图标任务、旧版本 DLL 清理与安装后启动选项版本号在编译前由流水线注入覆盖MyAppVersion宏ISCC 将脚本编译为temp/Captura-Setup.exescripts/constants.cakeAppVeyor 将该文件作为 Setup 制品收集并随 tag 构建发布appveyor.yml。验证方法也很直观本地执行dotnet-cake --targetCI --configurationRelease后检查temp目录是否生成Captura-Setup.exe在 CI 页面查看 Artifacts 选项卡是否出现 Setup 制品。若需调整安装行为如默认安装目录、新增语言、是否默认创建桌面图标只需修改 Inno.iss 对应段落即可改动会随源码一并纳入版本控制保证每次构建的安装包行为可追溯、可复现。【免费下载链接】CapturaCapture Screen, Audio, Cursor, Mouse Clicks and Keystrokes项目地址: https://gitcode.com/gh_mirrors/ca/Captura创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表