Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation Wix:如何在自定义安装位置执行DirectorySearch_Installation_Wix - Fatal编程技术网

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

Installation Wix:如何在自定义安装位置执行DirectorySearch,installation,wix,Installation,Wix,我想检测用户在GUI中选择的自定义安装位置中是否已经存在目录。我尝试了以下方法: <Property Id="DIRECTORY_PATH"> <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" /> </Property> 但这不起作用,因为DirectorySearch是在AppSearch期间进行的。而INSTALLDIR是在InstallDirDlg期间稍

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

<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的直接子目录