Wix: получить каталог из пути к файлу

Я создаю плагин для Adobe Illustrator и пытаюсь сделать установщик для него с помощью WiX. Поэтому, чтобы установить плагин в правильном месте, я читаю реестр, чтобы найти самую последнюю версию Illustrator, а затем найти путь к файлу этого исполняемого файла Illustrator. Это все прекрасно работает и дает мне "C:\Program Files\Adobe\Illustrator CC 2018\Support Files\Contents\Windows\Illustrator.exe" (Я проверил, и если вы решите установить его в другом месте, этот путь отражает это). Плагины установлены в "C:\Program Files\Adobe\Illustrator CC 2018\Plug-ins",

Итак, что я сейчас пытаюсь сделать, это с помощью пути к exe получить относительный путь к папке с плагинами. Есть ли простой способ сделать это в WiX?

Я пытался использовать

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

но это выдает ошибку о том, что.. это недопустимый символ

РЕДАКТИРОВАТЬ:

Я знаю, что удалось выяснить, как получить каталог файла с помощью реестра типа "файл", давая мне "C:\Program Files\Adobe\Illustrator CC 2018\Support Files\Contents\Windows\" но не могу понять, как получить родительский каталог без использования скрипта (что-то, к чему я не хочу прибегать, так как это может вызвать проблемы с антивирусом).

1 ответ

Вы искали в реестре или INI-файлах или других файлах настроек на диске, чтобы определить, записан ли где-нибудь полный путь к папке плагинов и готов ли к использованию?

Есть хорошие шансы, что где-то записан полный путь, или вы найдете базовую папку, в которую вы можете просто добавить подпапки тем способом, который вы уже сделали, но без разделов родительского каталога, которые вызывают у вас проблемы.

В дополнение к простому просмотру или поиску улик в реестре и диске, проверка исходной установки MSI также может дать подсказки относительно того, где записан этот путь. Посмотри в IniFile table, Registry table, Environment table и тому подобное.

Если у вас нет инструмента для просмотра MSI-файлов, возможно, посмотрите на этот ответ (в нижней части списка бесплатных инструментов): Как я могу сравнить содержимое двух (или более) MSI-файлов?


Я добавлю техническую заметку, если у вас нет оригинального установщика. Во время установки в вашей системе будет сделана копия установочного 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
Другие вопросы по тегам