Получение Wix Votive для регистрации COM-объектов - PullRequest
0 голосов
/ 21 октября 2010

Я использую Wix 3.5 Votive (интеграция с Visual Studio) для создания установщика для некоторых COM-объектов.

В Votive установка ссылки на проект извлекает двоичные файлы из этого проекта и автоматически генерирует Wixисточник во время компиляции.Это абсолютно здорово, это СУХОЙ и означает, что мне не нужно постоянно обновлять Wix XML.Фрагмент, который генерирует Votive, выглядит следующим образом:

<Fragment>
    <DirectoryRef Id="INSTALLLOCATION">
        <Component Id="cmpBCE83EAB1AAF2230E306A7325EE7EA11" Guid="*">
            <File Id="fil61D40E7D1A1D0A60C27CE6960FED2B0B" Source="$(var.My.Assembly.TargetDir)\My.Assembly.dll" />
        </Component>
    </DirectoryRef>
</Fragment>

Он делает то же самое для исходных файлов, документов и спутников, ни один из которых я не использую.Тем не менее, он не генерирует записи в реестре для регистрации COM (сборка помечена как «Видимая COM» и «Регистрация для взаимодействия COM», но Votive, похоже, не имеет механизма для решения этой проблемы.

За кулисами Votive вызывает Heat.exe, чтобы собрать все эти вещи, и, вызывая Heat на сборке, выплевывает файл с кучей записей <Class .../> и <RegistryValue .../>, что именно то, что нужно сделатьрегистрация COM. Так что, конечно, Heat может сгенерировать этот материал, и было бы просто сделать это один раз и отредактировать вывод в проекте Wix. Но это нарушает принцип DRY и требует поддержания проекта Wix в ногу с исходным кодом.вручную. По некоторым причинам, я бы предпочел, чтобы Votive / MSBuild делала это автоматически, каждый раз, когда создается решение.

Я ни в коем случае не эксперт MSBuild, и яогромная кривая обучения с Wix, Votive и MSBuild. Мне потребовалось несколько дней, чтобы продвинуться так.Суть в следующем: есть ли простой способ, чтобы Votive / MSBuild генерировал этот материал для регистрации COM каждый раз, когда строится решение?Я ожидаю, что для каждого ссылочного проекта, если установлен параметр «Регистрация для взаимодействия COM», то Votive / MSBuild сгенерирует регистрацию COM для выходной сборки этого проекта.Кто-нибудь достиг этого, и, если да, не могли бы вы помочь мне, пожалуйста, пока мой мозг не превратился в желе!

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Я не верю, что что-либо из этого должно быть сделано, так как это устраняет управление изменениями / детерминированное поведение, которое мне нравится видеть в моих установщиках.Я хочу знать, что каждый отдельный файл / ресурс в установке был явно помещен в установщик и что он не всплывает по волшебству.Я хочу явно собрать и написать мои метаданные COM, чтобы я знал, что это правильно.Когда вы выполняете «Извлечение COM при сборке» (терминология InstallShield), процесс может завершиться неудачей по ряду причин, и в результате вы получите, казалось бы, хорошую сборку с неправильной установкой, которая не будет развернута должным образом.Вы можете процитировать DRY prinicipal, но в этой области правила применяются немного по-другому.

0 голосов
/ 30 декабря 2010

Похоже, что в Wix 3.0 (по крайней мере) он не может генерировать элементы взаимодействия COM, если библиотека скомпилирована на сетевом диске. Я обнаружил такое же поведение при компиляции с .NET 2.0 или .NET 4.0. Возвращаясь к созданию локального диска (например, C:), эта проблема исчезает для сборок .NET 2.0 и .NET 4.0.

Мне еще предстоит найти хороший обходной путь, кроме как убедиться, что он находится на локальном диске. (

...