Справочная информация:
Наше приложение является подключаемым модулем для гораздо более крупного приложения. Все, что мы создаем, - это файлы 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?