WiX注册表搜索条文件名

WiX注册表搜索条文件名,wix,Wix,我正在构建一个WiX安装程序,我想在其中对第三方应用程序的安装目录进行注册表搜索。我感兴趣的第三方应用程序在HKLM下创建了一个注册表项,该注册表项不仅指向安装目录,还包括文件名和扩展名(即C:/Program Files/MyApp/MyApp.exe)。我需要的只是实际的父目录(即C:/Program Files/MyApp),这样当我进行目录/文件搜索时,它就会在正确的位置上。有没有办法修改从注册表搜索返回的@Property,使其只包含父目录并去掉文件名和扩展名?以下是我所拥有的: &l

我正在构建一个WiX安装程序,我想在其中对第三方应用程序的安装目录进行注册表搜索。我感兴趣的第三方应用程序在HKLM下创建了一个注册表项,该注册表项不仅指向安装目录,还包括文件名和扩展名(即C:/Program Files/MyApp/MyApp.exe)。我需要的只是实际的父目录(即C:/Program Files/MyApp),这样当我进行目录/文件搜索时,它就会在正确的位置上。有没有办法修改从注册表搜索返回的@Property,使其只包含父目录并去掉文件名和扩展名?以下是我所拥有的:

<Property Id="MYAPPINSTALLFOLDER">
  <RegistrySearch Id='InstallPathRegistry' 
       Type='raw' 
       Root='HKLM' 
       Key='SOFTWARE\Company\SomeLongPath' 
       Name='FileName' 
       Win64='yes'/>
</Property>

<Property Id="ISINSTALLED">
  <DirectorySearch Id="CheckFileDir" Path="[MYAPPINSTALLFOLDER]" Depth="0">
    <FileSearch Id="CheckFile" Name="myapp.exe" />
  </DirectorySearch>
</Property>

创建一个单独的类,您可以在其中添加自己的自定义操作:

public static class InstallCustomActions
    {
        [CustomAction]
        public static ActionResult GetDirectoryFromPath(Session session)
        {
            string fullPath = session["MYAPPINSTALLFOLDER"];
            session["MYAPPINSTALLFOLDER"] = Path.GetDirectoryName(fullPath); //You can also create a separate property. In that case I would rename MYAPPINSTALLFOLDER to MYAPPFULLPATH.
        }
     }
然后声明CustomAction(在Product.wxs或单独的.wxi文件中):


然后您可以在UISequence中调用它,例如:

<Publish Dialog="MyDlg" Control="Next" Event="DoAction" Value="GetDirectoryFromPath" Order="1">1</Publish>
1
如果有什么不清楚的地方,请告诉我。这是基于一个正在工作的项目,但我还没有测试这个特定的代码修改后,以符合您的要求

<Publish Dialog="MyDlg" Control="Next" Event="DoAction" Value="GetDirectoryFromPath" Order="1">1</Publish>