我有这样的WiX代码:
<DirectoryRef Id="MyShortcutsDir">
<Component Id="CMP_StartMenuShortcuts" Guid="62A9F5D2-F9D9-4F9B-8382-D470E11B2332">
<Shortcut Id="docEng" Name="UFCOM user guide - ENG (pdf)" Target="[INSTALLFOLDER]UFCOM user guide - ENG.pdf" />
<Shortcut Id="docChs" Name="UFCOM user guide - CHS (pdf)" Target="[INSTALLFOLDER]UFCOM user guide - CHS.pdf" />
<Shortcut Id="UninstallShortcut" Name="Uninstall [ProductName] ~ [ProductVersion]" Target="[System64Folder]msiexec.exe" Arguments="/x [ProductCode]" Description="Remove UFCOM from your Windows" />
<RemoveFolder Id="RemoveMyShortcutsDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\Newland Auto-ID\UFCOM" Name="installed" Type="integer" Value="1" KeyPath="yes" />
<!-- On Win7, these shortcuts(.lnk) resides in "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\UFCOM" -->
</Component>
</DirectoryRef>
但是我发现[ProductCode]可以在[ProductName]不能的时候出现,为什么会这样呢?那么如何在元素中引用产品名称定义?
<Product Id="*" Name="UFCOM Driver 1.3.6" ... >
</Product>
答案 0 :(得分:7)
方括号中的属性名称仅由MSI安装程序针对MSI数据库中Formatted列类型中的数据进行扩展。安装产品时会发生扩展。
在MSI数据库的Shortcut表中:
[ProductCode]
。[ProductName]
和[ProductVersion]
。您可以使用WIX属性,这些属性在WIX构建过程中展开。例如:
<?define ProductName='My Product Name' ?>
<?define ProductVersion='X.Y.Z' ?>
<Shortcut Id="UninstallShortcut"
Name="Uninstall $(var.ProductName) ~ $(var.ProductVersion)"
Target="[System64Folder]msiexec.exe"
Arguments="/x [ProductCode]"
Description="Remove UFCOM from your Windows" />
答案 1 :(得分:2)
括号中的属性在“格式化”属性中展开。对于快捷方式,Shortcut table定义了Arguments的格式,但Name不是。
您可以定义变量
<?define MyProductName = "UFCOM Driver 1.3.6" ?>
然后在Product / @ Name和Shortcut / @ Name:
中使用它<Product Name="$(var.MyProductName)"
<Shortcut Name="Uninstall $(var.MyProductName)"