所以我有一个问题:在经典的Windows安装程序(msi)或nuget或其他什么东西中,哪个包系统更好?
临时性的: 如何避免在WiX/MSI部署解决方案中常见的设计缺陷?
- 一个非常混乱和不太理想的临时总结,列出了在MSI文件中发现的常见问题。不是很好。比没有好吗?这些书中没有的东西(太混乱了)。
重要主题: 如何避免意外分发敏感信息到我的MSI中?
需要速度: WiX快速入门简短版
WiX & MSI:
MSI是被广泛接受的企业应用标准。与传统的部署技术相比,它有一些重要的企业优势(
以及简短明了的版本
)。WiX是创建MSI文件的新的开源方式。
- Wix Toolset Download(
1)
主要的WiX安装程序,2)
Votive - Visual Studio集成安装程序- WiX Documentation
- 在WiX安装后,在安装文件夹“
%ProgramFiles(x86)%\WiX Toolset v3.11\doc
”中查找WiX.chm
和msi.chm
帮助文件,以便快速访问文档。- 在线:
WiX Reference Manual v3
,Official WiX Tutorial
。Github
,Bug Tracker
,Mailing List
,FireGiant WiX KDB
(FireGiant是WiX的商业分支)。- 要了解Wix,您可能需要阅读一篇关于它背后历史的快速非官方摘要。
- MSBuild - 使用Visual Studio、Votive和MSBuild
- Harvesting(1):WiX有自己的工具,可以基于输入文件夹生成WiX标记。
- 该工具称为heat.exe。WiX的商业分支FireGiant有一个名为HeatWave的工具,具有更多的功能。
- 我很少测试的工具是
WixHeatATLHarvesterExtension
:https://github.com/nirbar/WixHeatATLHarvesterExtension(用于从x64模块中收集注册表信息的WiX Heat扩展)
其他工具:
- 您可能想阅读其他提供安装程序的方式,除了Wix, 例如:
- 主要工具:Advanced Installer, - InstallShield, - PACE Suite
Hello World & Hello WiX:
请查看一个完整的例子,了解Wix源文件及其组件在Codeproject上的外观。这是Wix的“Hello World”教程。视频示例:
更多示例代码:
Debugging:始终检查所有事件日志,应用程序日志和MSI日志-如果有的话。只是提一下。在执行任何其他操作之前,请使用任何可用的调试工具并谷歌精确的错误消息。WiX快速入门:以下是我找到的一些最佳示例代码链接:
- Helge Klein的真实世界WiX示例 - 一定要看看(Wayback-存档版本)。
- Rainer Stropek的Github WiX示例 - 可以非常有帮助。
- 由Alex Schevchuk编写的从MSI到WiX - 老化的内容,但很好。
- Chris Painter的IsWiX教程 - 杰出的WiX示例。
最后:
- Phil Wilson的Github存储库,用于MSI示例:https://github.com/Apress/def-guide-to-win-installer。 最好的内容,但已过时。一般的MSI示例,不是WiX。
- 我的实验网站:installdude.com。
- 如何使用WiX创建Windows服务MSI安装程序。
- WiX扩展:https://github.com/nirbar/PanelSwWixExtension(
Dism.exe
,等等...
)
.Net
,.Net Core
,Java
,Silverlight
,Direct X
,VC++ Runtime
,MS-XML
(遗留),等等......
。
自定义操作调试:
- 自定义操作运行时失败的常见原因
- 调试自定义操作
- 对于本地代码/C++,只需将调试器附加到
msiexec.exe
- Advanced Installer 的 C# 自定义操作调试视频教程
MSI 日志记录:
- 概述和总结(如何记录日志,解释日志文件等...)
- Installsite: MSI 日志“如何”
- 更多 MSI 日志记录信息
事件查看器:
- 按住 Windows 键,点击 R,输入
eventvwr.msc
并按下 Enter。- 转到
Windows 日志 => 应用程序
。查找MsiInstaller 事件
。- 也要检查其他日志 (
安全性
、系统
、配置
)。一般调试:
应用程序启动问题:调试思路(发射鱼雷)
ProcMon.exe:行业工具。一刀切的工具。最好的通用调试工具,而且是免费的(comment link for safekeeping)。使用它有效地进行调试可能是一个挑战,但它是最好的通用调试工具。
- 快速、粗略的示例
- Hanselman 的较长视频示例(从大约 3:50 开始)
调试工具:
- 调试依赖项问题的工具 -
ProcMon.exe
、VS
、Dependency Walker
等。- 必要的服务调试工具:
事件查看器
、任务管理器
、Services.msc
Process Explorer
、NET 命令
、SC.exe
- Windows 服务常见问题解答 (FAQ)
错误代码:查找错误代码和异常消息。
什么是锁定
(正在使用, 恶意软件), 什么是阻塞
(权限, 反病毒, 安全工具), 什么是损坏的
(磁盘, 恶意软件, 配置, 加密) 什么是意外的系统状态
(磁盘空间, 时间和日期设置, 语言, 许可证, Windows补丁状态, 路径过长, PendingFileRenames等), 什么是不兼容的产品
(无法共存的东西), 什么是无法访问或配置错误的
(指向错误位置和资源的内容: 网络服务器名称, 磁盘路径, URL, 数据库, 服务, UAT环境, PROD环境等...) 最后但并非最不重要的: 缺少什么
(运行时, 资源图像, 设置文件等)?
注意:始终首先(下面的步骤8):
谷歌精确错误消息
。启动失败调试:
1)
重新启动
,2)
禁用防病毒软件
,3)
以管理员身份运行并检查,4)
检查依赖项和运行时
(Java,VC++ Runtime,.NET等)。然后,如果需要:5)
详细日志
,6)
事件日志
,7)
如果仍然无法工作,则尝试在虚拟机上运行?(许多虚拟机缺少必要的运行时-请检查)或次要计算机?
还可以8)
谷歌精确错误消息
并检查用户评论,9)
运行问题应用程序的更新? (新安装程序可能会消除错误情况)。10)
还要进行恶意软件
的全面检查吗? 它现在到处都是。11)
一些软件(通常是服务器软件)可能需要解决配置设置(错误配置
)。桌面应用程序可能需要许可证才能启动。
- 重新启动:在安装失败后首先尝试重新启动,看是否可以解决锁定和待处理的重命名。
- 其他计算机:尝试在另一台实体计算机上安装?
- 这是安装媒体的重要烟雾测试!
- 虚拟机:尝试在虚拟机上安装?
- 通常过时,请检查运行时,检查Windows更新。
- 运行时:确保各种类型所需的运行时以所需版本存在:
- 次要账户:尝试使用不同的管理员帐户在主机上安装。这可以解决由用户配置文件中的错误引起的问题(这种情况并不罕见)。
- 本地安装文件:如果在网络上调用时,将安装文件复制到本地(以消除网络错误源)。
- 本地化问题:通常情况下,以其他语言交付的设置可能包含原始安装程序中未见的全新错误。
- "墨菲领域":
"我们已经成功地在国际化设置中添加了额外的错误,超出了英文版本"
。哦,人性啊!太糟糕了。- 尝试下载英文设置版本并进行测试安装?
- 在英文机器或虚拟机上尝试本地化设置?
- 还应考虑使用具有不同语言设置的另一个用户帐户运行。
- 损坏的安装文件: 安装文件已损坏。重新下载以确保正确性?在浪费一整天之前,作为首要步骤完成?是否正确匹配平台位数和CPU架构?
- 恶意软件: 恶意软件可能会导致各种问题。
- 安全软件:
反病毒软件
、防火墙
、扫描仪
等可能会干扰安装。如果需要,请暂时禁用。- 磁盘空间: 确保有足够的磁盘空间!
- 代理: 如果有网络要求,是否存在阻止事物的代理服务器?
- 策略: 在受管理的网络中可能存在某些策略,会阻止某些功能,从而使安装变得不可能。尝试使用虚拟机?通常限制较少。
- 磁盘错误: 扫描磁盘以查看其是否正常。如果不正常,请先修复。对于没有UPS的台式机,现代NVMe硬盘可能会丢失大量数据。
- 磁盘安全ACL: 自定义的安全ACL(NTFS访问配置)配置会导致Windows组件和软件运行时出错。除非您知道自己在做什么,否则永远不要使用自定义ACL来管理Windows目录。 错误是确定的。
一些链接:
易于访问:
虚拟环境
, 兼容模式
, 重新打包
, 等等...
)重新打包、应用程序启动调试:
Procmon.exe
、捕获
、重新打包
、服务安装
和安装程序方法
升级:
其他WiX链接:
过程:
%TEMP%
,最后按下 Enter。应用和功能
。选择条目并卸载。一些学习Wix的好起点链接:
从Setup.exe
WiX捆绑包或MSI文件本身中提取文件:
dark.exe
工具从MSI中提取文件。正如我在上面提到的建议性的“Wix快速入门”文章中所写:Wix是实践性的。只需关注像Codeproject中的简单但完整的真实世界示例 - 仅仅阅读文档可能会让人感到困惑。
集中精力将您的应用程序拆分为组件并设置主要升级。作为经验法则,每个组件使用一个文件,并阅读此答案以更好地了解组件创建:如何在wix中更改我的组件GUID? 主要升级是已部署软件的最常用升级机制(另一种常见的升级类型是次要升级)。显然,您可以升级已部署的内容非常重要。在部署第一个软件版本之前使升级方案正常工作,以便您对部署解决方案充满信心。如果您直接编写Wix代码(而不使用GUI编辑器),我建议您查看此答案,以了解如何保持源文件简洁:WIX中GUID的语法?
进一步阅读: