2

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

机器(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”属性的值中包含“[COMPUTERNAME]”,这是对其他属性的非法引用。如果此值是字符串文字,而不是属性引用,请忽略此警告。要使用另一个属性的值设置一个属性,请使用具有 Property 和 Value 属性的 CustomAction。

4

1 回答 1

2

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

IniFile 表

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

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

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

于 2013-07-03T18:53:47.463 回答