WiX (Windows Installer Xml), 创建通用变量

WiX (Windows Installer Xml), Create universal variables

我通过一些在线教程为 WiX 学习了好几天。我看到三种情况创建一些变量

  1. <? define Variable = "value" ?> 然后使用值作为 $(var.Variable)
  2. 创建本地化文件。以 <String Id="Variable">Value</String> 形式输入内容,然后使用 !(loc.Variable)
  3. 形式的值
  4. 创建一个包含文件。输入内容作为 <Property Id="VARIABLE" Value="value" /> 然后包含文件,在 Fragment 中使用 属性 作为 [VARIABLE]

我知道本地化文件主要用于不同的语言环境。但是我不知道我们什么时候应该使用每个案例。谁能帮忙解释一下?

我没怎么用过这些结构。但是,我认为 Bob Arnson(WiX 开发人员)在 this blog entry about localization 中对此进行了很好的解释(解释很好,但我仍然设法混淆自己 - carbon 错误)。

本质上:

  • Preprocessor 变量 - $(var.Variable) - 由 WiX 预处理器解析 - 它发生在编译之前( Candle.exe).
  • 本地化变量 - !(loc.LanguageLcid) - 在 link 时间解析 (Light.exe) . linking 过程可以吐出多个不同语言的 MSI 文件。因此本地化是一个 link 时间的过程。
  • 请参阅下面的 link 3 以获取本地化示例。本地化后,您可以本地化大部分或所有字段。在下面的示例中,我没有本地化 versionupgrade code - 它们对于所有输出 MSI 文件都保持不变。
  • 您必须在每种情况下确定应该本地化的内容。 Manufacturer 名称是否应该本地化?也许如果您想要亚洲设置的亚洲字符,否则需要等效的拉丁字符名称?
  • 包含文件 只是在编译前包含在 WiX 源代码中。这就像在 C++ 中包含一个头文件。这使它成为一个预处理器结构。有关包含文件的使用的讨论,请参阅下面的 link2
  • 更新:还有 - 如果您使用 WiX 制作 setup.exe 发射器。
  • 维克斯变量:

我相信还有其他技术原因。 Rob or Bob 需要照亮。 WiX 4 中也可能与我在 WiX 3 中习惯的有所不同 - 并且可能会有我不知道的计划更改。


部分链接:

  1. Is it possible to pass variable to WIX localization file?(便于检索)
  2. Wix Installer : Setting component condition property when doing a MSIEXEC admin install at command line(对预处理器构造与其他有用构造的详细描述,以创建不同的设置)
  3. Wix toolset license agreement multi-languages issue(使用本地化)
  4. Wix string with characters not available in database 's codepage although codepage is set
  5. 在各种预处理器构造上 $(env.someval), $(sys.someval), $(var.someval): https://wixtoolset.org/documentation/manual/v3/overview/preprocessor.html