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