Wix:如何在自定义安装位置执行DirectorySearch

时间:2011-09-08 21:15:52

标签: installer wix

我想检测用户在GUI中选择的自定义安装位置中是否已存在目录。我尝试了以下方法:

<Property Id="DIRECTORY_PATH">
  <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" />
</Property>

但这不起作用,因为DirectorySearch正在AppSearch期间发生。在InstallDirDlg期间稍后设置INSTALLDIR。由于没有及时为AppSearch设置INSTALLDIR,因此DIRECTORY_PATH被错误地设置为“\ MyDirectory”。

我尝试使用InstallUISequence和InstallExecuteSequence更改AppSearch,但它只会让AppSearch在CostInitialize之前出现,不会迟到。

那么如何在用户选择的INSTALLDIR位置进行目录搜索?

2 个答案:

答案 0 :(得分:3)

如果您只需要等待用户选择验证该目录,那么DirectorySearch将不会为您完成这项工作。您必须在用户选择INSTALLDIR后立即创建“set property”自定义操作,例如,在下一次单击InstallDirDlg时。

更新。所以,我的意思基本如下:

  • 当用户访问您的设置的InstallDirDlg时,他/她选择了目录,该目录被放入INSTALLDIR属性
  • 然后,对话框InstallDirDlg应该在Next按钮上触发自定义操作
  • 此自定义操作应获取INSTALLDIR属性的值,并执行简单的文件系统检查INSTALLDIR是否包含MyDirectory
  • 如果是,则将DIRECTORY_PATH属性设置为必要值,例如session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • 否则,DIRECTORY_PATH未设置(您可以通过选中NOT DIRECTORY_PATH)在任何条件下使用此事实

希望它更清楚。

答案 1 :(得分:0)

希望这会对你有所帮助。

如果您已将先前安装的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"/>