DLL не зарегистрирована при подключении к компьютеру с другой учетной записью - PullRequest
1 голос
/ 13 мая 2019

Я перевожу надстройку 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: 0x80040154 (REGDB_E_CLASSNOTREG)).

Есть идеи?

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

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

    Dim WshShell

    Set WshShell = CreateObject ("Wscript.Shell")

    WshShell.запустите "regsvr32 / s" "C: \ Program Files (x86) \ MyCompany \ AddInName \ Redemption64.dll"

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

1 Ответ

1 голос
/ 14 мая 2019

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


Быстрая проверка : Возможно, сначала проверьте это: Погашение Outlook - с помощью RedemptionLoader без regsvr32 DLL .

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

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

Мнемоника развертывания : Возможно, попробуйте это Мнемоника развертывания . Небольшой абзац с напоминаниями о том, как можно решить проблемы с развертыванием: "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 с правами администратора и затем File => View Typelib..., а затем найдите файл COM, который вы хочу проверить и открыть дает вам встроенный IDL детали .

    oleview.exe

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

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

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

* ** 1200 тысяча сто девяносто девять ** ** +1202 тысячу двести один *.

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

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


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

...