WiX错误确定以前的包版本

时间:2016-09-20 14:18:01

标签: wix windows-installer wix3.10

遇到版本号问题。

我们曾经使用Installshield作为客户端安装程序。自从切换到WiX以来,我们已经“修复”了一些内容,例如版本编号方案。我们曾经使用x.x.x-y,但是WiX不允许“ - ”成为版本#的一部分。

当我尝试使用“虚线”版本#更新旧版已安装的产品时,安装将停止(在它开始之前):

[09A4:1908][2016-09-20T09:20:34]e000: Error 0x80070057: Failed to convert version: 5.3.0-7 to DWORD64 for ProductCode: {...}
[09A4:1908][2016-09-20T09:20:34]e151: Detect failed for package: Client_MSI, error: 0x80070057

该错误似乎导致引擎无法触发OnDetectMsiFeature,但是,引擎确实似乎知道某些功能:

[09A4:1908][2016-09-20T09:20:34]i000: WixWPF: Enter Method: OnDetectPackageComplete
[09A4:1908][2016-09-20T09:20:34]i000: WixWPF: Leaving Method: OnDetectPackageComplete
[09A4:1908][2016-09-20T09:20:34]i101: Detected package: NetFx40Web, state: Present, cached: None
[09A4:1908][2016-09-20T09:20:34]i101: Detected package: vcredist2015x64, state: Present, cached: Complete
[09A4:1908][2016-09-20T09:20:34]i101: Detected package: vcredist2015x86, state: Present, cached: None
[09A4:1908][2016-09-20T09:20:34]i101: Detected package: Client_MSI, state: Unknown, cached: None
[09A4:1908][2016-09-20T09:20:34]i104: Detected package: Client_MSI, feature: FeatureA, state: Unknown
[09A4:1908][2016-09-20T09:20:34]i104: Detected package: Client_MSI, feature: FeatureB, state: Unknown
...
[09A4:1908][2016-09-20T09:20:34]i000: WixWPF: Enter Method: OnDetectComplete

更新

我使用dutil \ fileutil.cpp跟踪版本号的问题。我将第444行的检查更改为:

while (wzPartEnd < wzEnd && ((L'.' != *wzPartEnd)
                         &&  (L'-' != *wzPartEnd)))

接受' - '作为版本分隔符。现在,新的引导程序加载,但是状态检测有问题。虽然它“看到”了包装和功能,但它“看到”所有这些都是“缺席”。

[0280:1050][2016-09-20T12:36:05]i103: Detected related package: {...}, scope: PerMachine, version: 5.3.0.7, language: 0 operation: MajorUpgrade
[0280:1050][2016-09-20T12:36:05]i000: WixWPF: Enter Method: OnDetectRelatedMsiPackage
[0280:1050][2016-09-20T12:36:05]i000: WixWPF: Leaving Method: OnDetectRelatedMsiPackage
[0280:1050][2016-09-20T12:36:05]i000: WixWPF: Enter Method: OnDetectMsiFeature
[0280:1050][2016-09-20T12:40:42]i000: WixWPF: Leaving Method: OnDetectMsiFeature
...
[0280:1050][2016-09-20T12:41:04]i000: WixWPF: Enter Method: OnDetectPackageComplete
[0280:1050][2016-09-20T12:41:07]i000: WixWPF: Leaving Method: OnDetectPackageComplete
[0280:1050][2016-09-20T12:41:07]i101: Detected package: NetFx40Web, state: Present, cached: None
[0280:1050][2016-09-20T12:41:07]i101: Detected package: vcredist2015x64, state: Present, cached: Complete
[0280:1050][2016-09-20T12:41:07]i101: Detected package: vcredist2015x86, state: Present, cached: None
[0280:1050][2016-09-20T12:41:07]i101: Detected package: Client_MSI, state: Absent, cached: None
[0280:1050][2016-09-20T12:41:07]i104: Detected package: Client_MSI, feature: LunaClient, state: Absent
[0280:1050][2016-09-20T12:41:07]i104: Detected package: Client_MSI, feature: FeatureB, state: Absent

所以,我的新问题是:

  1. 为什么旧包和所选功能列表都标记为不存在?
  2. 我可以从中恢复吗?

1 个答案:

答案 0 :(得分:0)

在我工作一个月后更新这个。我发现我需要挂钩另一个事件www-data。我找到this issue and associated code,海报很友好,可以分享,我能够适应我的需求,如下:

DetectRelatedMsiPackage