2013-10-02 119 views
1

使用非常简单的代码几乎相同的例子:维克斯安装程序捆绑产生腐败的“MSI”

<?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> 

我得到的是,在开始imidiatly产生错误文件的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,而是直接与维克斯SDK工具 - 仍然没有运气 - 编译完成且没有错误,但导致MSI已损坏反正:

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

有什么我错过了编译Wix捆绑包,阻止它正常工作?

回答

0

这绝对是违反直觉的,但我想我已经找到了解决办法:

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

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

顺便说一下,SharpDevelop(以及Visual Studio,我相信)没有任何选项来指定输出文件为EXE - 仅MSI,msp和wixlib。

+0

作为SharpDevelop IDE的一种解决方法,我添加了一个用Setup.exe替换Setup.msi的后生成脚本(只是重命名并不能解决问题)。为什么我不只是切换到一些make.bat文件,主要原因是wxs文件中有几个预处理器变量(即$(var.OtherProject.TargetPath))需要在编译步骤(candle.exe)上解析, 。所以后构建脚本是: rm $(Target); (配置)\ *。wixobj -ext WixBalExtension -out bin \ $(配置)\ $(SolutionName).exe – Ujin

2

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

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

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

+0

在SharpDevelop中,我没有创建Wix Budle项目的选项。只有空项目和不同风格的WixUI项目。在指定输出文件参数的.wixproj文件中也没有选项。我相信这取决于一个特定的wix .target文件。 – Ujin