Blog Details

安装包(Installer Package)是一种用于安装和卸载软件程序的文件,通常包含了软件程序的所有组件、依赖库、配置信息等等。在 Windows 系统中,安装包通常是以.msi、.exe、.zip、.rar 等格式出现。 以下是几种常见的安装包格式:

关于安装包(Installer Package)的规范、标准和技术文档,通常可以参考以下几个来源:

1. 行业标准和规范

ISO/IEC 14776: 这是一个涉及存储设备安装包的标准,但也有助于理解软件安装包的规范。

W3C (World Wide Web Consortium): 尽管它更多地关注Web标准,但它也涉及Web应用安装和部署方面的规范。

Microsoft Windows Installer (MSI) 规范: Microsoft 提供了一个详细的安装包规范,适用于 Windows 平台,详细描述了如何创建和管理 Windows 安装包(MSI文件)。

2. 常见的技术文档

NSIS (Nullsoft Scriptable Install System): 这是一个常见的安装包制作工具,其文档包含如何使用NSIS脚本创建安装包的技术细节。它的官方文档详细介绍了安装程序的结构、功能和定制化选项。

NSIS 官方文档

WiX Toolset (Windows Installer XML): WiX是一个用于创建Windows安装包的强大工具集,其官方文档提供了创建MSI包和安装程序的详细步骤。

WiX Toolset官方文档

Inno Setup: 另一个流行的安装包创建工具,其文档为开发者提供了如何编写安装脚本的指南。

Inno Setup官方文档

3. 平台特定标准

Apple macOS - PackageMaker / Xcode: macOS系统的安装包标准可以通过Apple的开发者文档了解,特别是涉及到.pkg格式的安装包。

Apple 开发者文档

Linux的包管理器标准:Linux的安装包格式通常为 .deb 或 .rpm,相关文档可以从各大Linux发行版的官方文档获取。例如,Ubuntu和Debian的APT包管理系统。

Debian包管理文档

4. 最佳实践

安装包设计的最佳实践:设计和创建安装包时,通常需要遵循一些最佳实践,以确保安装过程顺利,并避免潜在的用户体验问题。常见的最佳实践包括:

清晰的版本控制和更新机制。

提供回滚功能,以便在安装失败时恢复系统状态。

兼容性考虑,确保安装包可以在目标操作系统的不同版本上运行。

简洁的用户界面,避免冗余的步骤。

这些文档和资源可以为你提供深入的技术支持,帮助你理解如何规范地创建、管理和分发安装包。如果你正在开发特定平台的安装包,最好查阅该平台的具体要求和工具支持。

安装包(Installer Package) 的发展,可以从历史的角度追溯安装包的演变过程,了解各个阶段的技术变革与重要工具的诞生。下面我将使用时间线模型逐步分析安装包的发展。

1. 初期阶段:手动安装与压缩文件(1990s 初期)

时间:1990年代初

技术背景:在最早的计算机时代,软件的安装大多依靠用户手动复制文件到指定目录。没有复杂的安装过程,软件通常是压缩文件格式(如 .zip 或 .tar 文件)。

特点:

软件通过磁盘或者简单的文件压缩包进行分发。

用户需要手动解压和配置系统设置,没有自动化流程。

操作系统缺乏完整的安装管理工具。

2. Windows 早期安装工具(1990s 中期)

时间:1990年代中期

技术背景:随着 Windows 操作系统的普及,软件开发者开始研发专门的安装程序,以简化软件的安装过程。

重要事件:

Windows Installer(MSI 格式)首次推出,提供了一种更加结构化的安装方式。

使用 InstallShield 等工具,开发者能够生成 .exe 格式的安装包。

安装程序开始引入“安装向导”概念,用户只需点击“下一步”即可完成安装。

3. 安装程序标准化与扩展(2000s 初期)

时间:2000年代初期

技术背景:随着软件规模的增大,安装程序逐渐从简单的文件复制工具,发展成更加复杂的应用安装工具,能够处理依赖关系、卸载程序等。

重要事件:

Inno Setup 和 NSIS(Nullsoft Scriptable Install System)等轻量级、免费且开源的打包工具开始流行。

安装程序支持更多自定义功能,如注册表修改、快捷方式创建、动态组件选择等。

WiX Toolset 推出,支持 Windows Installer 的更高级自定义,成为企业级应用的重要工具。

4. 跨平台应用的打包工具(2000s 中期)

时间:2000年代中期

技术背景:随着开源软件和跨平台应用的普及,开发者开始关注如何在不同操作系统上发布相同的应用程序,跨平台安装包开始出现。

重要事件:

JAR(Java Archive) 文件成为 Java 应用的标准安装包格式,可以在多个平台(如 Windows、Linux、macOS)上运行。

RPM 和 DEB 等 Linux 包管理工具开始得到广泛使用,用于安装 Linux 下的软件。

Apple's PackageMaker 推出,用于 macOS 上创建 .pkg 安装包。

DMG(Disk Image)格式成为 macOS 系统上常见的分发和安装格式。

5. 集成化工具的崛起(2010s 初期)

时间:2010年代初期

技术背景:随着互联网的普及和软件安装的需求不断增加,安装包工具变得更加智能,支持自动更新、集成化安装等新功能。

重要事件:

InstallAnywhere 成为跨平台工具的代表,支持多平台(Windows、Linux、macOS)的打包。

Electron-builder 在开发基于 Electron 的桌面应用时成为主流工具,它支持自动化打包并生成多个平台(Windows、macOS、Linux)上的安装包。

Snap 和 Flatpak 等工具的兴起,旨在解决 Linux 各发行版间软件兼容性的问题,支持跨平台的统一打包标准。

6. 现代软件打包与自动化(2010s 后期至今)

时间:2010年代后期至今

技术背景:随着云计算、DevOps、持续集成(CI)等概念的普及,软件的安装包和分发方式进一步演变,逐渐形成自动化、快速部署的趋势。

重要事件:

Docker 容器化技术的兴起,彻底改变了软件的安装和部署方式,通过将应用程序及其依赖项打包成容器,使得应用能够在任何平台上运行。

AppImage 成为 Linux 系统上一种简单的跨平台打包方式,允许开发者将应用程序及其所有依赖项打包成一个单一文件进行分发。

Snapcraft 和 Flatpak 提供了更加标准化的 Linux 应用分发方式,支持一次打包,多个 Linux 发行版使用。

通过时间线模型,我们可以看到安装包的演变过程是由简单到复杂、由单一平台到跨平台、由手动安装到自动化安装的过程。每个阶段的技术革新都在满足用户对于安装流程简化、软件兼容性增强和自动化更新的需求。现代的安装包不仅仅局限于传统的 Windows 安装程序,而是扩展到了 Linux、macOS 以及容器化应用等多个领域。

打包安装包(Installer Package)是将应用程序或软件打包成易于分发和安装的形式的工具。通常这些工具不仅能创建安装包,还能生成安装过程中需要的安装脚本、许可证、组件等。根据不同的操作系统和应用需求,常见的打包工具有很多。以下是几种主流的打包工具,它们可以用于不同平台上的软件发布和安装包创建。

1. Windows平台的打包工具

Windows系统有许多常用的打包工具,它们主要生成 .exe、.msi 或 .zip 格式的安装包。

a. Inno Setup

描述:Inno Setup 是一款流行的免费 Windows 安装程序创建工具,支持各种自定义功能,比如安装时选择安装路径、组件等。

特点:

免费且开源。

支持生成压缩文件和安装程序。

可以自定义安装流程,包括许可协议、组件选择、创建桌面快捷方式等。

支持多语言界面。

官网:Inno Setup

b. NSIS (Nullsoft Scriptable Install System)

描述:NSIS 是另一款开源的 Windows 安装包工具,用户通过脚本自定义安装过程。

特点:

支持多种安装功能,包括文件复制、创建快捷方式、注册表设置等。

可以制作压缩安装包,适合大多数程序。

支持插件扩展,功能非常强大。

官网:NSIS

c. WiX Toolset

描述:WiX Toolset 是一个开源的 Windows 安装程序开发工具集,它使用 XML 文件来定义安装过程,生成 .msi 文件。

特点:

强大的 XML 脚本支持,适合复杂的企业级应用。

可以生成符合 Windows Installer 标准的 .msi 安装包。

支持集成到 Visual Studio 中。

官网:WiX Toolset

d. InstallShield

描述:InstallShield 是一款商业的 Windows 安装包制作工具,支持生成专业的 .exe 或 .msi 文件。

特点:

支持创建复杂的多组件安装包。

提供图形化界面,可以自定义安装过程,易于上手。

提供自动更新、卸载等功能。

官网:InstallShield

2. macOS平台的打包工具

macOS 使用 .pkg 或 .dmg 格式的安装包。

a. PackageMaker

描述:PackageMaker 是 macOS 上的一款工具,用于生成 .pkg 安装包。

特点:

简单的图形化界面,适合初学者。

支持创建自定义安装过程,可以配置安装的目录和目标文件。

官网:Apple 官方开发工具,已不再更新,但仍可在开发者社区找到使用资料。

b. macOS Installer (pkgbuild & productbuild)

描述:这是一组由 Apple 提供的命令行工具,用于生成 .pkg 安装包。

特点:

适合开发人员进行自动化打包。

支持创建简单到复杂的安装过程。

可以结合 notarization(苹果的文件认证)确保安装包的安全性。

官网:Apple Developer

c. DMG Canvas

描述:DMG Canvas 是一款 macOS 应用程序,可以帮助开发人员创建 .dmg 镜像文件,它通常用于打包和分发 macOS 应用。

特点:

支持自定义 .dmg 文件的外观,包括背景、文件夹图标等。

创建的 .dmg 文件可以通过拖放安装应用。

官网:DMG Canvas

3. Linux平台的打包工具

在 Linux 系统中,应用程序打包通常使用 .deb 或 .rpm 包格式,适用于不同的 Linux 发行版(Debian、Ubuntu、Red Hat、CentOS 等)。

a. dpkg & debhelper (for .deb packages)

描述:dpkg 是 Debian 系统上的基础安装工具,debhelper 是一组用于创建 .deb 包的工具。

特点:

强大的脚本支持,可以灵活地处理安装、卸载和升级。

广泛用于 Ubuntu 和 Debian 系统。

官网:Debian Packaging

b. RPM Package Manager (RPM)

描述:RPM 是一种用于 Red Hat 系列 Linux 操作系统的打包系统,包括 Fedora、CentOS 等。

特点:

支持创建和管理 .rpm 安装包。

提供包的依赖性管理和版本控制功能。

官网:RPM.org

c. Flatpak & Snap (跨平台)

描述:Flatpak 和 Snap 是现代化的 Linux 应用包管理工具,旨在简化不同 Linux 发行版间的兼容性问题。

特点:

Flatpak:用于分发和打包应用程序,可以跨不同 Linux 发行版使用。

Snap:由 Canonical 推出,可以为所有支持 Snap 的 Linux 系统提供跨平台应用。

官网:

Flatpak

Snapcraft

4. 跨平台工具

这些工具可以跨不同平台生成安装包,适用于不同操作系统。

a. Electron-builder

描述:如果你开发的是基于 Electron 的桌面应用,electron-builder 是一个非常流行的打包工具,支持生成 Windows、macOS 和 Linux 系统的安装包。

特点:

支持多平台打包,简化了跨平台应用的发布。

支持自动化更新和签名。

官网:Electron-builder

b. InstallAnywhere

描述:InstallAnywhere 是一个商业软件工具,支持多平台安装包的生成,包括 Windows、macOS 和 Linux。

特点:

支持创建跨平台的安装程序。

提供强大的界面设计和自定义选项。

官网:InstallAnywhere

c. Docker

描述:尽管 Docker 不是一个传统意义上的安装包工具,但它通过容器化技术,可以让应用在不同环境下运行而不需要传统的安装步骤。

特点:

支持跨平台运行(Windows、macOS、Linux)。

自动化部署,适合现代 DevOps 和 CI/CD 工作流。

官网:Docker

不同操作系统和需求下的打包工具各有不同,选择时应考虑目标平台、应用的复杂性、以及是否需要跨平台支持。对于 Windows 系统,常见的工具有 Inno Setup、NSIS 和 InstallShield;macOS 上的工具包括 PackageMaker 和 DMG Canvas;Linux 系统则有 dpkg、rpm 和 snap 等。而对于跨平台应用,Electron-builder 是一个非常流行的选择。

Windows Installer Package(安装包)规范、标准、技术文档完整演进史

总览主线

Windows 安装包标准分为三大代际:

前置时代(1990–1999):Setup API + 自定义 EXE 安装程序,无统一规范;

MSI 标准时代(1999–2017):Windows Installer(MSI)数据库包,企业级部署官方标准,分 v1.0~v5.0 五次规范大升级;

现代化容器包时代(2017 至今):AppX → MSIX,基于 OPC/ZIP 容器,替代 MSI 成为下一代官方标准。

配套技术文档同步随版本迭代,从离线 MSDN 光盘文档,迁移至在线 Microsoft Learn 动态规范库。

第一阶段:无统一标准前置期(1990–1999,Setup API + 自定义 EXE)

1. 行业现状与原始规范

Windows 3.x/95/NT4 无系统统一安装引擎,厂商使用自定义 EXE 安装程序(早期 InstallShield、WISE Installer),无全局标准:

无统一事务回滚、组件依赖、修复卸载规范;

各厂商注册表 / 文件 / 快捷方式写入逻辑互不兼容,产生 DLL Hell、卸载残留、升级崩溃;

仅底层提供 Setup API 零散 C 函数,无完整安装包格式定义。

2. 早期技术文档形态

文档载体:纸质 SDK 手册、MSDN 离线光盘,仅零散 API 参考,无完整安装包规范;

无强制合规标准,微软仅提供可选「Windows Logo 软件认证」松散指引,无强制安装包格式约束。

3. 痛点催生标准化需求

企业域批量部署、软件版本管控、系统完整性校验完全缺失,微软启动代号Darwin的 Windows Installer 标准化项目,目标推出统一二进制数据库包规范。

第二阶段:MSI(Windows Installer)标准成熟期(1999–2017,核心工业标准)

MSI 基于OLE 结构化存储复合文档,采用关系型数据库表定义全量安装逻辑,配套完整扩展格式(.mst 转换、.msm 合并模块、.pcp 补丁工程),规范与文档分 5 个大版本迭代。

2.1 Windows Installer 1.x(1999,Win2000/Office2000,初代规范)

标准规范核心定义

正式定义.msi主包格式:复合存储内嵌数据库表(File、Component、Registry、Service 等核心表);

首创组件化安装模型:Component 主键唯一标识资源,解决 DLL Hell;

基础事务回滚、修复、广告安装、组策略 AD 批量部署能力;

配套辅助格式:.msm合并模块、.mst转换补丁。

技术文档演进

首发《Windows Installer SDK Reference》离线 MSDN 文档,分「数据库表规范、API、msiexec 命令行、示例工程」四大章节;

规范为静态离线文档,更新周期跟随 Windows Service Pack,无在线实时修订;

合规标准:初代 Windows Logo 认证强制要求使用 MSI 包,淘汰自定义 EXE 安装程序。

核心短板

无多补丁事务、无 64 位原生支持、无 SHA 数字签名校验、升级逻辑简陋。

2.2 Windows Installer 2.0(2001,Windows XP,规范大规模补齐)

标准新增规范

原生 64 位系统架构支持,定义 Wow6432Node 注册表重定向标准;

完整 Minor/Major 版本升级规范,产品代码 / 升级代码 GUID 标准化规则;

自定义操作 CustomAction 完整安全约束规范,限制高权限恶意脚本执行;

msiexec全静默安装、日志输出标准化参数集定型。

文档升级

SDK 文档新增最佳实践白皮书,明确组件划分、注册表写入、权限配置强制规范(如 regini 配套 ACL 管控标准);

增加企业批量部署章节,适配 AD 域、组策略分发场景;

提供 InstallShield/WiX 两套工具链标准开发示例。

2.3 Windows Installer 3.0(2004,XP SP2,补丁体系重构里程碑)

标准颠覆性更新

多补丁单事务安装:自动排序补丁、统一回滚、无需分次重启;

增量小更新(Small Update)规范,仅传输变更文件,大幅缩小补丁包体积;

.pcp补丁工程标准化,PATCHWIZ.DLL 工具纳入官方 SDK;

产品清单 API:支持枚举本机所有 MSI 安装产品、组件、补丁,为运维巡检提供标准接口。

文档变化

新增《Patch Creation Standard》独立规范文档,定义补丁二进制差分算法、版本匹配规则;

区分「基础包开发」「补丁开发」「企业批量运维」三大独立文档分支;

微软发布官方基线校验脚本,用于检测 MSI 包是否符合 Logo 认证规范。

2.4 Windows Installer 4.x(4.0/4.5,2006–2009,Vista/Server2008 安全加固)

标准安全规范强化

数字签名强制规范:MSI/MST/MSM 支持 SHA256 签名,拦截未签名恶意安装包;

用户账户 UAC 权限分层安装标准:区分每用户 (Per-User)/ 每机器 (Per-Machine) 安装上下文;

多语言本地化包规范,支持单一 MSI 内嵌多语言资源;

4.5 新增多包链式引导(Bootstrapper)规范,支持前置依赖(.NET/VC++ 运行库)自动检测安装。

文档迭代

SDK 文档大幅扩充安全章节,明确自定义操作权限沙箱、ACL 注册表写入约束(与 regini 权限规范联动);

新增 Server Core 无图形服务器适配规范,仅依赖 msiexec 命令行运维;

官方推出 WiX(Windows Installer XML)开源工具链配套 XML 规范文档,与商业 InstallShield 并行标准化。

2.5 Windows Installer 5.0(2009 至今,Win7/Win10/11,MSI 终版规范)

最终定型核心标准(至今兼容)

支持多重安全隔离:AppLocker 应用白名单、HVCI 内存完整性校验兼容规则;

服务安装完整安全描述符规范,安装时同步配置服务 ACL 权限;

虚拟注册表 / 文件系统兼容层,为后续 MSIX 容器化铺路;

完全兼容 Win10/11 多会话、多用户、容器环境。

技术文档重大转型

线下 MSDN 光盘文档停止更新,全量迁移至Microsoft Learn 在线动态文档库;

文档分层:

基础规范:数据库表完整字段约束、数据类型、主键外键规则;

运维规范:msiexec 全参数、组策略批量部署、离线 hive 配套 regini 加固流程;

安全规范:HVCI/CFA/Netlogon 配套 MSI 安装基线约束;

明确长期兼容承诺:所有 v5.0 规范向下兼容 v2.0 及以上 MSI 包,不再对 MSI 格式做破坏性修改,转向 MSIX 新标准。

MSI 配套工具规范同步演进

InstallShield:商业工业标准,全程跟随 MSI 版本更新图形化规范校验;

WiX Toolset(微软官方开源):XML 声明式.wxs 标准,candle/light/burn 工具链规范写入官方 SDK 文档,成为企业 DevOps 标准;

辅助工具规范:regini、msizap、orca.exe(MSI 数据库编辑器)配套操作规范纳入运维文档。

第三阶段:现代化容器包标准时代(2017 至今,AppX → MSIX,下一代官方标准)

3.1 前置:AppX 雏形规范(Win8/Win10 1703,2012–2017)

规范基础定义

基于 OPC 开放打包约定(ZIP 压缩容器),用于 UWP 应用,隔离文件 / 注册表虚拟化:

单一.appx容器,内嵌AppxManifest.xml元数据清单;

全隔离虚拟化层:所有注册表、系统文件写入重定向至包私有目录,卸载无残留;

支持 Microsoft Store 授权、增量自动更新;

局限:仅原生 UWP,不兼容传统 Win32 桌面程序,无法替代 MSI。

3.2 MSIX 统一标准(Win10 1809 正式落地,2018 至今,MSI 继任者)

顶层设计规范(融合 MSI/AppX/App-V/ClickOnce 全部优势)

容器底层标准:OPC ZIP 结构化容器,强哈希完整性校验、强制数字签名;

清单规范:Package.appxmanifest统一定义安装资源、权限、文件 / 注册表虚拟化、服务、协议关联;

双向兼容规范:

支持传统 Win32 桌面程序(Desktop Bridge),可将 MSI 包一键转换为 MSIX;

继承 MSI 企业部署能力:AD 组策略、离线批量分发、增量补丁;

安全强制规范:

默认隔离虚拟化,禁止直接写入系统真实注册表(替代 MSI 无约束写入缺陷);

支持完全信任 (Full Trust) 与受限沙箱双模式,联动 HVCI/VBS 硬件安全体系;

扩展格式:MSIX Bundle(多架构合并包)、MSIX Mod(动态附加组件包)、MSIX Bootstrapper(依赖引导包)。

技术文档演进(现代统一文档体系)

独立《MSIX Packaging Specification》在线标准文档,完全独立于旧 MSI 文档;

提供完整迁移规范:MSI→MSIX 转换工具(MSIX Packaging Tool)操作标准、基线迁移校验规则;

整合零信任、Secured-core PC、容器虚拟化全套安全规范,与 regini、Windows Installer 文档互通引用;

DevOps 配套规范:Azure DevOps 自动打包、签名、批量分发标准化流程。

3.3 2022–2026 规范持续完善(Win11 22H2/24H2)

MSIX 支持嵌套虚拟化、Azure 虚拟桌面持久化规范;

逐步弱化 MSI 新特性开发,官方文档明确MSI 仅维持兼容,新开发推荐 MSIX;

新增国产 ARM64 架构完整打包规范,统一 x86/x64/ARM64 多架构分发标准。

技术文档整体演进对比总表

阶段

文档载体

更新模式

规范覆盖范围

核心特征

前置 EXE 时代 (1990–1999)

MSDN 离线光盘、纸质手册

随 SDK 版本静态更新

Setup API 零散函数,无完整包规范

无统一强制标准,厂商自定义实现

MSI 1.x–3.x(1999–2006)

MSDN 离线光盘

季度 / SP 大版本更新

MSI 数据库表、API、补丁、企业部署

静态离线文档,分层 SDK 参考

MSI 4.x–5.x(2006–2017)

离线 MSDN + 早期在线 MSDN

在线月度动态修订

新增安全、UAC、64 位、WiX XML 规范

线上线下双渠道,新增安全基线章节

MSIX 现代期 (2017 至今)

Microsoft Learn 纯在线文档

实时动态更新、版本区分

MSIX 容器、虚拟化、MSI 迁移、云 / 容器部署

全在线可检索,联动 Windows 全套安全组件文档

四大维度演进核心趋势总结

1. 包存储架构演进

复合存储数据库 (MSI) → OPC/ZIP 容器 (MSIX)

MSI:内嵌关系型数据库,读写复杂、易产生系统残留、无强制隔离;

MSIX:标准化压缩容器,内置虚拟化重定向,卸载 100% 清理无残留、完整性哈希校验。

2. 安全规范演进

无签名松散权限 → 强制签名 + 容器隔离 + 虚拟化防护

MSI 早期:可无签名安装,任意写入系统注册表 / 服务,易被恶意劫持;

MSIX 现代标准:强制数字签名,默认虚拟化拦截直接系统写入,联动 HVCI 内存完整性校验。

3. 文档体系演进

静态离线 SDK 手册 → 动态在线一体化知识库

旧 MSDN 文档割裂、更新滞后;现代 Microsoft Learn 将 MSI/MSIX/regini/VBS/HVCI/ 域 Netlogon 等运维、安全规范互通引用,形成完整 Windows 基线文档链路。

4. 部署生态演进

仅本地 / AD 域批量部署 → 本地 + 域 + 云 + 容器 + 虚拟桌面全场景覆盖

MSI 仅支持物理终端域分发;MSIX 原生适配云主机、Windows 容器、Azure 虚拟桌面、Microsoft Store 多渠道统一分发。

规范代际选型落地建议(2026 现行标准)

存量老旧政企系统:维持 MSI v5.0 规范,配套 WiX/Advanced Installer 开发,使用 regini 同步固化注册表 ACL 权限加固;

全新 Win10/11 桌面 / 容器项目:强制采用 MSIX 官方新标准,遵循 Microsoft Learn MSIX 打包规范;

工控 / Server Core 无图形服务器:MSI 仍为兼容最优解,严格遵循 Windows Installer 5.0 安全基线文档;

DevOps 自动化流水线:优先 WiX(MSI)/MSIX Packaging Tool(MSIX)官方开源工具链,完全贴合微软标准化文档约束。

安装包(MSI + MSIX)完整底层原理

分为两大主流格式底层架构:Windows Installer MSI(OLE 复合存储数据库包)、现代 MSIX(OPC/ZIP 容器虚拟化包),分别拆解存储、内核执行、事务、注册表 / 文件重定向、安全校验底层逻辑。

一、前置通用底层依赖底座

所有 Windows 安装程序最终依赖两套系统原生内核组件:

msiexec.exe + msi.dll(MSI 专属安装引擎,用户态 + 内核 CM 配置管理器联动)

PackageManager.dll / AppxDeployment.dll(MSIX 容器部署引擎,Win10 1809+)

公共底层支撑:

NTFS 文件系统事务日志(安装回滚底层载体)

ntoskrnl.exe CM 配置管理器(注册表写入、Hive 持久化)

VBS/HVCI 内存完整性校验(安装包签名、二进制可信校验)

SetupAPI.dll(驱动、服务注册底层 API)

第一部分:MSI(Windows Installer Package)底层完整原理

1. 存储底层:OLE 复合二进制存储(Structured Storage)

1.1 文件结构底层

.msi 不是普通文件,是OLE 复合文档容器,类似嵌入式小型文件系统:

容器内包含多个「存储流 Stream」与「目录 Storage」;

核心流:_Tables 内嵌Jet 嵌入式关系型数据库(轻量 Access 引擎),所有安装逻辑全部存储在数据库数据表中;

附属流:二进制文件流(待安装 dll/exe)、转换表流(.mst 内嵌)、数字签名流、补丁元数据流。

核心数据库关键表底层作用

数据表

底层内核行为

Component

最小安装原子单元,全局唯一 ComponentID GUID,用于系统组件引用计数(解决 DLL Hell)

File

记录文件哈希、源流偏移、目标路径、版本、权限、替换规则

Registry

预定义注册表路径、键名、类型、值;msi.dll 调用 Advapi32 写入 CM 内核

ServiceInstall / ServiceControl

服务二进制路径、启动类型、安全 SD 描述符,写入 HKLM\System\Services hive

CustomAction

自定义脚本 / EXE 入口,UAC 沙箱权限隔离,内核拦截高危无签名操作

InstallExecuteSequence

安装执行时序链表,定义内核事务执行先后顺序

1.2 读取底层流程

msiexec.exe 加载msi.dll,调用 OLE32.dll 打开复合存储;

挂载内置 Jet 数据库,加载全部数据表至进程内存;

预校验数字签名(Win8+ SHA256),HVCI 校验 msi.dll 自身未被篡改;

解析 Sequence 执行序列,生成事务执行计划。

2. 执行核心底层:两阶段事务模型(原子回滚底层实现)

MSI 最核心底层特性:Install / Commit / Rollback 三段式内核事务,依托 NTFS 事务日志 + 内存快照实现原子安装。

阶段 1:安装执行阶段(Execute)

遍历 File 表,复制文件至目标路径,原始源文件备份至系统隐藏回滚目录C:\Config.Msi;

遍历 Registry 表,缓存原有注册表键值至事务快照;

注册服务、快捷方式、COM 组件,所有变更仅写入内存 CM 缓存,不刷盘;

所有操作写入 NTFS 事务日志,标记未提交状态。

阶段 2:提交阶段(Commit)

全部操作无报错时,触发内核 CM 将内存注册表缓存刷入磁盘 hive,删除 Config.Msi 回滚备份,事务标记完成。

阶段 3:回滚阶段(Rollback,报错 / 手动取消触发)

内核读取事务日志,从 Config.Msi 恢复原始文件;

CM 配置管理器恢复注册表快照,删除所有新增项 / 值;

清空服务注册、COM 注册,系统完全退回安装前状态。

3. 注册表 / 权限底层联动(与 regini.exe 底层互通)

MSI Registry 表仅能写入键值,原生不支持配置项 ACL 权限,底层局限:

MSI 写入注册表时,CM 内核默认分配系统继承 ACL,无法自定义安全描述符;

企业加固场景必须在 CustomAction 中调用regini.exe,同步写入 ACL 权限,形成「MSI 写入配置 + regini 锁定权限」标准流水线。

分层安装上下文底层区分

Per-Machine(每机器):写入 HKLM 全局分支,必须管理员令牌,内核校验 UAC 提升;

Per-User(每用户):仅写入 HKCU,普通用户无权限提升,不修改系统 hive。

4. 补丁(MSP)底层差分原理

.msp 补丁包同样是 OLE 复合存储:

存储新旧文件二进制差分块(Delta 差分),而非完整文件;

数据库存储版本匹配规则、增量注册表变更;

内核事务合并:多 MSP 补丁合并为单事务,统一回滚、统一提交,无需多次重启。

5. 底层安全拦截链路(HVCI/VBS 联动)

msi.dll 加载 MSI 包前,内核校验包数字签名;无签名包默认拦截(Win10 20H2+);

CustomAction 自定义操作执行前,VTL1 skci.dll 校验自定义 EXE / 脚本 WHQL 签名;未签名二进制直接终止安装;

写入 VBS/HVCI 相关安全注册表路径时,CM 转发写入请求至 HVCI 校验,未授权安装包无法篡改内存完整性开关。

第二部分:MSIX(现代容器安装包)底层完整原理

1. 存储底层:OPC 开放打包约定(标准化 ZIP 容器)

1.1 容器底层结构

.msix 基于工业标准 OPC UA Open Packaging Convention,本质是带结构化元数据的 ZIP 压缩包,无私有复合存储:

固定根文件:Package.appxmanifest XML 清单(全部安装逻辑、权限、虚拟化规则定义);

目录规范:\Files\ 存放程序二进制,\Registry.dat 虚拟化注册表离线 hive;

安全流:[Content_Types].xml 类型标记 + 嵌入式 PKCS#7 数字签名(强制 SHA256,不可关闭);

扩展包:MSIX Bundle(多架构合并 ZIP)、MSIX Mod(增量附加容器)。

1.2 与 MSI 存储底层核心差异

MSI:私有 OLE 复合存储 + Jet 私有数据库,厂商私有格式;

MSIX:公开标准化 OPC/ZIP,任何标准解压工具可解析基础结构,元数据为可读 XML。

2. 核心底层机制:文件 / 注册表虚拟化重定向(MSIX 独有,彻底解决残留)

2.1 虚拟化重定向内核链路(关键底层隔离)

MSIX 默认运行在轻量容器隔离层,所有程序读写系统路径会被内核文件系统过滤器、CM 注册表过滤器透明重定向:

文件重定向链路

plaintext

应用调用 CreateFile(C:\Program Files\App)

↓ 内核MsixFlt.sys过滤驱动拦截

↓ 透明转发至 %ProgramData%\WindowsApps\包私有隔离目录

注册表重定向链路

plaintext

应用写入 HKLM\Software\App

↓ CM内核注册表过滤器拦截

↓ 写入容器私有离线 hive Registry.dat

底层价值

程序无法直接篡改真实系统注册表、系统目录文件,规避 MSI 无隔离带来的恶意篡改风险;

卸载时直接删除整个容器私有目录 + 私有 hive,100% 无系统残留,MSI 无法做到彻底清理。

2.2 完全信任模式(Full Trust)底层逻辑

如需传统 Win32 程序直接读写真实系统资源(兼容旧软件),清单标记AllowFullTrust:

容器隔离层弱化,关闭文件 / 注册表重定向;

内核强制校验安装包 EV 代码签名,Secured-core PC 下联动 TPM/Pluton 校验信任链;

等价 MSI 全局安装,但保留 MSIX 签名、增量更新能力。

3. 部署执行底层:AppxDeployment.dll 无事务、原子容器替换

MSIX 抛弃 MSI 复杂三段式事务,采用容器原子替换底层模型:

安装:解压 OPC 容器至 WindowsApps 私有目录,内核生成容器唯一隔离 SID,挂载虚拟化过滤驱动;

更新:下载差分 MSIX Mod 增量包,内核原子替换容器内变更文件,旧版本容器保留用于回滚;

卸载:直接删除整个容器私有目录、私有 Registry.dat hive,无残留;

无 Config.Msi 回滚缓存,依靠完整旧容器副本实现回滚,NTFS 事务仅用于容器文件写入。

4. 注册表底层原理(与 MSI/regini 对比)

MSIX 私有Registry.dat是标准 hive 二进制文件,仅容器内进程可见,系统全局 CM 无法读取;

如需修改真实 HKLM 系统注册表,仅 FullTrust 模式允许,且必须在Package.appxmanifest提前声明权限;

原生不支持 ACL 自定义,如需加固系统注册表 ACL,仍需在启动脚本调用 regini.exe,和 MSI 加固链路一致。

5. 安全底层硬件信任链联动

强制 PKCS#7 签名:无有效数字签名的 MSIX 包,内核直接拒绝部署,无兼容旁路;

Secure Launch/TPM/Pluton 校验:Secured-core 主机部署时,TPM 校验 MSIX 包哈希,防止中间人篡改安装包;

HVCI 内存完整性:容器内所有二进制加载前,VTL1 skci.dll 校验 WHQL 签名,拦截未签名恶意 DLL 注入。

第三部分:MSI 与 MSIX 底层架构横向对比

底层维度

MSI (Windows Installer)

MSIX (现代容器包)

存储载体

私有 OLE 复合存储 + Jet 嵌入式数据库

标准化 OPC/ZIP 公开容器 + XML 清单

注册表模型

直接读写系统全局 hive,无隔离;卸载残留

虚拟化私有 hive,默认隔离;卸载彻底无残留

事务实现

NTFS 事务日志 + Config.Msi 文件备份三段式回滚

容器原子替换,保留旧完整包用于回滚

权限 ACL 原生支持

不支持,依赖 regini 后置加固

不支持,FullTrust 场景同样依赖 regini

隔离机制

无内核隔离层,程序直接访问系统资源

内核文件 / 注册表过滤驱动虚拟化隔离

签名策略

签名可选,可放行无签名包(旧系统)

强制 SHA256 PKCS#7 签名,无签名直接拦截

执行引擎

msixec.exe + msi.dll 用户态引擎

AppxDeployment.dll + MsixFlt.sys 内核过滤驱动

组件计数

ComponentID GUID 引用计数,解决 DLL Hell

容器全局隔离,多版本并行共存,无需计数

第四部分:底层通用交互链路示例(MSI 安装 HVCI 加固场景)

完整链路:MSI 写入安全注册表 → CustomAction 调用 regini 固化 ACL

plaintext

1. msixec.exe 加载msi.dll,解析Registry表

2. Advapi32调用NtSetValueKey写入HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters

3. MSI执行CustomAction,启动regini.exe传入加固脚本

4. regini.exe → Advapi32::SetSecurityInfo,为注册表项绑定[1 17] ACL(管理员/SYSTEM完全控制)

5. ntoskrnl CM内核缓存变更,安装无报错进入Commit阶段

6. CM将注册表缓存刷入SYSTEM hive,Config.Msi备份文件删除

7. HVCI VTL1层持续校验该注册表项,普通用户进程无法篡改防护开关

底层核心总结

MSI 底层核心短板

私有复合存储无隔离,直接操作系统全局注册表 / 文件,仅依靠软件事务做回滚;原生缺少注册表 ACL 管控,必须搭配 regini 完成安全基线锁死,存在卸载残留、无强制签名等安全短板。

MSIX 底层核心革新

基于公开 OPC 容器标准,新增内核虚拟化过滤驱动实现资源隔离,强制数字签名,原子容器替换彻底解决卸载残留;兼容传统 Win32 同时打通 TPM/VBS 硬件安全信任链,是 Windows 下一代标准化底层安装架构。

统一底层依赖共性

无论 MSI/MSIX,凡涉及系统注册表权限加固、内核安全基线锁定场景,底层均需调用 regini.exe 完成 ACL 绑定,二者底层共用同一套 Advapi32、ntoskrnl CM 注册表内核组件。

安装包(MSI / MSIX)规范、标准、配套技术文档 全应用场景拆解

总述

MSI(Windows Installer)与 MSIX 两套标准覆盖单机运维、域批量部署、云 / 容器、工控、DevOps、安全基线加固、离线镜像、软件分发全场景;配套规范、SDK 文档、最佳实践白皮书是所有场景落地的强制依据,两套格式场景各有侧重、存在明确选型边界。

一、MSI(Windows Installer Package)专属落地场景(依托 MSI v5.0 完整规范 + WiX/InstallShield 技术文档)

场景 1:政企 AD 域批量终端 / 服务器标准化分发(MSI 核心主场)

场景需求

数百 / 千台办公终端、文件 / 数据库服务器,通过组策略 GPO静默统一推送软件,要求版本管控、自动修复、统一卸载、无人工交互。

规范 / 文档支撑

遵循 MSI 5.0《Group Policy Deployment Standard》官方文档,严格定义 ProductCode/UpgradeCode GUID 升级规范;

采用 Per-Machine 全局安装上下文,写入 HKLM 系统注册表;配套 CustomAction 调用 regini.exe 同步锁定安全项 ACL;

配套 msiexec 静默参数规范文档:/i /qn /log 无界面安装、日志标准化留存用于 SIEM 审计。

落地优势

原生适配 AD 域权限模型,支持按 OU 分层推送;

内置组件引用计数,多软件共享 DLL 无 DLL Hell;

支持离线批量补丁 MSP 增量更新,无需全量重分发。

典型配套文档

《Windows Installer 企业批量部署白皮书》《MSP 补丁制作规范》

场景 2:老旧工控、Server Core 无图形服务器兼容部署

场景需求

工厂 Win2003/Win7 工控设备、机房 Server Core 最小化服务器,无商店、无图形界面、禁用 PowerShell 远程,仅保留 cmd 原生工具。

规范约束

遵循 MSI 4.5/5.0 Server Core 适配规范,禁止依赖 UWP、Store 组件;

仅使用msiexec.exe命令行完成安装 / 修复 / 卸载,所有逻辑内置 MSI 数据库,无需外部依赖;

驱动、服务注册遵循 SetupAPI 配套 MSI 服务安装标准文档,同步写入服务安全描述符。

不可替代理由

MSIX 依赖 AppX 部署引擎,部分精简 Server Core 镜像移除该组件;MSI 引擎 msiexec 为系统预装,全兼容老旧 Windows 系统。

场景 3:传统桌面大型业务软件(ERP、数据库、设计软件)开发打包

场景需求

大型软件含多运行库(VC++.NET)、系统服务、COM 组件、驱动、大量注册表业务配置,需要链式前置依赖检测、分层升级、完整修复能力。

标准落地方案

采用 WiX Toolset 开源标准(官方 XML.wxs 规范文档)或 InstallShield 商业规范;

使用 Bootstrapper 引导包规范,自动检测缺失运行库、静默前置安装;

遵循《MSI Component 划分最佳实践》文档拆分组件,区分核心程序、插件、驱动、用户配置;

注册表写入逻辑配套 regini 后置 ACL 加固流程文档,防止普通用户篡改授权参数。

场景 4:离线系统镜像封装(模板母盘、无盘工作站镜像)

场景需求

批量装机母盘、VM/Hyper-V 虚拟机模板、工控无盘镜像,离线 hive 环境预装软件,出厂即完成标准化配置。

规范适配流程

挂载离线 SYSTEM/NTUSER.DAT hive,使用 msiexec 离线安装模式;

遵循 MSI 离线部署规范,所有安装资源嵌入 MSI 包,不依赖网络;

配合 regini 离线 hive 权限加固规范,同步锁定软件注册表只读权限;

场景短板

MSI 直接写入真实系统 hive,镜像长期使用存在注册表残留,新镜像场景逐步被 MSIX 替代。

场景 5:软件补丁迭代、存量系统版本运维(MSP 增量补丁标准)

场景需求

政企存量软件每年多次小版本漏洞修复,仅下发变更文件,降低带宽消耗,支持批量回滚。

标准支撑

基于 Windows Installer 3.0 补丁规范,使用 PCP 补丁工程制作 MSP 差分包;

配套《Patch Creation Standard》文档,约束版本匹配规则、事务合并逻辑;

域环境可批量推送补丁,单事务完成多补丁安装、统一回滚。

场景 6:红蓝对抗 / 终端安全基线配套加固包

场景需求

等保三级合规,批量下发 HVCI、CFA、Netlogon、HTTP.sys 内核缓解配置,安装时同步锁定注册表 ACL 防篡改。

规范链路

MSI Registry 表写入安全键值 → CustomAction 调用 regini 执行权限锁定脚本,整套流程写入安全基线标准化文档;

MSI 支持域内一键推送加固策略,卸载时同步清理安全配置,统一管控终端防护开关。

二、MSIX(现代容器安装包)专属落地场景(依托 OPC 打包规范 + Microsoft Learn MSIX 标准文档)

场景 1:Microsoft Store / UWP + 现代 Win32 软件分发

场景需求

面向公众终端、商用软件商店分发,要求自动增量更新、卸载零残留、沙箱隔离、防篡改、跨 x86/x64/ARM64 架构。

规范约束

强制遵循 OPC 开放打包约定、Package.appxmanifest清单标准;

强制 PKCS#7 SHA256 数字签名规范,无签名包系统直接拦截;

默认开启文件 / 注册表虚拟化隔离,禁止直接篡改系统全局资源,降低恶意利用风险。

配套文档

《MSIX Packaging Specification》《Desktop Bridge Win32 迁移规范》

场景 2:Windows 容器、Azure 虚拟桌面(AVD)云桌面标准化部署

场景需求

容器镜像、云桌面多用户浮动会话,软件多版本并行共存、快速重置、无系统残留、隔离不同租户程序。

底层标准优势

容器原子替换机制,卸载直接删除私有隔离目录,不污染宿主系统;

原生支持多架构 Bundle 合并包,一套包适配云服务器不同 CPU 架构;

配套 MSIX Mod 增量组件规范,动态加载插件无需重分发完整软件;

文档支撑

《MSIX for Windows Containers》《AVD MSIX 应用挂载最佳实践》。

场景 3:零信任 Secured-core PC、高安全政企终端

场景需求

搭载 Pluton/TPM 安全芯片、开启 VBS/HVCI 内存完整性的高安全终端,要求安装包全链路可信校验、资源强隔离。

规范安全约束

MSIX 强制签名规范,TPM 校验包哈希,中间人篡改直接拦截部署;

默认虚拟化隔离,软件无法直接写入 HKLM 系统注册表,阻断恶意篡改内核防护开关;

FullTrust 模式下配套 regini 规范,仅可信管理员脚本可修改系统安全注册表;

MSI 对比短板

MSI 无强制签名,无内核虚拟化隔离,无法满足零信任硬件安全基线要求。

场景 4:DevOps 自动化流水线、CI/CD 云端打包发布

场景需求

研发流水线自动编译、打包、签名、分发,支持 Azure DevOps/GitHub Actions 自动构建安装包。

标准化支撑

MSIX 提供官方命令行打包工具msixpackager.exe、签名工具signtool.exe,完整配套 CI/CD 规范文档;

清单 XML 纯文本可版本管控,流水线可自动化修改权限、协议关联、虚拟化配置;

支持差分增量发布,云端分发带宽消耗极低;

对比 MSI

WiX 虽支持自动化,但 MSIX 容器格式标准化程度更高,跨平台流水线兼容性更好。

场景 5:存量 MSI 软件现代化迁移改造

场景需求

原有大量传统 MSI 业务软件,需要保留原有业务逻辑,同时获得隔离、自动更新、卸载无残留能力。

官方标准迁移流程

遵循《MSI to MSIX Conversion Guide》完整文档,使用 MSIX Packaging Tool 捕获原有 MSI 安装行为,生成容器化 MSIX 包;

迁移后保留原有注册表、文件逻辑,同时启用虚拟化隔离,兼顾兼容性与现代安全能力。

三、MSI + MSIX 通用交叉场景(两套标准均可落地,各有取舍)

场景 1:企业办公终端标准化软件分发

存量老旧终端、工控:优先 MSI,兼容旧系统、Server Core;

新采购 Win11 Secured-core PC、云桌面:优先 MSIX,满足零信任安全规范。

场景 2:离线镜像预装软件

长期使用的传统工控母盘:MSI;

云容器、短期虚拟机模板:MSIX,卸载无残留,镜像轻量化。

场景 3:安全基线加固批量推送

两套格式均可搭配 regini 完成注册表 ACL 锁死;

MSI 适合纯域内网线下发;MSIX 适合云 + 内网混合零信任环境。

场景 4:多架构统一分发(x86/x64/ARM64)

MSI:需分别制作 3 套安装包,维护成本高;

MSIX:Bundle 规范单包合并多架构,一套文件全域分发,维护成本更低。

四、两套格式场景选型对照表

业务场景

推荐标准

核心规范 / 文档依据

关键取舍理由

AD 域千台存量 Win7/2008 服务器批量分发

MSI v5.0

Windows Installer 组策略部署白皮书

原生兼容老旧系统、GPO 原生支持,无引擎依赖

工厂 Win2003 工控、Server Core 无图形服务器

MSI v5.0

MSI Server Core 适配规范

MSIX 部署引擎易被精简镜像移除

Microsoft Store 商用软件、现代 Win11 办公终端

MSIX

OPC 打包规范、MSIX 清单标准

强制签名、虚拟化隔离、自动增量更新

Windows 容器、Azure 云桌面 AVD

MSIX

MSIX 容器部署官方文档

多版本并行、卸载零残留、租户隔离

零信任 Secured-core/TPM 硬件安全终端

MSIX

MSIX 硬件信任链校验规范

全链路哈希校验、内核资源隔离

DevOps 云端 CI/CD 自动化打包发布

MSIX

MSIX 流水线自动化规范

XML 清单易版本管控,差分分发轻量化

大型 ERP / 数据库传统桌面软件、多运行库依赖

MSI v5.0

WiX XML 开发规范、Bootstrapper 引导标准

成熟依赖检测、组件修复、兼容旧业务逻辑

漏洞补丁批量迭代、内网低带宽环境

MSI+MSP 补丁规范

Windows Installer 3.0 补丁制作标准

二进制差分包,仅下发变更文件

存量 MSI 软件现代化改造、隔离加固

MSIX(迁移包)

MSI 转 MSIX 迁移规范文档

保留业务逻辑,新增虚拟化安全隔离

离线母盘镜像、无盘工作站长期固化模板

MSI v5.0

MSI 离线 hive 部署规范

兼容离线注册表挂载,适配老旧镜像工具链

五、配套规范 / 技术文档的场景化使用价值

研发打包场景

参考格式语法、清单 / 数据库表约束、组件划分规范,避免打包逻辑缺陷(DLL Hell、升级冲突、卸载残留);WiX/InstallShield/MSIX 打包工具全部依据官方文档校验合规性。

运维批量部署场景

依托企业部署白皮书、静默参数规范、日志标准,实现无人值守自动化安装、故障审计溯源;配套 regini 权限加固规范完成等保合规。

安全基线加固场景

安全章节规范定义安装包签名约束、注册表写入限制、HVCI/VBS 联动规则,作为等保测评、红蓝对抗的官方依据文档。

迁移改造场景

迁移指南规范标准化 MSI→MSIX 转换流程,规避兼容性故障,保障业务软件平滑升级至现代容器标准。

合规审计场景

官方标准文档可作为第三方测评、政企合规检查的权威依据,证明软件打包、分发流程符合微软 Windows 安全规范。

MSI / MSIX 特殊、另类、冷门高阶实战示例

所有示例均为常规打包教程不会覆盖的边界场景、复合联动、底层特殊能力,大量联动前文 regini.exe、HVCI/VBS、离线 hive、容器虚拟化、域批量基线等独有技术链路。

第一部分:MSI(Windows Installer)冷门特殊示例

示例 1:WiX MSI 内置 CustomAction 调用 regini.exe,安装同步锁定安全注册表 ACL(等保加固专属)

场景

安装 HVCI/CFA/Netlogon 内核防护注册表,一步写入键值 + 固化只读 ACL,规避 MSI 原生无法配置注册表权限的底层短板。

配套 regini 加固脚本 security_lock.txt,嵌入 MSI 安装目录:

txt

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters [1 17]

MaxRequestBytes = REG_DWORD 0x10000

EnableHttp2Tls = REG_DWORD 0

WiX .wxs 核心片段(安装提交阶段执行 regini,卸载同步清理权限)

xml

ExeCommand="[SystemFolder]regini.exe ""[INSTALLDIR]security_lock.txt"""

Execute="deferred" Impersonate="no" Return="check" />

静默域批量部署命令

cmd

msiexec /i SecHarden.msi /qn /norestart /l*v install_log.txt

另类独有价值

普通.reg导入、单纯RegistryValue表仅能写入配置,无 ACL 锁死;本示例一套 MSI 完成配置写入 + 权限防篡改,是政企等保基线标准流水线。

示例 2:MSI 离线 hive 母盘封装(无系统启动,离线预处理 SYSTEM/NTUSER.DAT)

场景

虚拟机 / 工控无盘母盘离线挂载 hive,不启动 Windows 系统,静默预装软件 + 加固注册表,出厂镜像零残留风险。

离线挂载 hive(仅内核加载配置单元,无进程启动)

cmd

reg load HKLM\OfflineSys D:\Mount\Windows\System32\config\SYSTEM

MSI 指定离线根路径安装,不写入本机运行系统

cmd

msiexec /a D:\Package\ERP.msi TARGETDIR=D:\Mount\ProgramFiles /qn

配套 regini 离线加固(同步处理离线 hive 权限)

cmd

regini.exe -h D:\Mount\Windows\System32\config\SYSTEM HKLM\OfflineSys erp_acl.txt

特殊边界点

常规 MSI 仅支持本机运行系统安装;离线 /a 管理安装模式专为镜像封装设计,极少运维文档提及。

示例 3:MSI 条件分支卸载清理 + 递归删除恶意注册表分支(红蓝对抗清理包)

场景

制作专用清理 MSI,卸载时递归删除病毒持久化 Run/RunOnce 注册表,同步重建并锁定只读 ACL。

MSI Registry 表配置删除标记,配合卸载 CustomAction 调用 regini 清理残留:

xml

卸载阶段执行 regini 锁定启动项只读:

xml

另类用途

普通批处理清理易被恶意进程占用拦截;MSI 事务模型具备文件 / 注册表快照回滚,清理失败自动恢复原有配置。

示例 4:MSP 增量补丁 + MSI 组合,分阶段强制启用 Zerologon 防护(内网低带宽域批量)

场景

存量上千台域工作站,仅下发 Netlogon 安全通道变更差分补丁,无需完整重分发安装包。

使用pcp补丁工程制作 MSP 差分包,仅包含 Netlogon 注册表变更;

组策略静默批量推送补丁,自动合并多补丁单事务执行:

cmd

msiexec /p Netlogon_harden.msp /qn /norestart

补丁内嵌 regini 后置 ACL 锁定,防止补丁更新后权限重置。

冷门特性

MSI 3.0 + 补丁支持多补丁事务合并,普通 EXE 增量更新无原子回滚能力。

示例 5:MSI Bootstrapper 链式前置依赖检测(工控老旧VC++.NET离线预安装)

场景

Server Core 无图形工控服务器,引导包自动检测缺失运行库,离线静默链式安装 VC++、.NET,再执行业务 MSI,全程无交互。

WiX Burn 引导核心逻辑:

xml

特殊适配

精简 Server Core 移除商店、PowerShell 远程,仅 msiexec 原生引擎可用,MSIX 部署引擎易被裁剪,仅 MSI 引导包兼容全精简系统。

示例 6:MSI 多架构共存打包(x86/x64 双组件,Wow6432Node 自动分流)

场景

32 位旧工控软件同时适配 64 位系统,一套 MSI 自动分流 32/64 位文件、注册表分支。

xml

对比短板

MSIX 原生 Bundle 单包合并多架构,但传统工控软件无法迁移容器格式,只能依靠 MSI 双组件方案。

第二部分:MSIX(现代容器包)冷门特殊高阶示例

示例 7:MSIX FullTrust 穿透虚拟化,调用 regini 修改真实 HKLM 内核安全注册表(Secured-core 终端专用)

底层背景

标准 MSIX 默认虚拟化所有 HKLM 写入,无法修改真实系统安全 hive;仅uap10:TrustLevel="mediumIL"完全信任模式可穿透隔离层Microsoft ...。

Package.appxmanifest 清单开启完全信任、声明系统注册表访问权限:

xml

mediumIL

打包内嵌 PowerShell 脚本,启动时调用 regini 锁定 HVCI 注册表:

powershell

# 容器内执行regini写入真实系统HKLM,绕过虚拟化重定向

Start-Process -FilePath "$env:SystemRoot\System32\regini.exe" -ArgumentList "$PSScriptRoot\hvci_lock.txt" -Wait -NoNewWindow

独有约束

必须 EV 代码签名、Secured-core 主机 TPM 校验包哈希,普通自签名 MSIX 会被系统拦截穿透系统注册表操作。

示例 8:MSIX Mod 增量修改包(企业自定义基线不改动厂商主安装包)

场景

软件厂商分发标准 MSIX,企业 IT 单独制作 Mod 修改包,批量追加注册表加固、黑名单 IP、ACL 权限,无需重新编译主程序包Microsoft ...。

Mod 包仅包含自定义 regini 脚本、EDR 过滤规则,共享主程序包身份标识;

部署顺序:先安装主 MSIX,再下发 Mod 增量包,容器虚拟层自动合并文件 / 注册表;

卸载仅删除 Mod 包,主程序不受影响,更新厂商新版本无需重新制作企业定制包。

另类优势

MSI 对应方案只能重新打包完整 MSI,维护成本极高;MSIX Mod 实现厂商程序与企业基线完全解耦。

示例 9:MSIX 共享容器(Shared Package Container)多软件共用虚拟化安全基线(云桌面 AVD)

场景

Azure 虚拟桌面多套业务软件共用同一套加固注册表、信任列表,统一管控容器资源隔离策略Microsoft ...。

编写共享容器定义SharedContainer.xml,绑定多套 MSIX 包身份;

部署共享容器后,所有关联软件共享同一虚拟 Registry.dat、文件过滤规则;

统一通过 regini 离线修改共享 hive,一次操作全部软件生效。

专属场景

仅政企云桌面、多租户浮动会话支持,MSI 无共享容器原生机制。

示例 10:MSIX PSF 修复框架穿透虚拟化,原生加载 COM 组件(传统 COM 软件容器化改造)

场景

老旧 ERP 依赖全局 COM 组件,标准 MSIX 虚拟化拦截系统 COM 注册,使用 Package Support Framework (PSF) 配置豁免规则,同时保留容器隔离。

psf-config.xml 核心豁免配置:

xml

打包内嵌 regini 脚本,首次启动注册 COM 并锁定 CLSID 项 ACL,防止劫持。

底层特殊性

MSI 直接写入系统 COM 注册表无隔离,但卸载残留严重;MSIX+PSF 兼顾容器安全与传统 COM 兼容性。

示例 11:MSIX Bundle 多架构单包(x86/x64/ARM64 一套分发,适配国产 ARM 服务器)

场景

国产 ARM64 工控、x64 服务器、x86 老旧终端共用同一份 MSIX Bundle,系统自动匹配 CPU 架构解压对应程序文件。

打包工具生成 Bundle 容器,内嵌三套独立架构 MSIX;

离线镜像部署时,搭配regini -h离线 hive 批量加固三套架构共用安全注册表;

对比 MSI

MSI 需分别制作 3 套独立安装包,域分发维护 3 套基线脚本,MSIX Bundle 一套文件全域覆盖。

示例 12:MSIX 离线镜像容器预制(Windows 容器镜像离线预装软件,无运行时交互)

场景

Docker Windows 容器模板离线挂载容器 SYSTEM hive,提前部署 MSIX 包,容器启动即完成加固,无需启动部署引擎。

离线挂载容器 hive,使用Add-AppxProvisionedPackage离线注入 MSIX;

离线执行 regini 加固容器系统注册表,锁定 Netlogon、HTTP.sys 防护参数;

打包容器镜像,启动后直接加载预部署 MSIX,无商店、无部署弹窗。

底层差异

MSI 离线安装会产生 Config.Msi 回滚残留,MSIX 离线预制无临时备份文件,容器镜像体积更小。

第三部分:MSI + MSIX 复合交叉特殊示例(两套格式联动)

示例 13:MSIX 内嵌引导脚本静默安装存量 MSI(混合环境兼容过渡方案)

场景

存量业务依赖 MSI 复杂组件 / 服务注册,新终端统一分发 MSIX 容器包,启动后自动静默安装内嵌 MSI,实现新旧格式平滑过渡。

MSIX Files 目录内嵌业务 MSI、静默 PowerShell 引导脚本;

应用启动触发脚本,提升权限执行 msiexec 静默安装:

powershell

$msiPath = Join-Path $PSScriptRoot "legacy_erp.msi"

msiexec /i $msiPath /qn /norestart

MSI 安装完成调用 regini 同步加固系统注册表,MSIX 容器隔离应用运行环境。

过渡专属方案

纯 MSI 无法获得容器隔离、自动更新;纯 MSIX 无法兼容老旧 MSI 服务 / COM 复杂注册逻辑,二者联动折中解决兼容性与安全矛盾。

示例 14:MSI 转 MSIX 捕获离线加固基线(MSIX Packaging Tool 离线 hive 捕获模式)

场景

离线挂载中毒主机 hive,先使用 MSI 清理包删除恶意注册表,再通过打包工具捕获干净系统状态,生成隔离 MSIX 容器,彻底根除残留。

完整流程:

reg load挂载离线 NTUSER.DAT/SYSTEM hive;

离线执行清理 MSI 递归删除病毒持久化项;

MSIX Packaging Tool -h离线 hive 捕获模式,录制干净注册表 / 文件状态生成 MSIX;

打包内嵌 regini 只读锁定脚本,容器启动加固系统安全项。

取证 / 镜像专属另类流程,普通在线打包教程完全不覆盖离线捕获模式。

四、特殊示例核心能力横向汇总

示例编号

核心独有的冷门能力

MSI/MSIX 二选一不可替代理由

1

MSI CustomAction 联动 regini,安装同步固化注册表 ACL

MSIX 默认虚拟化无法直接修改真实 HKLM,普通.reg 无权限配置

2

MSI 离线管理安装,预处理镜像离线 hive

MSIX 离线部署依赖系统 AppX 引擎,精简 Server Core 易被裁剪

3

MSI 事务化注册表清理,卸载自动回滚

MSIX 卸载直接删除容器,无法精细化清理系统全局注册表

7

MSIX FullTrust 穿透虚拟化,修改系统内核注册表

MSI 无容器隔离,写入系统注册表易产生卸载残留

8

MSIX Mod 增量企业基线,不改动厂商主包

MSI 无原生增量修改包机制,只能完整重打包

13

MSIX 容器内嵌 MSI 混合过渡部署

兼顾 MSI 老旧业务兼容性与 MSIX 隔离、自动更新能力

安装包(Installer Package)是一种用于安装和卸载软件程序的文件,通常包含了软件程序的所有组件、依赖库、配置信息等等。在 Windows 系统中,安装包通常是以.msi、.exe、.zip、.rar 等格式出现。

以下是几种常见的安装包格式:

.msi 格式:Windows Installer 包含在 Windows 操作系统中,.msi 格式是 Windows Installer 的标准格式,它可以自动安装和卸载软件程序,并且支持自定义安装选项和升级功能。

.exe 格式:.exe 是可执行文件的缩写,它通常包含了一系列的指令和资源文件。在 Windows 系统中,.exe 文件也可以用来打包软件程序和安装程序,但是需要手动运行安装程序完成安装过程。

.zip/.rar 格式:.zip/.rar 是常见的压缩格式,通常用于将软件程序和相关文件压缩成单个文件,并且可以通过解压缩工具进行解压缩和安装操作。这种方式通常适用于小型的软件程序或者一些简单的工具程序。

除了上述格式外,还有一些特定的应用程序会使用其专有的安装包格式,例如 Adobe Photoshop 使用 .psd 格式、Autodesk CAD 软件使用 .dwg 格式等等。

.dmg 格式:针对苹果 macOS 操作系统的安装包格式。它是指苹果公司的磁盘映像文件,可以将苹果软件程序及其相关的组件和依赖库打包成一个 .dmg 文件,用户可以通过双击 .dmg 文件进行挂载和安装。

.deb/.rpm 格式:这两种格式分别用于 Debian/Ubuntu 和 RedHat/CentOS 等 Linux 发行版下的安装包格式。.deb 和 .rpm 都是标准的软件包管理器格式,它们除了可以用于安装软件程序,还可以用于卸载、更新和维护软件。

.apk 格式:是 Android 操作系统下的应用程序包格式,通常包含了 Android 应用程序的资源文件、代码、XML 文件等,可以通过安装工具或者 Google Play 商店进行安装和更新。

.appx 格式:是 Windows 10 中、Windows Mobile 中应用商店中的应用程序安装包格式。.appx 安装包通常包含了应用程序的所有文件和依赖库,并且支持自动升级。

应用程序虚拟化(App-V):这种方式将应用程序封装到一个虚拟环境中,可以让用户在不需要管理员权限的情况下使用应用程序。App-V 包含了应用程序本身、依赖库和配置信息等,可以通过流媒体网络进行安装和更新。

Docker 镜像:Docker 镜像是一种轻量级的容器化技术,可以将应用程序和所有运行环境以及相关依赖库和组件全部打包在一个镜像中,用户可以直接部署和运行该镜像而无需再次安装和配置环境。

Web 安装:Web 安装可以通过下载并执行一个小型的安装程序进行安装,并且可以根据用户选择性下载和安装应用程序的组件和模块。这种方式适用于大型应用程序和复杂的业务模块。

随着技术的发展和变革,安装包也在不断改进和演化,具体表现在以下几个方向:

自动化:随着自动化技术的普及和应用,越来越多的安装包开始使用自动化脚本进行构建、配置和部署,从而降低了人工干预的成本和风险。例如,使用 Dockerfile 编写自动化构建镜像的指令、使用 Ansible 脚本进行自动化部署和配置等。

安全性:随着软件供应链攻击的不断增多,安装包的安全性成为了一个越来越严重和突出的问题。为了加强安装包的安全性,越来越多的开发者和厂商开始采取数字签名、加密、加壳等安全措施来保护安装包的完整性和可信性。

多平台支持:随着移动互联网和跨平台应用程序的兴起,安装包也需要支持多种操作系统和平台,例如 Windows、Linux、macOS、Android、iOS 等。为此,许多新型的安装包格式和工具应运而生,如 Snap、Flatpak 等。

云时代:随着云计算的普及和发展,许多应用程序开始从本地环境转向云端部署和使用。因此,越发需要支持云原生的安装包格式和技术,例如 Kubernetes 包管理器 Helm、云原生应用程序打包工具 CNAB 等。