WiXToolsets错误PYRO0001:对象引用未设置为对象的实例

时间:2017-09-29 10:05:04

标签: wix

使用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工具的执行顺序:

  1. candle.exe -out Patch.wixobj -ext WixUIExtension -ext WixNetFxExtension -arch x86
  2. light.exe -out Product_1.wixout Product_1.wixobj -xo -ext WixUIExtension -ext WixNetFxExtension
  3. light.exe -out Product_2.wixout Product_2.wixobj -xo -ext WixUIExtension -ext WixNetFxExtension
  4. torch.exe -out Diff.wixmst Product_wixout Product_2.wixout -p -xi -ext WixUIExtension -ext WixNetFxExtension
  5. light.exe -out Patch.wixmsp Patch.wixobj -ext WixUIExtension -ext WixNetFxExtension
  6. pyro.exe -outPatch.msp Patch.wixmsp -t MyPatch Diff.wixmst
  7. 请告知。

    非常感谢

1 个答案:

答案 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补丁并获得这个令人讨厌的异常的人。