Зарегистрируйте .NET COM DLL во время установки Wix

Справочная информация:

Наше приложение является подключаемым модулем для гораздо более крупного приложения. Все, что мы создаем, - это файлы DLL, к которым подключается большее приложение. Из-за этого наш .NET (C #), файлы DLL должны быть зарегистрированы для COM-интерфейса.

У нас есть рабочий проект InstallShield , но по многим причинам, которые я не буду здесь вдаваться, мы хотим перенести его на WiX . Единственное, что осталось сделать установщику, - это зарегистрировать наши DLL-файлы для COM.

Проблемы

Вот пример компонента с одним файлом DLL.


    

Согласно принятому ответу Как зарегистрировать файл Win32 COM DLL в WiX 3? , рекомендуется добавить SelfRegCost = 1 в тег File. Это приводит к ошибке во время установки:

Модуль C: \ Program files \ Product \ MyDll.dll не удалось зарегистрировать. HRESULT -2147024769. Обратитесь в службу поддержки.

Второй ответ на тот же вопрос (от Роба Меншинга) не рекомендует использовать этот подход, но добавить в тег файла следующее:


        
            
        
    

    
        
        
        
        
    

Я немного сбит с толку, чтобы ввести идентификаторы CLSID. Я ввел сгенерированный GUID и установил его. Он установился нормально, но более крупное приложение не могло найти файлы DLL. (Я использовал теги интерфейса, созданные из heat.exe .)

Другой подход, найденный в том же вопросе (Аданом Тегеном), рекомендует использовать файл heat.exe myDll.dll -out my.wxs

Используя вывод, я добавляю это в тег File:


    

Все мои попытки зарегистрировать .NET для COM терпели неудачу, и, прочитав так много вопросов по этой теме, я не приблизился к пониманию того, как это сделать. Что я должен делать? Почему это такая сложная задача, когда все остальное в WiX было довольно просто?

Я должен упомянуть, что исходный проект InstallShield создавал настраиваемое действие, которое вызывало regasm.exe . Если ничего не помогает, это возможно, но я предпочитаю делать все правильно.

Я только что обнаружил, что файл heat.exe myDll.dll -scom -o myDll.wxs выводит значения реестра, похожие на то, что мне нужно. Теперь, как мне сослаться на вновь созданный компонент внутри компонента DLL?

11
задан Community 23 May 2017 в 12:08
поделиться