Installation Wix:如何在自定义安装位置执行DirectorySearch
我想检测用户在GUI中选择的自定义安装位置中是否已经存在目录。我尝试了以下方法:Installation Wix:如何在自定义安装位置执行DirectorySearch,installation,wix,Installation,Wix,我想检测用户在GUI中选择的自定义安装位置中是否已经存在目录。我尝试了以下方法: <Property Id="DIRECTORY_PATH"> <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" /> </Property> 但这不起作用,因为DirectorySearch是在AppSearch期间进行的。而INSTALLDIR是在InstallDirDlg期间稍
<Property Id="DIRECTORY_PATH">
<DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" />
</Property>
但这不起作用,因为DirectorySearch是在AppSearch期间进行的。而INSTALLDIR是在InstallDirDlg期间稍后设置的。由于没有及时为AppSearch设置INSTALLDIR,目录\u路径被错误地设置为“\MyDirectory”
我尝试在AppSearch与InstallUISequence和InstallExecuteSequence一起运行时进行更改,但它只会让AppSearch在CostInitialize之前运行,不会在以后运行
那么如何在用户选择的INSTALLDIR位置执行目录搜索呢?如果您只需等待用户选择验证该目录,那么DirectorySearch将不会为您执行此任务。您必须在用户选择INSTALLDIR之后立即编写一个“set property”自定义操作,例如,在下一次单击InstallDirDlg时 更新。因此,我的意思基本上如下:
<Property Id="DIRECTORY_PATH">
<DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" />
</Property>
- 当用户访问安装程序的InstallDirDlg时,他/她会选择目录,该目录将放入INSTALLDIR属性
- 然后,对话框InstallDirDlg应在“下一步”按钮上触发自定义操作
- 此自定义操作应获取INSTALLDIR属性的值,并执行简单的文件系统检查INSTALLDIR是否包含MyDirectory
- 如果是,目录路径属性将设置为必要的值,例如,
session[“DIRECTORY\u PATH”]=session[INSTALLDIR]+“\MyDirectory”代码>
- 否则,不会设置目录路径(在任何情况下,您都可以通过选中
)来使用此事实)非目录路径
希望这能让事情更清楚。希望这能帮助你 如果您已将以前安装的INSTALLDIR存储在注册表中,则可以获取并搜索它。在安装UI序列中,安装位置将指向上一个位置
<!-- Set previous install location, if available -->
<Property Id="INSTALLDIR" Secure="yes">
<RegistrySearch Id="InstallRootRegistry"
Type="raw"
Root="HKLM"
Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Name="INSTALLDIR" />
</Property>
<!-- The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default -->
<Property Id="WIXUI_INSTALLDIR"
Value="INSTALLDIR" Secure="yes"/>
用户的选择仅标识安装位置,而不标识该位置是否存在我正在搜索的“MyDirectory”子目录。如果没有DirectorySearch,安装程序如何知道是否应该设置属性?您必须自己模拟目录搜索。只要真正的DirectorySearch发生在AppSearch期间,它就不适合您的需要。这就是为什么我引用了“set property”操作-它不仅应该设置属性,还应该做一些逻辑来确定子目录是否存在。我认为上面的评论听起来很混乱:)我会更新我的答案谢谢你的详细回答。让我绊倒的步骤是你的第三项,创建一个自定义操作来进行搜索。我认为这部分不能在Wix中完成,但需要我创建一个包含目录搜索的.dll?对,这不能在Wix中完成,因为这不是AppSearch的典型用例。您必须编写的代码非常简单-只需查找INSTALLDIR的直接子目录