Wix:从文件路径获取目录

时间:2018-03-07 10:12:25

标签: wix windows-installer installer

我正在为Adobe Illustrator创建一个插件,我正在尝试使用WiX为它安装。因此,为了让插件安装在正确的位置,我正在阅读注册表以找到最新版本的illustrator,然后找到该Illustrator exe的文件路径。这一切都很好,并给了我"C:\Program Files\Adobe\Illustrator CC 2018\Support Files\Contents\Windows\Illustrator.exe"(我已经检查过,如果你选择在其他地方安装它,这条路径反映了这一点)。插件安装在"C:\Program Files\Adobe\Illustrator CC 2018\Plug-ins"中。

所以我现在要做的是使用exe的路径获取Plug-ins文件夹的相对路径。在WiX中有一种简单的方法吗?

我试过用

<CustomAction Id="SETDIRECTORY" Property="PLUGINFOLDER" Value="[ILLUSTRATOREXEPATH]..\..\..\Plug-ins" />

但是这会抛出一个错误,说明..是一个无效的字符

修改

我知道通过使用RegistrySearch类型“文件”设法找出如何获取文件的目录,给我"C:\Program Files\Adobe\Illustrator CC 2018\Support Files\Contents\Windows\"但是无法解决如何获取父目录而不使用脚本(我不想诉诸的东西,因为它显然会导致反病毒问题)。

1 个答案:

答案 0 :(得分:0)

您是否搜索了磁盘上的注册表 INI文件或其他设置文件,以确定插件文件夹的完整路径是否为写在任何地方并准备好使用?

很有可能在某处编写完整路径,或者您将找到一个基本文件夹,您只需以您已经完成的方式添加子文件夹,但没有导致您出现问题的父目录部分。

除了简单地浏览或搜索注册表和磁盘以寻找线索之外,检查原始安装MSI还可以提供有关此路径写入位置的线索。查看IniFile tableRegistry tableEnvironment table和类似内容。

如果你没有工具来仔细阅读MSI文件,或许可以看到这个答案(朝向底部 - 免费工具列表):How can I compare the content of two (or more) MSI files?

如果您没有原始安装程序,我会提交技术说明。在安装过程中,将在您的系统上创建安装MSI的副本。您可以打开此文件以搜索设置。

此VBScript代码段应显示Adobe产品的所有缓存包。将它放在桌面上的* .vbs文件中,然后运行它。弹出一个带有任何结果的消息框(如果没有找到则为空白)。打开指定的MSI路径 - 不对此文件进行任何更改! (或者更好的是,将它复制到桌面并从那里打开)。

On Error Resume Next ' we ignore all errors
Set installer = CreateObject("WindowsInstaller.Installer")
Dim adobeproducts

For Each product In installer.ProductsEx("", "", 7)

   name = product.InstallProperty("ProductName")
   cachedpackage = product.InstallProperty("LocalPackage")

   If InStr(LCase(name), "adobe") Then
      adobeproducts = adobeproducts + name & ", " & cachedpackage & vbCrLf & vbCrLf
   End If

Next

MsgBox adobeproducts