Wix安装程序包产生损坏的“msi”

时间:2013-10-02 10:24:25

标签: wix bundle wix3.7 burn

使用与示例中几乎相同的非常简单的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Version="1.0" Manufacturer="ACME" UpgradeCode="6AF8AF7D-3B44-4496-9E64-56206DF66C55">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/>
    <Chain>
    <MsiPackage SourceFile="wpftoolkit.msi"/>
    </Chain>
    </Bundle>
    </Wix>

我得到一个setup.msi文件,它在开始时会产生错误:

    msiexec /i setup.msi /l*v log.txt
    log.txt:
    === Verbose logging started: 02.10.2013  14:12:11  Build type: SHIP UNICODE 5.00.7600.00  Calling process: C:\Windows\system32\msiexec.exe ===
    MSI (c) (B0:48) [14:12:11:804]: Font created.  Charset: Req=204, Ret=204, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
    MSI (c) (B0:48) [14:12:11:805]: Font created.  Charset: Req=204, Ret=204, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
    MSI (c) (B0:A4) [14:12:11:823]: Resetting cached policy values
    MSI (c) (B0:A4) [14:12:11:823]: Machine policy value 'Debug' is 0
    MSI (c) (B0:A4) [14:12:11:823]: ******* RunEngine:
    ******* Product: Setup.msi
    ******* Action: 
    ******* CommandLine: **********
    MSI (c) (B0:A4) [14:12:11:824]: Note: 1: 2203 2: Setup.msi 3: -2147286960 
    MSI (c) (B0:A4) [14:12:11:824]: MainEngineThread is returning 1620
    === Verbose logging stopped: 02.10.2013  14:12:11 ===

来自Wix SDK的工具dark.exe表示setup.msi已损坏,无法进行反汇编。 上周好几次我设法编译了这种类型的包,msi运行良好,但我无法弄清楚我在做什么之间的任何关联。

我也尝试在不使用MSBuild的情况下编译此示例,但是直接使用Wix SDK工具 - 仍然没有运气 - 编译完成没有错误,但最终导致msi损坏:

    candle *.wxs
    light *.wixobj -out setup.msi -ext WixBalExtension

有没有我错过编译Wix捆绑包以防止它正常工作的东西?

2 个答案:

答案 0 :(得分:2)

Wix/Bundle用于生成将安装程序链接在一起的可执行文件。因此,输出应该是.exe扩展名。

您可以手动调用WiX Toolset编译器和链接器,因为您似乎已经完成或使用了MSBuild项目。 WiX安装了一个供Visual Studio使用的模板项目。它被称为WiX Bootstrapper。如果你不知道,Visual Studio和SharpDevelop项目都是MSBuild项目。因此,还有两种方法可以构建构建:通过IDE或命令行使用msbuild.exe。

注意:如果在Visual Studio之前安装WiX,Visual Studio将不会显示四个WiX项目模板。在这种情况下,只需修复WiX安装。

答案 1 :(得分:0)

这绝对违反直觉,但我认为我找到了一个解决方案:

candle *.wxs
light *.wixobj -out setup.EXE -ext WixBalExtension

输出格式为 EXE ,而不是 MSI 。简单,对吧?

BTW,SharpDevelop(以及Visual Studio,我相信)没有任何选项可以将输出文件指定为EXE - 仅限MSI,msp和wixlib。