使用pyro工具创建补丁时遇到问题。我不确定这是否是WiX工具缺陷,或者我做错了什么。执行pyro.exe时,我的发布构建器崩溃了pyro工具的输出,如下所示:
Windows Installer XML工具集修补程序生成器版本3.11.0.1701 版权所有(c).NET Foundation和贡献者。保留所有权利。
pyro.exe:错误PYRO0001:对象引用未设置为对象的实例。
异常类型:System.NullReferenceException
堆栈跟踪: 在Microsoft.Tools.WindowsInstallerXml.MediaRow.get_LastSequence() 在Microsoft.Tools.WindowsInstallerXml.Patch.AttachTransforms(ArrayList转换) 在Microsoft.Tools.WindowsInstallerXml.Tools.Pyro.Run(String [] args)
而且,这是我用来构建补丁的WiX工具的执行顺序:
请告知。
非常感谢
答案 0 :(得分:2)
此问题的当前解决方法(由于任何可怕的原因未记录)是更改正在为您创建补丁的产品中定义媒体的方式。
因此,不要在Product元素中使用以下内容(这是推荐的方法......):
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product ...>
...
<MediaTemplate EmbedCab="yes" />
...
</Product>
</Wix>
您需要将MediaTemplate
元素替换为Media
元素,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product ...>
...
<Media Id="1" Cabinet="MyProduct.cab" EmbedCab="yes" />
...
</Product>
</Wix>
对于更高级的安装,Media
元素将比MediaTemplate
更难使用,但是有关于这些元素的正确文档。我所展示的是最简单的安装类型。我认为当WiX Toolset团队引入更新,更易于使用的MediaTemplate
时,这个问题就出现了,并且在测试中错过了修补用例。
希望这可以帮助其他任何试图使用WiX补丁并获得这个令人讨厌的异常的人。