Windows Installer XML(WiX) 这里所介绍的是Wix 3.0版本,目前还是beta....Wix 是 Windows Installer XML 的缩写,它是微软提供的一组工具和规范的集合,用来制作MSI格式的安装包。另外值得一提的是,Wix是微软少有的开源软件之一。...制作MSI的工作有InstallShield,Wise,他们都是商业程序,需要付费,你也可以使用WiX来完成安装程序制作。...Deployment Tools Foundation (DTF) DTF就是msi.dll(Windows installer library)的.net包装,DTF使得为MSI安装包编写自定义Actions...可以到这里:http://msdn.microsoft.com/zh-cn/library/aa372023(en-us,VS.85).aspx 完整列表 Windows Installer不能完全覆盖所有的场景
关于这两个值的变化: 如果这两个值都没有更改而构建出一个新的 MSI 安装包,那么 Windows Installer 会认为这两个包之间属于“小型更新”(Update)。...双击 msi 文件时,Windows Installer 将弹出错误框: UpgradeCode 对于同一个产品,无论其产品 Id、Version 如何变化,都应该保持 UpgradeCode 不变,...以便 Windows Installer 能准确认为这是同一个产品的“主要升级”(MajorUpgrade)。...Overflow ProductCode 属性 - Win32 apps - Microsoft Docs 本文会经常更新,请阅读原文: https://blog.walterlv.com/post/windows-installer-using-wix-best-practice-product-id-and-upgrade-code.html...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
Visual Studio的设计时引用组件的窗口中看到的程序集的位置和程序集的运行时位置是不一样的,特别是在全局程序集缓存(GAC)中的程序集,通过WiX制作Winodws安装程序的时候需要处理这个区别...VS的设计时的添加引用窗口看到的程序集的位置来自注册表SOFTWARE\Microsoft\.NETFramework\AssemblyFolders – 放在HKEY_LOCAL_MACHINE 下面就是针对所有的用户...WiX要把一个程序注册到GAC,只需要在File 上增加一个选项 Assembly=".net" 就可以了,但是注册到GAC的dll不会放到安装目录下方了,这就需要通过提供两个Component方式来处理...Installer Sample" Comments="This installer database contains the logic and data required to install...Minimal Windows Installer Sample." /> <Property
系统环境变量由 Windows 定义并应用到所有计算机用户。对系统环境的更改将写入注册表,而且通常需要重启计算机才能生效。通常我们的程序中也会使用环境变量,如何在WiX设置环境变量呢?...Installer Sample" Comments="This installer database contains the logic and data required...to install Minimal Windows Installer Sample."/> 可以看到TestMinVar这个环境变量了,卸载这个例子程序,环境变量TestMinVar也会被删除。...Environment table 也是一个 formatted field,这也就是说环境变量的值可以是来自一个属性,另一个环境变量,或者是任何一个formatted 字符串,下面的例子就是把环境变量设置成
注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“MSI”文件 引用目标项目 在 WiX MSI 项目(在本教程中,我取的名字为 Walterlv.Installer.Msi...关于这些值的含义,你可以阅读我的另一篇博客: Windows 安装包制作最佳实践:ProductCode、UpgradeCode、PackageCode 应该怎么设置?...前往 MSI 文件的输出目录(在项目目录的 bin\Debug 下): ▲ 前往 MSI 文件的输出目录 安装完后,可以在系统设置“应用和功能”以及“Program Files”目录中找到它:...另外,觉得不错可以提交一下代码,方便后续章节的学习。 附源代码 附上必要的源码,避免你在阅读教程时因模板文件的版本差异造成一些意料之外的问题。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
虽然我们前面选择的 C:\Program Files (x86)\WiX Toolset v3.11\bin 看起来是个绝对路径,但实际上在 wixproj 项目里记录的是一个属性引用,因此可以很容易在团队成员之间共享和跨版本迁移...你也可以定义你的团队规范。 Installed 属性表示当前此产品是否已安装。...也就是说新的判断条件的意思是:如果当前产品已安装,或者 .NET Framework 已安装有 4.6.2 或更高版本,则满足安装条件,准许安装,否则弹出错误提示。...下图是我魔改了 DEMO 后在 Windows 11 上的截图(放上来就是为了平衡美感的): 不过为了真实性,我还是找了台 Windows 7 纯净系统来测试: 如果点击“OK”,安装程序将直接退出...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本文将详细介绍 C# 应用打包的各种方法,包括 ClickOnce、MSI 安装包、Visual Studio Installer Projects、WiX Toolset 和一些第三方工具(如 Inno...使用 MSI 安装包MSI(Microsoft Installer)是 Windows 系统原生的安装包格式,适合更复杂的应用程序。...MSI 包可以通过工具如 Visual Studio Installer Projects 或 WiX Toolset 创建。...结论C# Windows 桌面应用程序的打包有多种选择,从简单易用的 ClickOnce 到高度自定义的 WiX Toolset 和第三方工具,开发者可以根据项目需求选择适合的打包方案。...对于较为简单的应用,可以选择 ClickOnce 或 Visual Studio Installer Projects,而对于复杂的应用程序,可以考虑使用 MSI 安装包或 WiX Toolset 来满足定制化安装的需求
如果你使用 WiX 制作安装包,并且遇到了问题,一定需要一个趁手的调试方案。本文介绍如何查看 WiX 制作的安装包的日志。...WiX 使用 Burn 引擎来制作 exe 捆绑包,默认情况下 Burn 引擎使用自带的安装界面来执行安装。...Burn 引擎提供了自定义引导程序的功能,于是你可以利用 Burn 引擎做出自己的 UI 来。比如 用 WPF 来制作安装包界面。...\Walterlv.Demo.MainApp.exe -l "debug.log" 其中,Walterlv.Demo.MainApp.exe 是我在 WiX 入门教程系列中使用的安装包名。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果向下滚动到“属性”部分,您可以看到为 Product 元素定义的属性,其中包括必需的属性。因此,可以证明 WiX 示例代码确实提供了 Product 元素需要的所有属性。...请注意,我们可以指定安装程序版本、文件压缩,甚至安装权限(如果面向 Windows Vista)。...InstallPrivileges 枚举 通过此属性指定在 Windows Vista 或更高版本上安装此程序包所需的权限。...这种来自子元素的引用,被称作反向引用,有时也称作feature backlinks。复杂引用和反向引用的处理,可能是链接程序必须实现的最难的工作。...下面我们来自定义一个安装程序。 添加安装的图形界面 WiX的安装界面使用的是命令行模式,我们现在在增加一个图形的安装界面。
正确的调查方法是去看错误日志,看真实的错误原因是什么。...state: Absent, cached: None [14A4:9F04][2021-07-16T11:13:58]i199: Detect complete, result: 0x0 调查 可以注意到唯一的一行错误...虽然错误码无法给我们带来有价值的信息,但那句提示至少可以让我们知道问题出在“无法加载托管宿主”这个范围。...对于 2,通过实验可以得知程序集元数据出现错误时的错误码不是这个(参见:0x80131508 错误)。 于是我们也能得出问题出在 BootstrapperCore.config 配置里。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
WiX 全称为 Windows Installer XML,是使用 XML 文件创建 Windows 安装程序的一组工具集。它开源且完全免费。...本系列教程所需的所有源代码都已在 GitHub 上开源,你可以克隆下来学习和试验,也可以选择性忽略。...你可以挑自己想做的安装包类型,然后直接在这个类别里面从第一篇读至最后一篇。...前置会始终安装,即使目标电脑已经自带或装好 用 WiX Burn 制作托管安装包:出现 0x80070002 错误 用 WiX Burn 制作托管安装包:出现 0x80131508 错误 0x800b0109...://blog.walterlv.com/post/getting-started-with-wix-toolset.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
你可以事先写好一份文档内容,另存为RTF格式,为后续步骤准备。...Doc文件可以完美弹出计算器,但是在有360的情况下,纳尼??...id=1586899175661391940&wfr=spider&for=pc],利用Windows系统自带的msiexec程序下载并远程运行msi文件,以达到执行特定命令的目的。...这里解释下参数的意义: /q --以安静模式运行 /i --官方解释是状态消息,不加的话会弹出Windows Installer框引起怀疑 C:\Program Files (x86)\WiX Toolset...首先配置好empire,具体的配置内容可以参考这篇文章[https://mari0er.club/post/empire.html],之后将生成的powershell代码复制粘贴到wix模板的第15行,
原文: Wix 安装部署(五) Bootstrapper 捆绑安装 Wix的xml配置确实很费劲,忍不住有点像吐槽一下,前四篇完成的功能在Windows Installer中通过配置能很快的弄出来...在Windows Installer中分别在Redistributables和Registry中设置就行了,特别是注册,可以直接把目录从你自己的电脑上拖过来。...但今天要讲的,就是wix中的Bootstrapper 项目,制作一个捆绑安装程序,也是Windows Installer中没有的。将多个需要安装的文件,按照顺序一次性装完。...我们用RegistrySearch来搜索注册表,切可以制定检测顺序 Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"...这里只做个简单的参照。 很多PC软件都是可以自动检测版本,下载更新,VS自带的ClickOnce也可以运行前自己动检测,发现新版本会去提示下载更新,需要借助一个发布网站就行。
Minimal Windows Installer Sample." /> 的Windows开始菜单,第二个Directory将是在windows开始菜单下创建的一个菜单项,我们把它命名 为Minimal,菜单的快捷方式包括三个元素...:一个是Component 元素是WiX安装元素的原子单位,Component元素下的Shortcut就是快捷菜单项了,RemoveFolder 元素保证在卸载应用程序的时候 做相关的清理工作。...上面的例子中有两个快捷方式,一个是Minimal Test,另一个是Uninstall Minimal,这两个就是Windows开始菜单中所看到的菜单项了。...Windows Installer System64Folder 属性在32位的机器上被解析为System32 目录,在64位的机器上被解析为 SysWow64 目录.
WiX是Windows Installer XML的简称,它是用于制作Windows安装包的工具集。它支持命令行环境,开发者可以及将它集成到他们的编译过程中创建MSI和MSM安装包。...更多信息可以参考:http://wix.sourceforge.net/ 最近研究了一下如何使用WiX制作具有时间限制的安装包,下图是demo的效果图。 ?...选择合适的脚本语言(VBScript or JScript)实现定制操作。 2. 选择合适的实际执行上面的脚本。 下面分享我的实现过程: 1....当然,你也可以选择在AppSearch之前执行。...添加Condition用于检查第三步添加的属性是否存在,并在需要的时候弹出错误信息。
本文开始前,请确保你已经可以生成一个最简单的 msi 安装包了: 用 WiX 制作安装包:创建一个简单的 msi 安装包 由于 exe 格式的安装包自己带了 UI,所以 msi 中的 UI 怎么样都是可以不用管的...注意,选择的模板要注意这些要点: 图标上标记了“wix”,标签上标记了“WiX” 模板简介中说明这是在创建“EXE”文件 创建完后,记得去项目属性里改一下输出的文件名。...)"/> 注意: 这里的 Walterlv.Installer.Msi 是前一篇教程中引用的项目的名称,你可以改成你自己的生成 MSI 的项目的名称。...编辑基本的安装包信息 与 MSI 包一样,不填写基本的安装信息也会报编译错误: ▲ 缺少厂商信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 错误知识的误导,同时有更好的阅读体验。
Windows Installer 4.5;而在下一代的Windows 7/Window Server 2008 R2中,将会集成Windows Installer 5.0。...相对与4.5版本,Windows Installer 5.0主要是在安全性上作了改进,从5.0开始,Windows Installer将会为用户提供账户、文件、服务和注册表等全方位的保护。...Bob Arnson 在他的博客上宣布MSI v5.0 features in WiX v3.0 在 3.0.4917.0 build 支持Windows Installer 5.0。...下面是一些Windows Installer 5.0的相关资料: MSDN主题What's new in Windows Installer 5.0 Windows SDK for Windows 7...beta download location (包含了beta版本的Windows Installer 5.0 SDK)
WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消息(WM_TOUCH)。这能够很大程度提升 WPF 程序的触摸响应速度,但是很多时候又会产生一些 Bug。...如果你有需要,可以考虑禁用 WPF 的内置的实时触摸(RealTimeStylus)。本文介绍禁用方法,使用 AppSwitch,而不是网上广为流传的反射方法。...=true 开关,即可关闭 WPF 内置的实时触摸,而改用 Windows 触摸消息(WM_TOUCH)。...WPF Applications - Microsoft Docs WPF 禁用实时触摸 - 林德熙 此方法可以解决的问题一览 拖拽窗口或者调整窗口大小时不能实时跟随的问题 Why all my WPF...本文会经常更新,请阅读原文: https://blog.walterlv.com/post/wpf-disable-stylus-and-touch-support.html ,以避免陈旧错误知识的误导
然而使用 WiX 的 NuGet 包有额外的好处,可以使得团队成员无需每人单独安装 Wix 工具集即可完整编译安装包。不过这涉及到一些 NuGet 相关的高级操作,我在其他博客里有说到。...为了保证教程依然便于入门,所以我使用单独安装 WiX 工具集的方式来讲解。 如果大家感兴趣使用 NuGet 的方式来完成整个打包项目的构建,替代现在单独安装的方式,我可以单独再写一篇高级教程。 2....虽然官方文档有提到可以设置成 v3.5、v4/Client 之类,但那会增加 WiX 打包项目配置的复杂程度,完成基本的打包需要配置更多(例如编写安装 .NET Framework 3.5 的代码)。...如果发现无法运行,请前往此篇文章调试和解决问题: 使用 WiX 创建最简单的安装包过程中可能出现的问题和解决方案汇总 如果可以正常运行,那么恭喜你,完成了 WiX 安装包入门教程的 Hello World...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果我们要安装的程序运行需要 .NET Framework 环境,那么可以检查 .NET Framework 是否安装,如果未安装则可将其装上。...,以便后续步骤可以使用更专业的词汇来准确描述我们正在做的事情。...对于小型项目,我们可以考虑在线安装 .NET Framework。...根据 WiX 3 已开源的源码我们可以得知,本地安装 .NET Framework 时选取的目录为 redist\。...,以避免陈旧错误知识的误导,同时有更好的阅读体验。
领取专属 10元无门槛券
手把手带您无忧上云