Настраиваемая таблица для включения в файл патча MSP
У нас есть CustomTable, который мы добавляем в msi при его создании. Эта пользовательская таблица содержит некоторые двоичные данные (файлы XML), которые наше программное обеспечение для развертывания считывает при загрузке MSI на наш сервер развертывания.
Теперь у нас есть требование поддерживать развертывание файлов MSP. Это означает, что если пользователь загрузит файл msp на наш сервер развертывания, наше программное обеспечение все равно сможет считывать двоичные данные в нашей пользовательской таблице. Однако я не смог найти способ убедиться, что создаваемый нами файл msp содержит одну и ту же CustomTable.
Я знаю, что MSP содержит обновленный XML, потому что я использовал ORCA, чтобы увидеть обновленные таблицы и файлы. К сожалению, я не могу программно читать данные из нашей CustomTable, потому что они (очевидно) не существуют в патче. Кто-нибудь знает способ доступа к CustomTable из файла MSP?
Спасибо - Если требуется разъяснение, дайте мне знать!
2 ответа
Итак, наконец-то есть решение моей проблемы.
Поскольку у нас нет оригинального msi, мы можем создать пустой msi во временном каталоге и затем применить msp поверх этого, используя ApplyTransform. Если мы создаем ожидаемую таблицу и заполняем ее фиктивными данными (к счастью, мы заранее знаем, какие строки ожидаются в этой таблице), процесс применения патча поверх нашей фиктивной MSI позволяет нам успешно запрашивать таблицу _Storages и получать доступ обновленный поток, содержащий новый XML. Это может быть обработано во время загрузки нашего msp.
Не красиво, но это работает.
Патч (msp) должен содержать изменения только в предыдущем пакете MSI. Если вы не измените свою пользовательскую таблицу в более новой версии пакета MSI, она не будет упомянута в патче. И это ожидается.
Когда исправление применяется, оно изменяет исходный пакет MSI (фактически исправляет его) и запускает переустановку. Это означает, что если ваше пользовательское действие, которое читает пользовательскую таблицу, явно не запланировано, чтобы не запускаться при переустановке, то оно запустится и найдет пользовательскую таблицу.