简介NSISNullsoft Scriptable Install System与Duilib UI库结合实现的仿QQ风格安装程序工程面向Windows桌面应用开发者解决传统安装包界面简陋、交互体验不佳的问题。工程完整展示了如何利用NSIS脚本控制文件复制、注册表写入等安装逻辑借助Duilib渲染高质量安装界面并实现类似QQ安装向导的视觉与交互效果。压缩包约69.53MB共206个文件类型涵盖45个h头文件、41个cpp源文件以及sln/vcxproj工程文件、png界面素材、obj编译产物、nsi/nsh安装脚本与7z/zip封装包等覆盖从源码到构建配置的完整链路。项目目录包含3party第三方库、plugin NSIS插件、samples示例与include头文件UIRender.cpp、UIList.cpp等源码则展示了Duilib渲染与列表控件的具体实现。已有1869人学习下载适合具备一定C与Windows编程基础、希望提升安装程序品质的开发者可从中获取界面设计思路、脚本编写方法和项目落地经验。1. 这个项目到底解决什么问题一个能用在生产环境的自绘安装包双击安装包弹出来的是一个带渐变背景、圆角窗口、可以拖拽、还能实时显示安装进度的自绘界面而不是 Windows 默认那种灰底白框的标准向导——这是很多人对 QQ 安装包的直观印象。这套 NSISDuilib 项目要解决的就是这个用 NSIS 干文件复制、注册表、卸载器这些“脏活”用 Duilib 把界面画得完全不像安装器。适合 Windows 桌面软件作者尤其是不甘心让用户对着默认向导点“下一步”的产品。从头拆到尾你能看到一条完整链路NSIS 脚本调度页面、Duilib 插件渲染皮肤、两边通过插件 API 互传数据。看懂之后你可以直接把它改成自己产品的品牌安装包。2. 技术栈与架构NSIS 插件机制和 Duilib 渲染层是怎么握手通信的2.1 NSIS 的定位安装逻辑、页面调度、卸载流程的“总导演”NSISNullsoft Scriptable Install System是一个脚本驱动的 Windows 安装包制作工具。脚本文件以.nsi结尾经过makensis编译后生成一个独立的Setup.exe。在这个项目里NSIS 管的是三件事页面调度用PageEx custom定义自定义向导页控制用户先看到什么、后看到什么安装动作把文件从安装包释放到目标目录、写注册表、创建快捷方式、写卸载信息生命周期处理安装中取消、安装失败回滚、卸载器生成等完整流程。默认情况下NSIS 的 MUI2 页面套件生成的是标准 Windows 控件界面长得很“安装向导”。要做仿 QQ 那种自绘界面就得绕开 MUI2 的默认页面呈现把 Duilib 塞进 NSIS 的页面框架里。这个切入点就是PageEx 自定义页面——NSIS 允许你在某个页面创建时执行一段脚本而这段脚本可以调用外部插件。临时文件目录$PLUGINSDIR在这个架构里很关键。NSIS 会把插件 DLL 释放到这个目录再加载所以页面里的资源文件、皮肤 XML、字体文件都可以一并打包运行时临时释放安装结束自动清理。2.2 Duilib 的定位DirectUI 渲染界面是一张画布Duilib 是一个基于 DirectUI 思想的 C 界面库。DirectUI 和传统 Win32 控件体系的本质区别是界面上所有控件不是一个个独立的 HWND 窗口而是由同一个窗口里的绘图引擎“画”出来的。这样一个对话框只需要一个顶层的真实 HWND其余按钮、编辑框、进度条都是窗口内部绘制出来的“虚拟控件”。Duilib 的两个核心概念你必须知道XML 描述布局一个窗口对应一个 XML 文件里面用VerticalLayout、HorizontalLayout、Button、Text这类标签描述控件树。改界面布局基本只改 XML不需要重编 C 代码PaintManager 统一管理CPaintManagerUI负责所有子控件的消息分发、绘制调度、控件查找。外部代码通过FindControl拿到控件对象再调用SetText、SetPos之类的方法去操作界面。当 Duilib 作为 NSIS 插件运行时它不做独立的进程而是以 DLL 形式注入到 NSIS 安装进程里窗口挂在 NSIS 向导对话框的句柄下面。很多项目会另起一个独立的 Duilib 窗口展示“安装完成”页面我这次拆的项目用的是子窗口嵌入模式稳定性更高页面切换也更自然。2.3 通信机制插件 DLL、栈数据回传、窗口消息三套管道NSIS 和 Duilib 之间要传数据最常见的是走NSIS 插件 DLL。NSIS 插件就是一个导出特定签名函数的 C DLL编译后丢进 NSIS 的 Plugins 目录脚本里用插件名::函数名直接调用。先看插件导出的标准签名// nsduilib.cpp —— 一个标准的 NSIS 插件导出函数 #include windows.h #include UIlib.h using namespace DuiLib; static CPaintManagerUI s_paint_manager; // 全局 PaintManager持有整个界面 static HWND s_hwnd_host; // Duilib 子窗口句柄 static HWND s_hwnd_nsis; // NSIS 传给插件的宿主窗口句柄 // NSIS 3.x 插件标准导出签名 extern C void __declspec(dllexport) InitSkin( HWND hwndParent, // 宿主窗 p a hrefhttps://download.csdn.net/download/china_jeffery/10214582 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p