2010-11-01 3 views
0

я выполнил следующий код С # в тестовой среде и PROD сервер:инстанцировании COM класс дает ошибку

Этот код проверяет, если он способен создать экземпляр COM-классы на серверах:

 try 
      { 
       Type creatorType = Type.GetTypeFromProgID("A.B"); 

       MessageBox.Show("Trying to create instance for :" + "A.B"); 

       creator = (IMyInterface)Activator.CreateInstance(creatorType); 

       MessageBox.Show("A.B object instance is : " + creator.GetType().ToString()); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

Этот код отлично работает на моей машине, тестовую среду, но не в PROD. На PROD, я получаю сообщение об ошибке: «Значение не может быть null.Parameter имя: тип» в строке: ->

creator = (IMyInterface)Activator.CreateInstance(creatorType); 

Необходимый COM установлены библиотеки DLL на PROD server.What я здесь отсутствует ?

Спасибо.

+0

Возможно, вы сообщите полученную ошибку. Что такое ошибка COM? – Aliostad

+0

Я упомянул сообщение об ошибке в своем вопросе: « Значение не может быть null.Parameter name: type – Jimmy

+1

Кажется, что реальный вопрос: почему' Type.GetTypeFromProgID («AB») 'возвращает null? Обычный ответ заключается в том, что –

ответ

2

Ну, на этой строке, я думаю, только creatorType может быть нулевым. И поскольку creatorType возвращается Type.GetTypeFromProgID, этот метод может вернуться (как говорит MSDN):

Тип, связанный с указанным ProgID, если progID является допустимой записью в реестре и связан с ним типом; в противном случае - null.

Таким образом, это может означать, что ваши COM-файлы DLL не установлены на вашем сервере. Вы можете найти свои DLL-файлы COM в реестре?

+0

Спасибо, Андрей Пана .... да, проблема в том, что ProgId отсутствовал в реестре в HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes. И, следовательно, creatorType возвращал значение null. – Jimmy