2011-09-08 45 views
6

我想要检测用户在GUI中选择的自定义安装位置中是否已经存在目录。我试过以下内容:Wix:如何在自定义安装位置中执行DirectorySearch

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

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

我试着改变AppSearch与InstallUISequence和InstallExecuteSequence一起发生的时间,但它只会让AppSearch在CostInitialize之前出现,不会晚。

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

回答

3

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

UPDATE。所以,我的意思是基本如下:

  • 当用户到达您设置的InstallDirDlg,他/她选择的目录,这是投入INSTALLDIR属性
  • 然后在对话框InstallDirDlg应该触发自定义下一步按钮操作
  • 这个自定义操作应该得到INSTALLDIR属性的值,并做了简单的文件系统安装目录检查是否包含mydirectory中
  • 如果这样做,将目录路径属性设置为所需的值,例如session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • 否则,目录路径未设置(你可以在任何条件下通过检查NOT DIRECTORY_PATH利用这一点)

希望这使得它更清晰。

+0

用户的选择只能识别安装位置,而不是我在该位置中是否存在要搜索“MyDirectory”的子目录。没有DirectorySearch,安装程序如何知道它是否应该设置属性? – Michael

+0

你必须自己模拟目录搜索。只要在AppSearch中发生真正的DirectorySearch,它不适合您的需求。这就是为什么我引用“set property”动作的原因 - 它不仅应该设置属性,还应该执行一些逻辑来确定子目录是否存在。 –

+0

我觉得上面的评论听起来令人困惑:)我会更新我的回答 –

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"/> 
相关问题