当前位置: 首页 > article >正文

duilib应用部署实战:基于NSIS的轻量化安装包制作

1. 为什么选择NSIS打包duilib应用当你用duilib完成了一个漂亮的Windows桌面应用接下来最头疼的问题就是怎么让用户能像安装QQ那样一键安装你的程序这就是我们今天要解决的最后一公里问题。我经历过用zip压缩包发给客户结果对方不知道解压后该点哪个exe的尴尬。也试过一些复杂的安装包工具配置起来简直让人怀疑人生。直到发现了NSIS这个神器它就像打包界的瑞士军刀——轻量整个安装程序才几百KB、灵活完全脚本化控制、免费开源项目用了都说好。特别适合我们duilib开发者的是NSIS对Windows平台的支持非常友好。你辛辛苦苦用duilib做的炫酷界面它能原汁原味地打包进去连注册表项、开始菜单快捷方式这些细节都能完美处理。最近给公司做的OA系统打包从原始文件到生成安装包整个过程不到10分钟。2. 环境准备与工具安装2.1 安装NSIS主程序首先到官网下载最新版NSIS推荐选择3.08以上版本。有个坑要注意如果你的duilib应用是32位的就装32位NSIS如果是64位应用记得装64位版本。我有次用错版本打包后程序运行总报错排查了半天才发现是这个原因。安装时建议勾选Start Menu shortcuts和Desktop icon这两个选项这样后面写脚本时会方便很多。有个特别实用的组件叫NSIS Plug-ins一定要装上它支持压缩算法选择后面优化安装包体积时会用到。2.2 配置HW VNIS Edit编辑器虽然可以用记事本写NSIS脚本但我强烈推荐HW VNIS Edit这个神器。它就像NSIS界的VS Code提供语法高亮、代码提示甚至可视化向导。最新版已经支持暗黑主题深夜写脚本再也不怕亮瞎眼了。安装后有个设置要调整在选项-编辑器设置里把自动缩进和显示行号打开。我还会把字体调到14pt这样看脚本更舒服。这些小细节能让你后续的打包工作事半功倍。3. 从零开始创建安装脚本3.1 基础脚本结构打开HW VNIS Edit新建一个空白脚本。先搭建骨架结构; 定义基础信息 Name 我的duilib应用 OutFile MyAppInstaller.exe InstallDir $PROGRAMFILES\MyApp ; 现代UI界面设置 !include MUI2.nsh !define MUI_ICON app.ico !define MUI_UNICON uninstall.ico ; 安装页面流程 !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES ; 生成卸载程序 !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; 设置语言 !insertmacro MUI_LANGUAGE SimpChinese这个模板我用了不下20次每次新项目直接复制修改就行。特别注意MUI_ICON这个参数它指定安装包的图标建议用duilib应用的logo这样看起来专业。3.2 添加文件与目录接下来是最关键的步骤——把你的duilib应用文件打包进去。假设你的编译输出目录结构是这样的bin/ MyApp.exe ui/ main.xml images/ bg.png lib/ duilib.dll对应的NSIS脚本应该这样写Section 主程序 SecMain SetOutPath $INSTDIR File /r bin\MyApp.exe SetOutPath $INSTDIR\ui File /r bin\ui\main.xml File /r bin\ui\images\bg.png SetOutPath $INSTDIR\lib File /r bin\lib\duilib.dll SectionEnd这里有个实用技巧先用SetOutPath设置目标路径再用File添加文件。/r参数表示递归包含子目录。我建议按功能模块分开放置这样后期维护更方便。4. 高级功能定制4.1 创建快捷方式好的安装包应该自动创建开始菜单和桌面快捷方式。在NSIS中这样实现Section 快捷方式 SecShortcut CreateDirectory $SMPROGRAMS\MyApp CreateShortCut $SMPROGRAMS\MyApp\MyApp.lnk $INSTDIR\MyApp.exe CreateShortCut $DESKTOP\MyApp.lnk $INSTDIR\MyApp.exe SectionEnd如果想让快捷方式带图标在CreateShortCut最后加上图标路径参数。注意图标文件需要提前打包到安装目录里。4.2 注册表设置duilib应用有时需要注册COM组件或保存配置信息。NSIS的注册表操作非常方便Section 注册表设置 WriteRegStr HKLM SOFTWARE\MyApp InstallPath $INSTDIR WriteRegDWORD HKLM SOFTWARE\MyApp RunTimes 0 SectionEnd我曾经用这个功能实现首次启动时显示欢迎向导。通过读取注册表的RunTimes值如果是0就启动向导页否则直接进主界面。5. 常见问题排查5.1 文件路径错误新手最容易犯的错误就是文件路径不对。建议使用相对路径时确保NSIS脚本和源文件目录结构一致编译前先用MessageBox打印关键路径检查遇到文件缺失错误时先用IfFileExists做判断5.2 中文乱码问题如果安装界面出现乱码检查脚本文件保存为UTF-8 with BOM格式语言包选择正确!insertmacro MUI_LANGUAGE SimpChinese所有中文字符串用双引号包裹6. 安装包优化技巧6.1 压缩算法选择在脚本开头添加SetCompressor /SOLID lzma这个设置能让安装包体积缩小30%-50%。不过要注意Solid压缩虽然效率高但解压时会稍慢一些。对于duilib这种带大量资源文件的应用特别适用。6.2 安装进度美化添加这个配置可以让进度条显示文件名称!define MUI_INSTFILESPAGE_SHOWDETAILS on还可以自定义进度条颜色!define MUI_INSTFILESPAGE_PROGRESSBAR smooth !define MUI_PROGRESSBAR_COLOR FF66007. 实际案例分享去年我给一个电商ERP系统做打包遇到几个典型问题依赖的第三方dll需要注册安装时需要检测.NET Framework 4.7.2要支持静默安装参数最终的解决方案是Section 依赖检测 ReadRegStr $0 HKLM SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full Release IntCmp $0 461808 dotnet_ok MessageBox MB_OK 需要安装.NET Framework 4.7.2 ExecWait $INSTDIR\redist\ndp472.exe /passive /norestart dotnet_ok: SectionEnd静默安装参数通过SilentInstall silent实现配合IfSilent判断当前模式。这些经验让我深刻体会到NSIS的灵活性。

相关文章:

duilib应用部署实战:基于NSIS的轻量化安装包制作

1. 为什么选择NSIS打包duilib应用 当你用duilib完成了一个漂亮的Windows桌面应用,接下来最头疼的问题就是:怎么让用户能像安装QQ那样一键安装你的程序?这就是我们今天要解决的"最后一公里"问题。 我经历过用zip压缩包发给客户&am…...

MOS管LC震荡电路偏置电压调整全攻略:LTspice仿真与实测对比

MOS管LC震荡电路偏置电压调整全攻略:LTspice仿真与实测对比 在电子电路设计中,MOS管LC震荡电路因其结构简单、频率稳定而被广泛应用。然而,要让这种电路发挥最佳性能,偏置电压的精确调整往往成为工程师面临的最大挑战。本文将带您…...

从HuggingFace迁移MinerU?镜像适配问题全解析

从HuggingFace迁移MinerU?镜像适配问题全解析 1. 项目背景与核心价值 OpenDataLab MinerU 是一个专门针对文档理解场景优化的智能多模态模型。基于 OpenDataLab/MinerU2.5-1.2B 模型构建,这个方案在保持轻量级的同时,提供了出色的文档解析能…...

从数学建模到真实运维:如何用调度模型优化你校园里的共享单车?

从数学建模到真实运维:校园共享单车调度系统的工业级设计实践 清晨7点的校园东门,总能看到一群学生围着仅剩的几辆共享单车"抢车"的场景;而下午3点的体育馆停车点,却堆积着数十辆无人问津的车辆。这种供需错配现象背后&…...

【C++:红黑树】4 条规则深度理解红黑树:从原理、变色、旋转到完整实现代码

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路&#xff0…...

革命性APK安装器:在Windows上无缝运行Android应用的极致方案

革命性APK安装器:在Windows上无缝运行Android应用的极致方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾幻想过在Windows电脑上直接运行Androi…...

量化交易框架VectorBT:重新定义金融策略开发的高性能方法论

量化交易框架VectorBT:重新定义金融策略开发的高性能方法论 【免费下载链接】vectorbt Find your trading edge, using the fastest engine for backtesting, algorithmic trading, and research. 项目地址: https://gitcode.com/gh_mirrors/ve/vectorbt Ve…...

Flutter助力斩获大厂offer:我的技术突破与成长之路

一、起点:迷茫与选择 2024年春天,我站在人生的十字路口。 非科班出身、零项目经验、简历一片空白,投了20多份简历,连面试机会都寥寥无几。那时的我,每天刷着招聘软件,看着“3年经验”“精通Flutter/React …...

别再只写学生管理系统了!这个C++飞机订票项目能给你的简历加分(含GitHub源码)

用C飞机订票系统项目点亮你的技术简历 在众多求职者中脱颖而出并非易事,尤其是当大多数候选人都拥有相似的学历背景和技能清单时。作为一名C开发者,你是否厌倦了在简历上反复列出"学生管理系统"这类基础项目?让我们聊聊如何通过一…...

Scoop国内镜像加速全攻略:从安装失败到高效下载的完整解决方案

1. Scoop安装失败的常见原因分析 第一次接触Scoop的Windows用户,90%都会在安装阶段卡壳。我刚开始用的时候也踩过不少坑,后来帮团队部署开发环境时更是见识了各种奇葩错误。总结下来主要有三类典型问题: 网络连接问题是最常见的拦路虎。由于S…...

三步搞定图片文字提取:Umi-OCR免费离线OCR工具全攻略

三步搞定图片文字提取:Umi-OCR免费离线OCR工具全攻略 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHu…...

LIME算法实战:用Python手把手教你解释黑盒模型(附葡萄酒分类案例)

LIME算法实战:用Python手把手教你解释黑盒模型(附葡萄酒分类案例) 在机器学习项目落地过程中,算法工程师常面临这样的困境:模型指标表现优异,但业务方始终对预测结果持怀疑态度。这种"黑盒焦虑"在…...

智能排障:借助快马AI构建Vivado安装问题自动诊断与修复助手

作为一名FPGA开发者,Vivado安装过程中的各种报错简直是家常便饭。每次遇到新问题都要花大量时间搜索解决方案,效率实在太低。最近尝试用InsCode(快马)平台的AI能力搭建了一个智能诊断工具,效果出乎意料的好,分享下具体实现思路。 …...

知识管理革命:OpenClaw+ollama-QwQ-32B构建个人第二大脑

知识管理革命:OpenClawollama-QwQ-32B构建个人第二大脑 1. 为什么我们需要"第二大脑"? 作为一个长期被信息过载困扰的技术写作者,我每天要处理几十篇技术文档、研究论文和行业动态。最痛苦的不是获取信息,而是如何有效…...

GLM-OCR .NET平台集成指南:C#调用与桌面应用开发

GLM-OCR .NET平台集成指南:C#调用与桌面应用开发 如果你是一名.NET开发者,正在琢磨怎么给你的桌面应用或者Web项目加上一个“眼睛”,让它能看懂图片里的文字,那这篇文章就是为你准备的。OCR(光学字符识别)…...

Sleep-EDF数据库实战:如何用Matlab快速处理睡眠分期标签(附完整代码)

Sleep-EDF数据库实战:如何用Matlab快速处理睡眠分期标签(附完整代码) 睡眠研究是神经科学和临床医学的重要领域,而Sleep-EDF数据库作为公开可用的标准数据集,为科研人员提供了宝贵的多导睡眠图(PSG)记录。但在实际应用…...

当水力裂缝撞上天然裂缝:用COMSOL相场法重现‘海马尾巴’般的转向路径

当水力裂缝邂逅天然裂缝:COMSOL相场法中的"海马尾巴"转向现象解析 在油气田开发领域,水力压裂技术正经历着从经验驱动到数字仿真的范式转变。相场法作为断裂力学模拟的前沿方法,以其独特的"无预设路径"优势,…...

从PERCLOS到‘三庭五眼’:聊聊疲劳检测算法里那些有趣的工程实现细节

从PERCLOS到‘三庭五眼’:疲劳检测算法的工程实现艺术 当算法工程师第一次看到"三庭五眼"这个美术概念被写入代码注释时,大概都会会心一笑——这正是工程实践中那些有趣的跨界融合时刻。疲劳检测系统看似是标准的计算机视觉任务,但…...

别再傻傻分不清:Electron-packager和Electron-builder到底怎么选?一份给新手的场景化选择指南

Electron打包工具选型指南:从场景需求看electron-packager与electron-builder的抉择 当你第一次尝试将Electron应用交付给用户时,面对electron-packager和electron-builder这两个主流打包工具,是否感到困惑?它们看似功能相似&…...

零基础玩转Mermaid在线编辑器:30分钟从入门到精通专业图表制作

零基础玩转Mermaid在线编辑器:30分钟从入门到精通专业图表制作 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-liv…...

蓝桥杯c++新手如何起步?快马生成带详解的入门代码示例

作为一名刚接触蓝桥杯C竞赛的新手,最头疼的往往不是算法本身,而是连基础语法都还没摸透就要面对复杂题目。最近在准备比赛时,我发现用传统方式学习效率很低——手动敲完代码后,经常因为不熟悉语法细节卡壳,调试半天也找…...

避坑指南:用合成数据训练模型时最容易忽略的3个问题

避坑指南:用合成数据训练模型时最容易忽略的3个问题 在自动驾驶系统开发中,某团队曾用10万小时合成驾驶数据训练视觉模型,测试时准确率高达98%。但当模型首次接触真实道路时,却将夕阳下的刹车灯误识别为交通信号灯——这个价值24…...

终极指南:如何让AMD和Intel显卡也能享受DLSS级别的AI超分辨率技术

终极指南:如何让AMD和Intel显卡也能享受DLSS级别的AI超分辨率技术 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler Opti…...

【PolarCTF2026年春季挑战赛】GET

直接上传一个php试试文件名后缀双写可以绕过可以解析&#xff0c;我们上传一句话木马提示出现了$_POST[cmd]那么用下面的webshell&#xff0c;避免POST和cmd一起出现<?php $x $_POST; eval($x[cmd]); ?>上传成功&#xff0c;访问一下得到flag{73121d2832f501293a2e661…...

AudioSeal Pixel Studio代码实例:检测结果可视化图表生成脚本

AudioSeal Pixel Studio代码实例&#xff1a;检测结果可视化图表生成脚本 1. 工具概述与核心价值 AudioSeal Pixel Studio是一款基于Meta开源的AudioSeal算法构建的专业音频水印工具。它能够在保持原始音频质量的前提下&#xff0c;为音频文件嵌入几乎不可察觉的数字水印&…...

KeyPass完全指南:掌握开源离线密码管理器的终极教程

KeyPass完全指南&#xff1a;掌握开源离线密码管理器的终极教程 【免费下载链接】KeyPass KeyPass: Open-source & offline password manager. Store, manage, take control securely. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyPass 在当今数字时代&#xf…...

开源六轴机械臂从零构建指南:低成本DIY方案与实战应用

开源六轴机械臂从零构建指南&#xff1a;低成本DIY方案与实战应用 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 开源六轴机械臂技术正以前所未有的速…...

lt6911c全套资料:原理图、PCB、源代码及手册

lt6911c全套资料&#xff0c;包括原理图&#xff0c;pcb&#xff0c;源代码&#xff0c;寄存器手册&#xff0c;datasheet。 。 最近在折腾LT6911C这款HDMI转MIPI的芯片&#xff0c;翻遍全网总算集齐了全套开发资料。这玩意儿在视频转换领域用得挺多&#xff0c;但真开始动手调…...

解锁戴森电池3大突破:固件破解技术让32次红灯故障电池重生

解锁戴森电池3大突破&#xff1a;固件破解技术让32次红灯故障电池重生 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 当你的戴森吸尘器突…...

颗粒结构:基础但容易被忽视

在COMSOL中二氧化碳电化学还原过程中不同催化剂结构对离子传输的影响的模拟分析搞电化学的小伙伴们都知道&#xff0c;催化剂长得像撒了把芝麻似的颗粒结构最省事。但在COMSOL里建模时千万别直接右键画球体——试试这个骚操作&#xff1a;model.geom("geom1").featur…...