Как я могу устранить «Не удается найти надстройку« mscoree.dll », когда программа установки используется для развертывания - PullRequest
1 голос
/ 02 ноября 2011

Я пытаюсь создать надстройку автоматизации пользовательских функций COM для Excel 2003/2007/2010 и создать программу установки, которая установит надстройку без сообщения об ошибке «Не удается найти надстройку» mscoree.dll. ». Удалить из списка? »Происходит, когда надстройки автоматизации добавляются в Excel. Эта ошибка возникает при запуске программы установки на компьютерах, отличных от ПК разработчика.

Использование этого примера Эрика Картера в сочетании с этим ответом переполнения стека . Я пробовал оба способа регистрации как пользовательских DLL и mscoree.dll. Решения этой проблемы хорошо описаны в обеих этих ссылках, однако ни редактирование реестра программы установки, описанной в ссылке stackoverflow, ни код другой ссылки, которая должна регистрировать mscoree.dll, не работает для меня при установке с проектом установки в другой ПК (64-битный Windows 7 ПК не используется для сборки программы). (На самом деле последний комментарий по ссылке переполнения стека - это человек с точно такой же проблемой, которую я описываю здесь.) Надстройка работает, я просто хочу предотвратить сообщение об ошибке.

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

У меня была эта проблема раньше, и я заметил, что в некоторых экспериментах мы должны указать полный путь для значения по умолчанию ключа InprocServer32, чтобы избежать пропущенного сообщения об ошибке dll.

Для 32-битных ОС: значение C:\Windows\System32\mscoree.dll

Для 64-битных ОС: значение C:\Windows\SysWOW64\mscoree.dll

В C # вы можете использовать следующеекод, Environment.GetFolderPath(Environment.SpecialFolder.SystemX86) или Environment.SystemDirectory, чтобы получить путь к системной папке.

Ключ Programmable также используется для перечисления вашей надстройки на сервере автоматизации.Без этого вы не сможете найти свою надстройку там.

0 голосов
/ 26 июля 2013

Я 100 раз ударился головой, чтобы полностью исправить это.к сожалению, в итоге получается решение, которое может быть немного грязным, но оно работает ....

Так что в вашем событии "Commit" вашего MSI просто подключите сценарий VBS ниже для запуска, и это решит эту проблемураз и навсегда.

Const HKLM = &H80000002
strComputer = "."

Set RegistryObject=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Classes\CLSID\{<guid>}\InprocServer32"

strValueName =""

strValue = "C:\windows\system32\mscoree.dll"

RegistryObject.SetStringValue HKLM, strKeyPath, strValueName, strValue
...