当前位置:  开发笔记 > 编程语言 > 正文

WiX 3.0中的平台识别

如何解决《WiX3.0中的平台识别》经验,为你挑选了2个好方法。

将托管代码从x86迁移到x64平台时,我遇到了问题.我有一个WiX项目来创建一个MSI,它将通过Bootstrapper执行.

在x86平台上,文件将根据Project.wxs文件复制到"Program Files"中.但是如果通过Bootstrapper在x64平台上安装了相同的MSI,则默认情况下会将所有安装文件复制到"Program Files(x86)"中,并且应用程序的功能失败,因为它无法在12-hive层次结构中找到所需的文件.程序文件(对于64位,它是"C:\ Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG").

我尝试使用预处理器变量,如<?if $(var.ProcessorArchitecture)= x64?>,但我需要将项目属性中的此变量硬编码为x86或x64.最后,我最终为两个不同的平台提供了两个不同的MSI,这对我来说不是一个理想的解决方案.

那么,通过WiX,是否可以识别平台以确保在所需位置安装?



1> 小智..:

我不相信您将能够拥有一个支持这两个平台的MSI.您需要为x86和另一个x64创建一个 - 好消息是您不需要维护另一个WiX项目来实现这一目标.

我过去这样做的方法是在产品定义的开头有以下内容.




    
      
      
    
      
      
    

    

        

        

    

我忘了在哪里得到建议,为每个平台使用不同的ProductID.

我创建了'win64Flag'变量,以使其他WiX元素在跨平台场景中很好地工作.例如,以下是如何使用它来使单个RegistrySearch定义适用于两个平台,并且应该解决您在定位12-hive层次结构时遇到的问题.


    

完成所有这些后,只需在Candle命令行上传递"Platform"预处理器变量的相关值,或在Visual Studio中选择目标平台即可.


在WiX 3中,不鼓励使用platform属性.他们建议不要使用`-arch`开关来代替蜡烛.http://wix.sourceforge.net/manual-wix3/wix_xsd_package.htm

2> roo..:

您可以使用Condition语句(此处为文档),它将检测安装程序在安装时运行的平台.这允许您只创建一个可在所有平台上运行的安装程序.

对于64位平台VersionNT64的测试是相反的,对非64位平台的测试是NOT VersionNT64.

例如:


    
        
    
    


谢谢.现在这是WIX的另一个问题:通过WIX,当我通过访问其注册表项获取64位组件的安装路径时,由于注册表重定向,它被重定向到WOW6432node,其中注册表项不存在.那么,通过WIX,是否有任何方法可以查看仅使用单个MSI创建的64位注册表视图?据我所知,必须将组件标记为Win64 ="yes"才能使注册表项写入64位注册表配置单元而不是WOW64注册表配置单元.还有其他建议吗?
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有