Как установить файл в каталог, указанный в ключе / значении реестра в проекте Installshield Installscript-MSI? - PullRequest
1 голос
/ 01 мая 2009

Один из файлов в моей установке необходимо скопировать в папку, указанную парой ключ / значение реестра на целевом компьютере пользователя.

Прямо сейчас у меня есть некое хитрое решение, в котором у меня есть файлы, настроенные для копирования в [TempFolder] в представлении «Компоненты», а затем некоторый пользовательский код InstallScript в моей функции OnFirstUIBefore (), которая получает значение из реестра, затем выполняет MSIGetProperty для [TempFolder] и, наконец, CopyFile () из [TempFolder] в путь, который мы ранее извлекли из реестра.

Это работает, но все немного громоздко. Сотрудник говорит, что он думает, что я ДОЛЖЕН быть в состоянии создать MSISetProperty для имени настраиваемого свойства, такого как MY_RSRC_DIR, а затем каким-то образом использовать это настраиваемое свойство на панели компонентов, чтобы скопировать файл в нужное место.

Я могу зайти так далеко, как выполняю MSISetProperty в функции OnBegin (), но попытка подключить это свойство к представлению «Компоненты» - это то, чего я пока не смог получить.

Кто-нибудь делал это, и если да, то как?

1 Ответ

1 голос
/ 01 мая 2009

В проекте InstallScript MSI вы должны использовать подход MSI. Создайте вспомогательную папку (например, добавив ее в представление «Файлы и папки») и добавьте в нее свои файлы. Убедитесь, что нашли его свойство каталога (что-то вроде NEWFOLDER1; убедитесь, что все в верхнем регистре). Если вы хотите, вы можете отредактировать таблицу Directory, чтобы сделать ее дочерней по отношению к TARGETDIR, но это необязательно и может привести к тому, что файлы будут помещены в [WindowsVolume] в случае сбоя поиска в реестре, поэтому, вероятно, лучше оставить ее дочерней по отношению к INSTALLDIR .

Затем, если вы можете найти каталог до расчета стоимости (то есть до CostInitialize, которым будет OnBegin), вы можете установить свойство (например, NEWFOLDER1) с помощью системного поиска, настраиваемого действия SetProperty (тип 51) или MsiSetProperty (). Если вам нужно найти его после калькуляции, вам нужно будет использовать либо настраиваемое действие SetDirectory (тип 35), либо MsiSetTargetPath (), поскольку свойство больше не будет обновлять каталог.

Таким образом установщик Windows будет отслеживать местоположение файла, и удаление должно работать правильно.

...