WiX:如何从属性值创建文件名

时间:2013-07-03 17:46:45

标签: properties wix installer windows-installer

我有一个正常工作的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的值,因为创建的文件名实际上被称为

[MACHINEINI]

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

  

[xxx]权限= TEST

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

我尝试使用[ComputerName],[COMPUTERNAME],[%COMPUTERNAME]

当我构建安装程序时,出现以下错误:

  

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

1 个答案:

答案 0 :(得分:2)

基础Windows Installer表不支持此功能。请注意,FileName列的类型为FileName。只有格式化类型才能使用[属性]。

IniFile Table

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

由于我不知道您想用什么语言编写自定义操作,因此无法告诉您如何完成此操作。

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