【问题标题】:WiX: How to create file name from a property valueWiX:如何从属性值创建文件名
【发布时间】:2013-07-03 17:46:45
【问题描述】:

我有一个正常工作的 WiX 安装程序,它可以正确地将属性写入某些 INI 文件,工作正常,但我需要根据计算机名称即时生成 INI 文件的名称,例如。

MACHINE(xxx).INI

其中 xxx 是我的计算机名称。

我尝试了各种属性组合,但我似乎无法让它发挥作用。谁能把我说的对吗?

这是我最近一次失败的尝试:

<Property Id="MACHINEINI" Value="MACHINE([%COMPUTERNAME]).ini" />
...
<IniFile Id="IniPermissions"
    Directory="MYDIR"
    Action="addLine"
    Name="[MACHINEINI]"
    Section="[ComputerName]"
    Key="Permissions"
    Value="TEST" />

我从来没有看到 MACHINEINI 的值,因为创建的文件名实际上是被调用的

[机器]

它写入的值是正确的,所以我看到的内容如下:

[xxx] 权限=测试

(其中 xxx 是我的机器名称)

我尝试过使用 [ComputerName]、[COMPUTERNAME]、[%COMPUTERNAME]

当我构建安装程序时,我收到以下错误:

C:\Source\blah\BLAH.wxs(50) : 警告 CNDL1077 : 'MACHINEINI' Pro perty 在其值中包含“[COMPUTERNAME]”,这是非法的 引用其他属性。如果此值是字符串文字, 不是属性参考,请忽略此警告。设置一个 属性与另一个属性的值,使用 CustomAction 与 属性和值属性。

【问题讨论】:

    标签: properties wix installation windows-installer


    【解决方案1】:

    底层的 Windows Installer 表不支持这一点。请注意,FileName 列的类型为 FileName。只有 Formatted 类型可以采用 [PROPERTY]。

    IniFile Table

    您可能需要一个自定义操作来将临时记录写入 IniFile 表以转换文件名。与使用自定义操作来逐字编写 INI 文件相比,其优势在于会自动为您处理回滚。

    由于我不知道您想使用哪种语言来编写自定义操作,因此无法准确告诉您如何执行此操作。

    一种更简单的方法(从安装程序的角度来看)是在单个 INI 中转换 [KEY] 名称,而不是写入不同的 INI 文件。

    【讨论】:

    • 感谢您的快速回复。我以前没有使用过自定义操作,但我想我将不得不这样做。对于 INI 的名称,我真的没有选择余地,因为有大量遗留代码在使用它,而我只是想为它构建一个新的安装程序。我会用更容易的任何语言编写自定义操作(尽管我主要在 Windows 上使用 C# 开发)
    • WiX 有一个叫做 DTF 的东西,用于编写托管的自定义操作。您可以在我的博客 blog.iswix.com、Google 和 StackOverflow 上找到文章。
    • 以下是使用 DTF 的动态创作 MSI 的示例,尽管表不同:blog.deploymentengineering.com/2008/07/…
    • 谢谢,我使用了自定义操作,现在一切正常。
    猜你喜欢
    • 2023-04-02
    • 2013-11-16
    • 2013-08-22
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多