Мы используем пользовательские действия в Install Shield с С#, и я хочу поделиться данными между несколькими пользовательскими действиями.
У меня уже есть подход к написанию его в текстовый файл из первого пользовательского действия, а для остальных пользовательских действий - чтение значения из этого файла.. но я не считаю его хорошим подходом по следующим причинам.
Итак, я ищу лучшее решение, которое может справиться с этим сценарием.
С нетерпением ждем отличных ответов..
Из того, что я могу сказать, теория состоит в том, что немедленные действия могут точно определить, какие последующие действия, связанные с ней, должны будут знать, и, таким образом, могут задавать свойства или CustomActionData для последующих действий по мере необходимости. Свойства могут хранить любой формат сериализации, который вы можете представить в строке с нулевым завершением. Это действительно поддерживаемый механизм установщика Windows для обмена мгновенными действиями, и в особенности с отложенным действием.
Однако на практике это не всегда правильно. Иногда чтение текущего состояния машины требует административных привилегий, недоступных для немедленного действия. Иногда, чтобы выполнить эффективный откат или совершить действие, вам нужно знать, что произошло во время повышенной попытки внести изменения. Даже когда сбор информации возможен без повышенных привилегий, это может быть трудно спланировать все это раньше времени, и это соблазняет компромисс между легкостью и теоретической корректностью.
Необязательно вместо этого передавать имя файла через механизм свойств и обновлять общий файл по мере его описания. Основное различие заключается в том, что имя файла не задано; он хранится в% TEMP% или аналогично, и его имя передается через свойства. Это решает вопрос о возвышении, но не обязательно вопрос безопасности.
Мы используем 2 способа сделать это
- Если нам нужны общие текстовые данные и только во время одного процесса установки - мы используем общие свойства. Первый CA устанавливает свойства, другие считывают эти данные. MsiSetProperty и MsiGetProperty помогут вам здесь, но не забывайте о доступе или настройке свойств установщика Windows с помощью отложенных, коммандных и откатных пользовательских действий.
- При необходимости обмениваться данными между различными процессами установки - мы используем Registry и System Search. Первый установщик записывает данные в какое-то место в реестре - другие читают его с помощью поиска системы и устанавливают соответствующие свойства.