Проблемы с портированием приложений COM + из Windows 2003 на Windows 2008 Server - PullRequest
2 голосов
/ 26 августа 2010

Мы переносим наши приложения с Windows Server 2003 на Windows Server 2008 R2. У меня проблемы с миграцией.

Я развернул множество компонентов COM + (32-разрядных) и компонентов DCOM (32-разрядных) в Windows Server 2008 R2. Эти компоненты COM + и DCOM являются кодом VC ++.

У меня 32-битная служба .net 3.5, развернутая на том же сервере, который вызывает компоненты COM +, упомянутые выше.

Всякий раз, когда я пытаюсь запустить Службу, она не запускается и выдает несколько ошибок в журнале событий.

Основной ошибкой, которую мы получаем, являются ошибки «Ошибка удаленного вызова процедуры» **. (** Ошибка вызова удаленной процедуры. (Исключение из HRESULT: 0x800706BE)) **** На основании наблюдения во время отладки объекты COM создан, но при вызове какого-либо метода создается исключение удаленной процедуры.

То же самое отлично работает в Win 2003 Server Box.

ERROR

1-я ошибка:

Неправильное имя приложения: dllhost.exe, версия: 6.1.7600.16385, отметка времени: 0x4a5bc6b7

Неверное имя модуля: KERNELBASE.dll, версия: 6.1.7600.16385, отметка времени: 0x4a5bdbdf

Код исключения: 0xe06d7363

Смещение ошибки: 0x0000b727

Идентификатор сбойного процесса: 0x8ac

Время запуска ошибочного приложения: 0x01cb437094216ea7

Неправильный путь к приложению: C: \ Windows \ SysWOW64 \ dllhost.exe

Неверный путь к модулю: C: \ Windows \ syswow64 \ KERNELBASE.dll

Идентификатор отчета: d25f6a31-af63-11df-8252-0050568e251b

2-я ошибка:

Система вызвала пользовательский компонент, и этот компонент вышел из строя и сгенерировал исключение. Это указывает на проблему с пользовательским компонентом. Сообщите разработчику этого компонента о сбое и предоставьте ему следующую информацию.

Идентификатор серверного приложения: {727318BC-A725-4ED6-8DDD-9DE80262D3CA}

Идентификатор экземпляра серверного приложения:

* * +1047 {739972C1-74DA-4169-A093-32AAAA965EC9}

Имя приложения сервера:

Серьезный характер этой ошибки привел к прекращению процесса.

Исключение: E06D7363

3-я ошибка:

Ковш неисправности, тип 0

Название события: APPCRASH

Ответ: Недоступно

Идентификатор кабины: 0

Подпись проблемы:

P1: dllhost.exe

P2: 6.1.7600.16385

P3: 4a5bc6b7

P4: KERNELBASE.dll

P5: 6.1.7600.16385

P6: 4a5bdbdf

P7: e06d7363

P8: 0000b727

P9:

P10

Прикрепленные файлы:

Эти файлы могут быть доступны здесь:

C: \ ProgramData \ Microsoft \ Windows \ WER \ ReportQueue \ AppCrash_dllhost.exe_58c2666ce94b9901a2cc454f2e8cd8cc5742421_085d298c

Символ анализа:

Перепроверка для решения: 0

Идентификатор отчета: d25f6a31-af63-11df-8252-0050568e251b

4-я ошибка:

Ковш неисправности, тип 0

Название события: APPCRASH

Ответ: Недоступно

Идентификатор кабины: 0

Подпись проблемы:

P1: dllhost.exe

P2: 6.1.7600.16385

P3: 4a5bc6b7

P4: KERNELBASE.dll

P5: 6.1.7600.16385

P6: 4a5bdbdf

P7: e06d7363

P8: 0000b727

P9:

P10

Прикрепленные файлы:

Эти файлы могут быть доступны здесь:

C: \ ProgramData \ Microsoft \ Windows \ WER \ ReportQueue \ AppCrash_dllhost.exe_58c2666ce94b9901a2cc454f2e8cd8cc5742421_085d298c

Анализ символа:

Перепроверка для решения: 0

Идентификатор отчета: d25f6a31-af63-11df-8252-0050568e251b

Статус отчета: 0

5-я ошибка:

Служба не может быть запущена. System.Runtime.InteropServices.COMException (0x800706BE): сбой удаленного вызова процедуры. (Исключение из HRESULT: 0x800706BE)

Мы проверили следующее на основе анализа,

1. Проблемы с разрешениями - проверено, имеют ли все пользователи, прошедшие проверку подлинности, IWAM_ServerName и IUSR_ServerName, полный контроль. На форуме видел, что у них должны быть разрешения на чтение / выполнение NTFS для некоторых системных папок. Не знаю, как это проверить.

2. Проблемы с DLL Hell - проверил регистрацию и все вроде нормально.

3. Проблемы «битности» процесса - Проверен реестр и все записи находятся в WoW6432, а все компоненты приложения являются 32-битными. В процессе отсутствуют вызовы для 64-битных компонентов. Также используется COM для 32 приложений.

4. Проблемы с FireWall - эта служба находится на том же компьютере, что и компонент COM. Должны ли мы изменить некоторые параметры, относящиеся к безопасности MSTDC, расширенной конфигурации брандмауэра, например, включить входящий COM +? Мы не уверены, так как мы настраиваем сервер впервые.

  1. Включение флажка «Запуск 32-разрядных приложений»

Но ничто из перечисленного не помогает.

Кроме того, мы пытаемся воспроизвести проблему с примерами компонентов. Мы создали компонент .NET и развернули его в COM +. Попытка доступа к нему через скрипт VB и консольное приложение C #, и он отлично работает в Windows 2003 box. То же самое не работает в Windows 2008 Server box. Мы не получаем ошибки RPC, но следующее:

Ошибка сценария vb: 800a01ad компонент activex не может создать объект

.net клиент, вызывающий com +: КЛАСС НЕ ИМЕЕТСЯ: HRESULT 0x80040154 (REGDB_E_CLASSNOTREG)

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

Было бы здорово, если бы кто-то помог нам в решении этой проблемы.

Спасибо, Виджей

1 Ответ

2 голосов
/ 26 августа 2010

Это все та же причина сбоя. Ваш компонент выдал исключение C ++, и он не был пойман с помощью оператора catch. Используйте отладчик, чтобы выяснить, почему он вызывает исключения.

...