【发布时间】:2018-02-02 08:16:23
【问题描述】:
我需要用户能够为我的安装设置多个不同的目标目录。
我有这个目录结构:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="DCOMPANY" Name="MyCompany" >
<Directory Id="DMAIN" Name="MainDir">
<Directory Id="DPART1" Name="Part1"/>
<Directory Id="DPART2" Name="Part2"/>
</Directory>
</Directory>
</Directory>
</Directory>
我这里也有这些属性
<Property Id="WIXUI_INSTALLPATH" Hidden="yes" />
<Property Id="VARIABLE_PATH_DPART1" Value="DPART1" />
<Property Id="VARIABLE_PATH_DPART2" Value="DPART2" />
为了覆盖单个 InstallDirDialog,我复制了 WIXUI_InstallDir.wxs 和 InstallDirDlg.wxs 文件。我复制了 InstallDirDlg.wxs 并将数字 1 和 2 添加到文件的末尾,在所有三个前缀上加上 custom_ 并相应地更改了它们的 UI-Tags:
现在,在 custom_WIXUI_InstallDir.wxs 中,我稍微更改了这个块,所以我希望我的属性正在由操作设置:
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="custom_InstallDirDlg1">LicenseAccepted = "1"</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Back" Event="NewDialog"
Value="LicenseAgreementDlg">1</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Next"
Event="SetTargetPath" Value="[VARIABLE_PATH_DPART1]" Order="1">1</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Next" Event="DoAction"
Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Next" Event="SpawnDialog"
Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND
WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Next" Event="DoAction"
Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND
WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="Next" Event="NewDialog"
Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR
WIXUI_INSTALLDIR_VALID="1"</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="ChangeFolder"
Property="_BrowseProperty" Value="[VARIABLE_PATH_DPART1]"
Order="1">1</Publish>
<Publish Dialog="custom_InstallDirDlg1" Control="ChangeFolder"
Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog"
Value="custom_InstallDirDlg1" Order="1">NOT Installed</Publish>
在 custom_InstallDirDlg1.wxs 中,我还将这一行更改为我的路径变量:
<Control Id="Folder" Type="PathEdit" X="20" Y="100" Width="320"
Height="18" Property="VARIABLE_PATH_DPART1" Indirect="yes" />
当我现在编译时,一切都会被创建,当我运行安装程序时,当我单击“更改...”按钮或“下一步...”按钮时,安装程序会冻结大约 30 秒,然后显示“指定的路径 DPART1 不可用。”
当我查看在所有这些 CDATA 块中调用的自定义操作的来源时,我发现那些只关心 WIXUI_INSTALLPATH 并且不接受给他们的任何东西。所以它几乎使用了间接。
我还在某处读到,此对话框可以重复使用,让用户输入多个目标路径,但我不知道如何。
请帮忙:)
【问题讨论】:
-
我目前没有时间详细阅读此内容,但请看一下这个答案:WiX-installer With Configurable Feature Directory(朝向中间,如果看起来还有其他答案相关)。
-
非常感谢。这实际上帮助了我很多。遗憾的是我没有找到它,因为我一直在寻找“多个自定义目标目录”等。如果你愿意,我可以给你赏金:D 实际上,目前我什至不能在你链接的这篇文章上投票给你的答案,因为我没有足够的声誉:D
-
暂时不用担心赏金问题,如果有帮助,请尝试一下。我没有对其进行太多测试 - 请进行测试并让我们知道您发现了什么。该对话框来自 WiX Mondo 对话框集顺便说一句 - 但我假设您已经解决了所有这些问题? I describe setting up a minimal WiX compile with the Mondo dialog set here.
-
是的,我根据您使用功能来区分软件各部分的想法进行了整理;以便每个都可以安装到不同的目录。我还确保不能通过将它们的“缺席”标志设置为 false 来禁用这些“功能”,并将相应的组件设置为 location="local",以便无法选择“从网络安装”选项用户。
-
好的,太好了。请务必检查使用这种方法(安装、修复、修改、自我修复、修补等)在不同安装模式下会发生什么。 MSI 通常不会自动保存属性,但功能目录可能会 - 不幸的是,我没有足够地使用它们来确定。另请注意,它们可能可以在命令行中设置并因此覆盖。我明天应该测试一下。如果我完成了,我会通知你的。
标签: user-interface wix windows-installer wix3.5