MSI Desperation. MSI НЕ РЕГИСТРАЦИЯ DLL - PullRequest
2 голосов
/ 15 июля 2010

Мой установщик MSI НЕ регистрирует DLL на XP.На Vista это не будет зарегистрировано, если я не администратор.и на Win7 он будет СЛУЧАЙНО регистрировать DLL или нет.

После того, как MSI не зарегистрирует DLL, пользователи будут вынуждены перейти в папку установки, введите «regsvr32 mydllname.dll» - и тогда все работает(что доказывает, что DLL исправна и в порядке).

Свойство «register» для этого файла - «selfReg» в проекте MSI.«COM» тоже не работает.

Я начинаю думать, что я либо галлюцинирую, либо MSI просто не может зарегистрировать библиотеки DLL… очень, очень ОЧЕНЬ разочарован.уже НЕДЕЛЯ в попытке решить это и НАДА.Я действительно ненавижу MS в этот момент.

Пожалуйста, помогите.

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

Что наиболее вероятно происходит, так это то, что ваш регистрационный код пишет в неправильный корень реестра.Например, HKCR представляет собой объединенное представление HKLM\Classes и HKCU\Classes, и регистрация в HKCR в некоторых случаях заканчивается в HKCU\Classes, а иногда и в HKCU\Classes\VirtualStore в зависимости от того, какая ОС и какаяУчетная запись, под которой был запущен установщик.

Кроме того, если вы хотите DllRegisterServer зарегистрировать COM-DLL из MSI, ядро ​​MSI даже не знает о ваших записях реестра, и это дофактический код DLL.

Я бы предложил изменить MSI, чтобы он не использовал автоматическую регистрацию с использованием DllRegisterServer и не выполнял регистрацию под HKCR.Вместо этого добавьте свою регистрацию в качестве явных записей реестра под HKLM\Classes (если только у вас нет особых причин требовать регистрации COM для каждого пользователя, что является совершенно другой темой).

0 голосов
/ 06 апреля 2016

Регистрация в HKCR (и связанных отображенных кустах) требует привилегий администратора и всегда выполнялась. По сути, это та же проблема, что и «Я мог писать в каталог Program Files в XP, но не в Vista». Это потому, что все были администраторами в XP, но так как UAC никто не является администратором, если он не повышен каким-либо образом (запускается как администратор, являющийся обычным, а другой является приглашением повышения UAC).

Общие причины сбоя самостоятельной регистрации во время установки:

  1. Отсутствие повышения прав (например, установка на пользователя, которая никогда не отображает диалоговое окно повышения прав UAC).

  2. Отсутствующие зависимости. Может быть Dll, от которого зависит ваш, и это не от целевой системы. Если регистрация работает ПОСЛЕ завершения установки, вы можете зависеть от сборки Win32 или управляемого кода. Если у вас есть зависимость от среды выполнения C ++, которая относится к WinSxS, и вы включили ее в качестве модуля слияния, то она не будет зафиксирована до тех пор, пока не завершится установка и ваша регистрация не будет выполнена. То же самое верно для сборок, идущих в GAC, но это маловероятно в вашем случае регистрации Win32. Если это случайно в Windows 7, то это обычно потому, что в некоторых системах уже (скажем) установлены среды выполнения C ++, а в некоторых нет.

Большинство инструментов в настоящее время, включая Visual Studio и WiX, могут извлекать регистрацию COM во время сборки. Это статические данные, поэтому нет причин, по которым они не могут быть в файле MSI. В случае WiX инструмент называется Heat. Это также означает, что нет необходимости вызывать Dll во время установки, избегая проблем с зависимостями. Параметр vsdraCOM делает это, и я успешно использовал его, но, как и при любой регистрации, он требует, чтобы зависимые Dll были доступны во время сборки. Нет хорошего способа проверить, работает ли он, но если вы возьмете редактор MSI (например, Orca из Windows SDK) и откроете с ним файл MSI, вы должны увидеть свои классы в таблице классов, и что-то будет в Таблица реестра.

Это также может помочь, если бы у вас было больше подробностей о том, что на самом деле «не зарегистрировать» Есть ли пропущенные записи интерфейса, записи CLSID, сообщения об ошибках во время установки, приложения, которые не запускаются из-за невозможности создания экземпляра класса?

0 голосов
/ 05 апреля 2016

Да, хороший ответ Франци Пенов.В качестве опции вы также можете попробовать добавить

regsvr32 yourdll.dll

в качестве настраиваемого действия для последовательности installexecute после развертывания файлов и того же действия для удаления, но с ключом / u для отмены регистрации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...