wix – `candle`命令行上的`-arch`参数究竟是什么?

我在WiX 3.7版中设置了32位和64位版本.在充分解释这一问题时,WiX文档存在缺陷.在 documentation for Package/@Platform中,它说“不鼓励使用此属性;而是在candle.exe命令行指定-arch开关”,但是没有解释这个参数实际上做了什么(至少没有我能找到的). “documentation” for the compiler完全值得“文档”这个词的空气引用,因为它基本上是一个存根(例如,与 linker documentation不同).对于历史记录,这里完全是编译器文档:

The Windows Installer XML compiler is exposed by candle.exe. Candle is
responsible for preprocessing the input .wxs files into valid
well-formed XML documents against the WiX schema,wix.xsd. Then,each
post-processed source file is compiled into a .wixobj file.

The compilation process is relatively straight forward. The WiX schema
lends itself to a simple recursive descent parser. The compiler
processes each element in turn creating new symbols,calculating the
necessary references and generating the raw data for the .wixobj file.

命令行帮助提供了一点,但还不够.

-arch      set architecture defaults for package,components,etc.
           values: x86,x64,or ia64 (default: x86)

在一个相关的问题,Platform identification in WiX 3.0,有关于可能发生的事情的one answer with a sliver of hint,但这还不够,我不知道它是否准确.

> -arch参数与设置Package / @ Platform属性具有相同的效果,还是更多?
>论证是否影响preprocessor中的任何可用内容?特别是,它是否设置了PLATFORM预处理器变量?它还有其他什么吗?
>什么是架构“默认”?显式Package / @ Platform属性是否覆盖命令行?或相反亦然?或者(更好的是)如果存在不一致的平台声明会出现错误吗?

其中一些问题的答案看起来应该是显而易见的,事实上我只是在写这个问题时学到了一些东西.但我想要一个明确的答案,最好(提示)指向蜡烛命令行的更新和准确的文档页面的链接.我确实希望在任何人回答的时候已经解决了这个问题,但是,我会尽快拯救其他人,因为我会花时间来解决这个问题.

另一个相关问题WIX: is the Platform attribute of the Package element truly deprecated?讨论了Package / @ Platform属性,但未解决命令行参数.

关于该PLATFORM预处理器变量.它现在显然是BUILDARCH,尽管你很难从文档中了解它.

warning CNDL1034 : The built-in preprocessor variable '$(sys.PLATFORM)' is 
deprecated. Please correct your authoring to use the new '$(sys.BUILDARCH)' 
preprocessor variable instead.

解决方法

以下代码段启用32位和64位版本之间的编译时配置,而不引入表示平台的用户变量,而是使用系统提供的用户变量.两个定义的变量都是普通安装的通用变量. 64位系统的最低版本更高.基本程序文件目录在32位和64位版本之间有所不同.
<?if $(sys.BUILDARCH)="x86"?>
    <?define Minimum_Version="100"?>
    <?define Program_Files="ProgramFilesFolder"?>
<?elseif $(sys.BUILDARCH)="x64"?>
    <?define Minimum_Version="200"?>
    <?define Program_Files="ProgramFiles64Folder"?>
<?else?>
    <?error Unsupported value of sys.BUILDARCH=$(sys.BUILDARCH)?>
<?endif?>

稍后在WiX源中使用这些定义.

<Package [...]
    InstallerVersion="$(var.Minimum_Version)"
/>

<Directory Id="$(var.Program_Files)">
    [...]
</Directory>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format=&#39;{{.LogPath}}&#39; &lt;container_name&gt; 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户