WiX 3.8 MSI适用于32位和64位计算机

时间:2014-01-09 10:50:21

标签: wix burn wix3.8

我有Visual Studio 2012,WiX 3.8安装项目和Burn引导程序。如果我的目标是32位机器,一切正常。我想创建两个单独的MSI文件32位和64位本地化。但是,我在配置管理器中找不到64位目标选项。所以,我手动创建了一个x64目标并尝试编译安装项目。但它彻底失败了。我无法包含以下文件:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

    <?include $(var.ProjectDir)\Includes\Variables.wxi ?>

    <Fragment>
        <CustomAction somecustomaction />
        ...
        More custom actions...
        ...
    </Fragment>
</Wix>

我得到的错误是:

  

错误33架构验证失败,第1行第206行出现以下错误:     名称空间“http://schemas.microsoft.com/wix/2006/wi”中的元素“Wix”不能     包含文字。预期可能元素列表:'捆绑产品模块补丁     Fragment PatchCreation'。 somefile.wxs 2 1 Some.Installer Installer_x64 \ Some.Installer)

当我删除include标记时,它会编译。但我需要在其他文件中使用这样的include指令,其中我引用了一些变量。我真的不明白这个问题。 include标签适用于32位,那么为什么在使用64位目标时会抛出错误?这是什么问题?

是否有针对不同平台创建设置的最佳做法?我也使用Burn bootstrapper和英语和德语的本地化。我在Stack Overflow上遇到了类似的问题,但到目前为止没有任何帮助。

3 个答案:

答案 0 :(得分:2)

错误发生在项目文件中。在我的菜单 Build - &gt; Configuration Manager ,我已将 Active 构建配置设置为 Release | x64 。但是,Visual Studio不会自动将我的项目文件内容更改为 Release | x64

当我手动编辑项目文件时,我将平台更改为x64,但我错过了将配置更改为 Release 。它是在 Debug | x64 模式下,我的Visual Studio安装尝试在 Release | x64 模式下编译。现在,当我手动将项目文件编辑到 Release | x64 时,错误已解决并且我的设置正在编译。

但是,据我所知,我仍然不明白为什么candle.exe在Visual Studio 2012出现问题时给了我这个错误。如果我错了,有人会纠正我。

答案 1 :(得分:0)

我的设置与你几乎相同(WiX 3.8,针对两个不同的平台,包括“Variables.wxi”文件,...),它的工作非常好。我最好的猜测是你的Variables.wxi中出了问题。

要根据目标平台切换某些值,请使用$(var.Platform)变量:

<!-- x86 / x64 switch -->
<?if $(var.Platform)=x64 ?>

<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define Win64 = "yes"?>
<?define ProductName = "Datacard EzPrint Plugin (64 bit)" ?>

<?else ?>

<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define Win64 = "no"?>
<?define ProductName = "Datacard EzPrint Plugin" ?>

<?endif ?>

答案 2 :(得分:0)

Include标记移到Wix标记之外。

错误告诉您Wix代码中包含无效内容。