我一直在搜寻StackOverflow,博客和FireGiants教程以获得几天的明确答案。似乎每个人都有与WiX做一些稍微不同的方式,并且没有足够的代码来真正回答我遇到的问题。WiX安装条件
我有一个安装程序,它将创建文件夹,向下复制文件,注册DCOM dll,添加服务和注册表项。所有这些工作正常。甚至设法最终创建一个自定义的用户界面,将编译,并没有过多的对话来惹恼我。
什么我不能为我的生活找出是使用条件标签有一个选项,只安装客户端文件,或者客户端和服务器。
我有一个对话框,其中有两个按钮用于设置属性,并且该属性用于要安装文件的条件。
DlgWelcome.wxs:
<Fragment>
<UI Id="WelcomeUI">
<Property Id="INSTALLCLIENT" Value="0" Secure="yes"/>
<Property Id="INSTALLSERVER" Value="0" Secure="yes"/>
<Dialog Id="WelcomeDlg" Width="370" Height="270" Title="!(loc.WelcomeDlgTitle)" NoMinimize="yes">
<Control Type="Text" Id="WelcomeDlgTxt" Width="350" Height="30" X="10" Y="60" Text="!(loc.WelcomeDlgText)" />
<Control Type="PushButton" Id="InstallClient" Width="350" Height="50" X="10" Y="90">
<Text>!(loc.ClientInstallBtnText)</Text>
<Publish Property="INSTALLCLIENT" Value="1"/>
<Publish Event="NewDialog" Value="ProgressDlg"/>
</Control>
<Control Type="PushButton" Id="InstallServer" Width="350" Height="50" X="10" Y="150">
<Text>(loc.InstallServerBtnText)</Text>
<Publish Property="INSTALLSERVER" Value="1"/>
<Publish Property="INSTALLCLIENT" Value="1"/>
<Publish Event="NewDialog" Value="ProgressDlg" />
</Control>
</UI>
</Fragment>
Product.wxs:
...
<Feature Id="Installation" Title="Install Stuffs" Display="expand">
<Feature Id="ServerInstall" Level="1" >
<ComponentGroupRef Id="ServerFiles" />
<ComponentRef Id="RegistryForServer"/>
<Condition Level="0">INSTALLSERVER</Condition>
</Feature>
<Feature Id="ClientInstall" Level="1" >
<ComponentGroupRef Id="ClientFiles"/>
<ComponentRef Id="RegistryForClient"/>
<Condition Level="0">INSTALLCLIENT</Condition>
</Feature>
</Feature>
<UI>
<InstallUISequence>
<CostInitialize />
<FileCost />
<CostFinalize />
<Show Dialog="WelcomeDlg" After="CostFinalize"/>
<ExecuteAction />
</InstallUISequence>
</UI>
一些我已经试过了我见过的验证解决方案的各个岗位都有过的事情显然解决了类似的问题(不能确认他们是否使用相同版本的WiX,但没有工作):
- 如果以不同的方式声明属性:可以从命令行访问的所有大小写(我不使用),以及....这两者似乎都不起作用。
- 将条件移至各个组件。什么也没做。
- 移动NewDialog前后的Publish属性标签。没有效果。
- 使财产安全。没有。
所以我在我的智慧结束与此。有人能指出我做错了什么,所以我可以完成这个安装程序,并希望永远不会再看到WiX?
如果您希望在任何一种情况下安装客户端文件,您是否有必要将INSTALLCLIENT作为条件?我怀疑这实际上可以解决您的问题,但它可能会使代码稍微复杂一些。 –
这不是,来想一想吧。我会删除它。这对于将来的打样比什么都重要,将来安装人员可能会需要更多的选择。但问题仍然是我缺少一些关于条件如何工作的东西。 – Daealis
请尝试我的解决方案,如果这不起作用,请仔细研究条件标签的级别属性是如何工作的,因为我相当确定问题出在哪里。 –