2012-03-08 4 views
2

Я написал C# .NET Com вызываемой оберткой DLL. Я подписал его с StrongName и зарегистрировал код и typelib с 64-разрядным regasm.exe. Регистрация и все методы управления видны с помощью 64-разрядного OleViewer. Однако, когда я пытаюсь использовать элемент управления из 64 бит \ Windows \ System32 \ cscript.exe:Как устранить неполадки при регистрации/использовании библиотеки .NET COM Callable Wrapper DLL?

Set logger = CreateObject("MyCompany.LoggerControl") 

Это дает ошибку:

Microsoft VBScript runtime error: ActiveX component can't create object: 'MyCompany.LoggerControl'

Использование ProcMon из SysUtils отслеживать это вниз, я :

1:41:44.8295486 PM cscript.exe 24028 RegOpenKey HKCR\MyCompany.LoggerControl
NAME NOT FOUND Desired Access: Read

Однако этот ключ существует в Regedit. Вызывающий процесс запускается из командной строки с повышенными правами. Если это была проблема безопасности, не должна ли ошибка быть «ДОСТУП ДАННЫМ» вместо «ИМЯ НЕ НАЙДЕНА»?

Каковы другие инструменты для отслеживания этой ошибки регистрации контроля COM-типа?

+1

Есть ли такая "HKCR \ MyCompany.LoggerControl" и она может быть доступна? Удостоверьтесь, что вы смотрите с * той же битности * regedit и дважды проверяете битту исполняющей программы, просто чтобы убедиться, что что-то фанки не произошло. (Суффикс «*» в диспетчере задач = 32 бита.) –

ответ

1

Вот несколько устранения неполадок идеи:

  1. Определения возвращаемого при попытке создать объект точного количества ошибок:

    On Error Resume Next
    Set лесоруб = CreateObject ("MyCompany .LoggerControl ")
    If Err Then WScript.Echo "Error #" & Err.Number WScript.Echo Err.Description WScript.Quit 1 Завершить If

  2. Посмотрите этот код ошибки. Например, это «отказ в доступе» или некоторая другая ошибка?

  3. Создайте исполняемый файл C# для вызова своего объекта и посмотрите, может ли он его успешно создать.

  4. Убедитесь, что в вашей DLL нет других зависимостей, которые не позволяют загружать его в каталог, в котором работает ваш скрипт. Вы можете использовать файл depend.exe из каталога, в котором работает ваш скрипт, или вы можете использовать мою любимую технику плохого человека для regsvr32, чтобы попытаться загрузить DLL. Если DLL не загружается из-за зависимости, вы получите диалоговое окно с сообщением об ошибке, в котором говорится, что он не может найти другую DLL или загрузить одну из своих зависимостей. Если он может загрузить DLL в порядке, он скажет, что он успешно зарегистрировал его.

    C: \ PathToVbs> regsvr32 C: \ PathToYourDLL \ YourDLL.dll

+0

Обновление - я нашел свою проблему - несмотря на двойную и тройную проверку, у меня было написано ошибочное название компании, поэтому исходная трассировка ProcMon была правильной - имя не было найдено , – Mike