如何将WiX属性默认为null?

时间:2014-09-05 22:03:09

标签: wix installation installer windows-installer

我正在开发一组WiX安装程序,这些安装程序将共享一个共同的表单。每个应用程序都需要设置的值,但每个应用程序的值都不同。

我试图允许属性(链接到控件)具有默认值(或不允许),并允许通过命令行设置属性值。

在我的" SharedDialog.wxs"我有:

<Fragment>
   <PropertyRef Id="PROP1"/>
   <PropertyRef Id="PROP2"/>
   <UI>
      <Dialog Id="SharedDialog" Width="370" Height="270" Title="[ProductName]">
         <Control Type="Edit" Id="1" Property="PROP1" Wid... Indirect="no" />
         <Control Type="CheckBox" Id="2" Property="PROP2" Wid...  
           CheckBoxValue="1" Indirect="no"/>
      </Dialog>
</Fragment>

在特定于应用程序的项目的文件中:

<Fragment>
   <Property Id="PROP1" Value="Test"/>
   <Property Id="PROP2" Value="1"/>
</Fragment>

这一切都适用于我想要做的事情,但问题是当我想要清除这些值时:(所以他们没有默认值)

<Fragment>
   <Property Id="PROP1"/>
   <Property Id="PROP2"/>
</Fragment>

我收到此错误:

Unresolved reference to symbol 'Property:PROP1' in section 'Fragment:'. 
Unresolved reference to symbol 'Property:PROP2' in section 'Fragment:'.

WiX也不允许您将值设置为&#34;&#34;。问题是,到目前为止,我可以告诉复选框将始终检查属性是否有值。如何设置属性&#34; PROP2&#34;到&#34; null&#34;?

2 个答案:

答案 0 :(得分:3)

  • 您可以取消定义现有属性,方法是将其设置为包含在大括号中的空字符串:设置属性自定义操作中的PROPERTY = {}。这意味着该属性不存在,它不是空字符串。 See the explanation here
  • 对于可从命令行使用的属性,它们必须是PUBLIC - 它们都是大写的属性。
  • 设置PUBLIC PROPERTIES安全意味着可以将它们从客户端传递到服务器安装过程,这是在延迟模式自定义操作中使用的属性所必需的。从技术上讲,这会将它们添加到SecureCustomProperties
  • 列表中
  • 您可以在属性表中为PUBLIC PROPERTIES提供默认值,然后从命令行设置其他值。命令行会覆盖默认值:

    msiexec.exe / I&#34; C:\ Test.msi&#34; / QN / L * V&#34; C:\ log.log&#34; TEST =&#34; myvalue的&#34; TEST2 =&#34; myvalue的&#34;

查看更多信息: How to set a check box to "unchecked" from the msiexec command line?

答案 1 :(得分:2)

Nvm ......我找到了解决方案

<Fragment>
   <Property Id="PROP1" Secure="yes"/>
   <Property Id="PROP2" Secure="yes"/>
</Fragment>