Используя WiX 3.5, у меня есть MSI с преобразованием экземпляров, что позволяет мне устанавливать программное обеспечение на одном компьютере с разными названиями продуктов. Для этого у меня есть «жестко запрограммированный» список идентификаторов и имен продуктов в файле .wxs, определенных условно. Однако у меня есть только одно определение Feature-ComponentRef, которое включает как файловые, так и нефайловые ресурсы.
Установка, похоже, проходит нормально, но удаление экземпляров демонстрирует поведение, упомянутое в этих двух источниках:
http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx
и
В частности, ни один из нефайловых ресурсов (в данном случае записей реестра) не удаляется, за исключением самого последнего экземпляра моего приложения. (то есть, если я удаляю в следующем порядке: instance1, instance2 и instance3 - удаляются только нефайловые ресурсы instance3.
Я предполагаю, что это связано с отсутствием уникального GUID для нефайловых компонентов (тогда как это не проблема для файловых компонентов)
Итак, мне было интересно, будет ли действительным подходом определить один файл .wxs с одним идентификатором продукта, именем и одним набором функций, но иметь настраиваемый загрузчик, генерирующий новые GUID для продукта и нефайловых компонентов, которые затем вставляются в базу данных MSI во время выполнения? то есть, когда приходит время удалить или обновить, я бы запросил реестр для установленных экземпляров и затем получил их GUID.
Это позволит создавать экземпляры во время выполнения, а не заранее жестко запрограммировать в .wxs, и полностью удалять их.
Имеет ли это смысл? Сделает ли Burn все лучше? :)