Вопрос

Я нашел пример при регистрации DLL, Зарегистрирование сборки для Com Interop в файле MSI с помощью инструментов для установки Windows XML., и Wix жалуется на атрибут "AssemblyRegisterCominterop".

Я удалил это и изменил атрибут «сборки» на Win32, и он говорит, что мне нужно указать атрибут Assembly Manifest, но что мне там положить?

Это было полезно?

Решение

Самый простой способ (и Роб М разглагольствует и рвет по поводу того, как это неправильный) просто использовать SelfRegCost=1 На теге файла для DLL.

Это неправильно, потому что мы должны явно контролировать регистрацию DLL, не позволяя ему просто запускать произвольный код через DllRegerServer. Теория заключается в том, что DLL не должен ничего не делать, кроме как поместить соответствующие записи в реестр, когда называется DllRegeServer. К сожалению, многие из них делают больше, чем это, поэтому саморегистрация может быть единственным способом заставить вашу установку работать.

Это также неправильно, потому что это означает, что система установки Windows ничего не знает об этих ключах реестра, и о том, что должно и не должно быть там. Это означает, что ремонт не будет работать, и, возможно, унайнация не будет убирать должным образом и т. Д.

В противном случае вы можете генерировать соответствующий код WIX, указав heat.exe на вашем DLL и интеграция его вывода в текущий проект WIX. Вы получите разнообразные теги класса, прогид, Typelib и реестр. Вам может потребоваться вручную отредактировать этот вывод, чтобы заставить его компилировать.

Надеюсь, это поможет.

Другие советы

Это не только я, который разглаживает и будет в восторге от того, как злой самореги. MSI SDK дает вам список Семь причины, по которым не использовать самореги.

Пример:

<Component Id="Component" Guid="*">
    <File Source="ComServer.dll">
        <Class Id="PUT-CLSID-HERE" Context="InprocServer32" ThreadingModel="apartment" Description="Your server description">
            <ProgId Id="Your.Server.1" Description="Your ProgId description">
                <ProgId Id="Your.Server" Description="Your ProgId description" />
            </ProgId>
        </Class>

        <Class Id="PUT-PROXY-CLSID-HERE" Context="InprocServer32" ThreadingModel="both" Description="Your server Proxies, assuming you have them">
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface1" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface2" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface3" />
            <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface4" />
        </Class>
    </File>
</Component>

В конечном счете, ответ Трои все правильный.

Вы можете попытаться использовать программу Heat.exe, а затем ссылаться на фрагмент в вашем коде WIX.

 heat.exe file <filename> -out <output wxs file>

Как в:

 heat.exe file my.dll -out my.wxs
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top