在 Wix 安装程序脚本中有条件地设置快捷方式参数
Conditionally set shortcut arguments in wix installer script
我有以下WIX快捷方式。
<!--Desktop shortcuts-->
<Directory Id="DesktopFolder" Name="Desktop">
<Component Id="CMP_DesktopShortcuts" Guid="{guidblah}">
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Arguments="$(var.CmdLineArgs)"
Target="blah.exe">
</Shortcut>
<RegistryValue Root="HKCU"
Key="Software\blah"
Name="DesktopShortcutInstalled"
Type="integer"
Value="1"
KeyPath="yes"
/>
</Component>
</Directory>
我根据正在构建的安装程序在我的构建脚本中设置了 CmdLineArgs。我的构建脚本之一没有命令行参数,因此将 CmdLineArgs 设置为 null。
然后我得到这个错误:
error CNDL0006: The Shortcut/@Arguments attribute's value cannot be an
empty string. If a value is not required, simply remove the entire
attribute.
如何仅在 $(var.CmdLineArgs) 不为空时有条件地设置参数?
使用 preprocessor 有条件地编译一个 Shortcut
元素,有或没有 Arguments
属性取决于变量。
<?ifdef CmdLineArgs?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Arguments="$(var.CmdLineArgs)"
Target="blah.exe">
</Shortcut>
<?else?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Target="blah.exe">
</Shortcut>
<?endif?>
不幸的是这里有一些重复,因为预处理器条件不能应用于属性级别,元素是最小的粒度。
以下为无效 XML:
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
<?ifdef CmdLineArgs?>
Arguments="$(var.CmdLineArgs)"
<?endif?>
Target="blah.exe">
</Shortcut>
您也可以通过对其他属性使用预处理器变量来消除一些重复,例如。 g.:
<?ifdef CmdLineArgs?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="$(var.ProductName)"
Description="$(var.ProductDescription)"
Arguments="$(var.CmdLineArgs)"
Target="$(var.ProductExeFile)">
</Shortcut>
<?else?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="$(var.ProductName)"
Description="$(var.ProductDescription)"
Target="$(var.ProductExeFile)">
</Shortcut>
<?endif?>
Id
属性不太可能更改,因此我将其保留原样以提高可读性。
我有以下WIX快捷方式。
<!--Desktop shortcuts-->
<Directory Id="DesktopFolder" Name="Desktop">
<Component Id="CMP_DesktopShortcuts" Guid="{guidblah}">
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Arguments="$(var.CmdLineArgs)"
Target="blah.exe">
</Shortcut>
<RegistryValue Root="HKCU"
Key="Software\blah"
Name="DesktopShortcutInstalled"
Type="integer"
Value="1"
KeyPath="yes"
/>
</Component>
</Directory>
我根据正在构建的安装程序在我的构建脚本中设置了 CmdLineArgs。我的构建脚本之一没有命令行参数,因此将 CmdLineArgs 设置为 null。
然后我得到这个错误:
error CNDL0006: The Shortcut/@Arguments attribute's value cannot be an empty string. If a value is not required, simply remove the entire attribute.
如何仅在 $(var.CmdLineArgs) 不为空时有条件地设置参数?
使用 preprocessor 有条件地编译一个 Shortcut
元素,有或没有 Arguments
属性取决于变量。
<?ifdef CmdLineArgs?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Arguments="$(var.CmdLineArgs)"
Target="blah.exe">
</Shortcut>
<?else?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
Target="blah.exe">
</Shortcut>
<?endif?>
不幸的是这里有一些重复,因为预处理器条件不能应用于属性级别,元素是最小的粒度。
以下为无效 XML:
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="Software"
Description="Software Description"
<?ifdef CmdLineArgs?>
Arguments="$(var.CmdLineArgs)"
<?endif?>
Target="blah.exe">
</Shortcut>
您也可以通过对其他属性使用预处理器变量来消除一些重复,例如。 g.:
<?ifdef CmdLineArgs?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="$(var.ProductName)"
Description="$(var.ProductDescription)"
Arguments="$(var.CmdLineArgs)"
Target="$(var.ProductExeFile)">
</Shortcut>
<?else?>
<Shortcut Id="Shotcut_Editor_Desktop"
Name ="$(var.ProductName)"
Description="$(var.ProductDescription)"
Target="$(var.ProductExeFile)">
</Shortcut>
<?endif?>
Id
属性不太可能更改,因此我将其保留原样以提高可读性。