2010-07-14 1 views
2

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

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

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

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

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

ответ

3

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

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

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

0

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

regsvr32 yourdll.dll 

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

0

Регистрации в 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 с ним, вы должны увидеть свои классы в таблице Class, и там будет что-то в таблицу реестра.

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

 Смежные вопросы

  • Нет связанных вопросов^_^