Фактические шаги : просто попытка, прагматичная сводка сверху: 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
детали .
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
. Не нужно для вас, но оставив для справки:
Некоторые ссылки :