Я перевожу надстройку 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 регистрируется с использованием следующего кода:
Дим 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
вручную как второй пользователь, чтобы проверить, работает ли это? Хотя можно зарегистрировать COM-файл для каждого пользователя, я не знаю, как использовать regsvr32.exe
чтобы сделать его надежным. ProcMon.exe
? Ее . И Гансельман показывает, как это делается (YouTube) . Вы можете использовать это, чтобы попытаться определить, что терпит неудачу и когда. Нужна некоторая практика, чтобы эффективно ее использовать, но это мое «первое и последнее средство». oleview.exe : чтобы выяснить, что COM-файл регистрирует при самостоятельной регистрации, есть несколько способов. Запуская oleview.exe
с правами администратора, затем View Typelib...
File
=>
View Typelib...
а затем View Typelib...
COM-файл, который вы хотите проверить, и открывая, вы получите встроенную информацию IDL
.
RegSpy2.exe : в качестве альтернативы вы можете использовать RegSpy2.exe для извлечения регистрации COM. .
HKCR
до и после использования regedit.exe
, а затем использовать утилиту file / text-diff. Самостоятельная регистрация : Самостоятельная регистрация не рекомендуется для регистрации COM, как описано здесь: . В Installshield вы можете просто зарегистрировать COM-файл, извлекая COM-данные при сборке, как показано на рисунке ниже. Вы также можете включить регистрацию COM-взаимодействия в том же списке, установив для флага «.NET COM Interop» значение yes
:
: сборки .NET можно зарегистрировать для использования COM с помощью regasm.exe
. Это (почти) то же самое, что упомянутый выше параметр .NET COM Interop, установленный на "yes"
. Если вы хотите использовать COM-файл из .NET, вам нужно сгенерировать файл сборки Interop, а затем установить и зарегистрировать настоящий COM-файл (что вы и делаете). Обе операции должны быть выполнены.
Кидаю пару ссылок. Эти (древние) статьи посвящены использованию regasm.exe
, tlbexp.exe
, tlbimp.exe
и gacutil.exe
. Не нужно для вас, но оставив для справки:
Некоторые ссылки :