Используя 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 все лучше? :)