DLL не зарегистрирована при подключении к компьютеру с другой учетной записью

Я перевожу надстройку VSTO OUTLOOK с 32-разрядной на 64-разрядную версию. Он хорошо работает на 32-разрядной версии Office 2007. Цель - запустить его на 64-разрядной версии Office 365.

Я перекомпилировал надстройку для 64-битной платформы и обновил проект installshield.

Когда я устанавливаю надстройку на новый компьютер с Windows 10, используя свою учетную запись (у меня есть права администратора), она работает нормально . Я вижу это в Outlook, и я могу использовать это.

Однако, если я выхожу из системы и прошу кого-то еще войти в систему на компьютере сохранения (этот кто-то еще также имеет права администратора), надстройка появляется в Outlook, но эта ошибка отображается, когда пользователь использует ее:

System.Runtime.InteropServices.COMException (0x80040154): получение фабрики классов COM для компонента с CLSID {29AB7A12-B531-450E-8F7A-EA94C2F3C05F} не выполнено из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x8004). )).

Любая идея?

Подробности:

  • Эта надстройка использует только одну внешнюю DLL: 64-битную DLL от Redemption.
  • Решение было скомпилировано в Visual Studio 2015. Цель платформы: x64.
  • Чтобы установить его на компьютер, я использую MSI, созданный с помощью InstallShield Express в Visual Studio 2015.
  • В InstallShield я указал ALLUSERS-1 (установка для каждой машины).
  • DLL регистрируется с использованием следующего кода:

    Дим WshShell

    Set WshShell = CreateObject ("Wscript.Shell")

    WshShell.run "regsvr32 / s" "C: Program Files (x86) MyCompany AddInName Redemption64.dll"

    Установить WshShell = ничего

Всего 1 ответ


Фактические шаги : просто попытка, прагматическая сводка сверху: 1: Пока вы вошли в систему как второй пользователь, попробуйте запустить regedit.exe и экспортировать HKCR (возможно, также HKCU ), затем зарегистрируйте COM dll, снова выполните экспорт и diff с Подходящий инструмент сравнения (если запуск работал на всех, что есть). 2: Загрузите ProcMon.exe и следите за запуском приложения / надстройки, чтобы определить, что происходит. 3: Используйте Visual Studio и пошаговые и проверяющие представление Modules чтобы определить, что происходит во время запуска. 4: Используйте oleview.exe чтобы увидеть, какую регистрацию требует COM-файл (откройте встроенную библиотеку типов). File => View Typelib... Более подробная информация ниже.


Быстрая проверка : может быть, сначала проверьте это: .

Кроме того, вы закрыли все, прежде чем второй пользователь вошел в систему? Или вы просто поменяли пользователей? Возможно, попробуйте оба, убедитесь, что ваш первый логин не загружен и не заблокирован.

Приведенная ниже «регистрация отладки» может пропустить цель. Похоже, это может быть что-то более своеобразное. Может быть, просто просмотрите это.

Мнемоника развертывания : Возможно, попробуйте эту . Небольшой абзац с напоминаниями о том, как можно решить проблемы с развертыванием: "What is locking, what is blocking, what is missing, etc..."


Регистрация : хотя это выглядит как простая пропущенная регистрация, это может быть что-то более своеобразное. У меня есть этот который вы можете просмотреть. Не написано для надстроек, но может дать вам некоторые идеи.

  • regsvr32.exe : Вы пытались запустить regsvr32.exe вручную как второй пользователь, чтобы проверить, работает ли это? Хотя можно зарегистрировать COM-файл для каждого пользователя, я не знаю, как использовать regsvr32.exe чтобы сделать его надежным.
  • ProcMon.exe : вы знакомы с использованием ProcMon.exe ? Ее . И Гансельман показывает, как это делается (YouTube) . Вы можете использовать это, чтобы попытаться определить, что терпит неудачу и когда. Нужна некоторая практика, чтобы эффективно ее использовать, но это мое «первое и последнее средство».
  • Visual Studio . Мне нравится использовать Visual Studio для пошагового выполнения кода и просмотра различных окон (например, модулей), чтобы понять, как работает приложение, и, следовательно, определить, что может быть не так при запуске.
  • oleview.exe : чтобы выяснить, что COM-файл регистрирует при самостоятельной регистрации, есть несколько способов. Запуская oleview.exe с правами администратора, затем View Typelib... File => View Typelib... а затем View Typelib... COM-файл, который вы хотите проверить, и открывая, вы получите встроенную информацию IDL .

    OLEView.exe

  • RegSpy2.exe : в качестве альтернативы вы можете использовать RegSpy2.exe для извлечения регистрации COM. .

  • Сравнение захвата : наконец, для отладки можно использовать инструмент захвата настроек. Он сканирует реестр (и диск) до и после изменений. Другими словами, вы делаете базовую линию, регистрируете dll и затем сканируете различия. Надежные инструменты стоят дорого (AdminStudio, Advanced Installer Architecht и т. Д.). Версия для установки или регистрации для бедного человека состоит в том, чтобы экспортировать HKCR до и после использования regedit.exe , а затем использовать утилиту file / text-diff.

Самостоятельная регистрация : Самостоятельная регистрация не рекомендуется для регистрации COM, как описано здесь: . В Installshield вы можете просто зарегистрировать COM-файл, извлекая COM-данные при сборке, как показано на рисунке ниже. Вы также можете включить регистрацию COM-взаимодействия в том же списке, установив для флага «.NET COM Interop» значение yes :

COM Extract ,

: сборки .NET можно зарегистрировать для использования COM с помощью regasm.exe . Это (почти) то же самое, что упомянутый выше параметр .NET COM Interop, установленный на "yes" . Если вы хотите использовать COM-файл из .NET, вам нужно сгенерировать файл сборки Interop, а затем установить и зарегистрировать настоящий COM-файл (что вы и делаете). Обе операции должны быть выполнены.

Кидаю пару ссылок. Эти (древние) статьи посвящены использованию regasm.exe , tlbexp.exe , tlbimp.exe и gacutil.exe . Не нужно для вас, но оставив для справки:


Некоторые ссылки :


Есть идеи?

10000