COM без регистрации не работает на Windows Server 2003 - PullRequest
2 голосов
/ 05 мая 2009

Я создал необходимые манифесты для библиотеки DLL моего COM-сервера и клиентского приложения для работы без регистрации в Windows XP. Я протестировал все виды комбинаций (с регистрацией и без), и во всех случаях клиентское приложение видит параллельную версию библиотеки, если есть манифесты, и зарегистрированную, если нет (или ошибку COM если нет регистрации вообще). Я проверил на своей машине для разработки под Windows XP и передал файлы (DLL, клиентский EXE и один манифест для каждого) коллегам, которые также успешно запустили все на своих компьютерах с Windows XP. Манифесты - это внешние XML-файлы, а не встроенные ресурсы. Все идет нормально.

Однако, когда я копирую файлы на компьютер с Windows Server 2003, он не работает. Я получаю тихий сбой, но ошибка приложения в журнале событий приложений (см. Ниже). Если я отменяю регистрацию DLL и удаляю манифесты, я получаю похожую ошибку (молчание в командной строке, но ошибка приложения в журнале событий). Очевидно, что существует проблема с поиском регистрации. Я воспроизвел это на каждом компьютере с Windows Server 2003, к которому у меня есть доступ в нашей компании. Согласно документации Microsoft о параллельном COM / без регистрации COM, он должен работать в Windows XP и более поздних версиях, а также в Windows Server 2003 и более поздних версиях.

Для ясности, тот же клиент отлично работает на тех же машинах Windows Server 2003 с зарегистрированной ( т.е. с использованием regsvr32) той же COM DLL, под той же самой учетные данные, которые я пытаюсь использовать для COM без регистрации. Другими словами, нет никаких внутренних проблем, маскирующихся под проблемы COM без регистрации - этот клиент и сервер работают нормально, когда сервер зарегистрирован глобально в реестре.

У кого-нибудь есть идеи, как продолжить расследование? Я не эксперт по Windows Server, но, возможно, есть какие-то параметры политики, которые необходимо изменить, чтобы включить эту поддержку? Если я смогу найти необходимые изменения, наши специалисты по технической поддержке / инфраструктуре, вероятно, вряд ли будут это делать, но я не могу рассчитывать на то, что они тоже исследуют проблему, поскольку они заболочены.

В случае, если это имеет значение (я не думаю, что это должно, но вы никогда не знаете), DLL написана на Delphi 2007, а клиент написан на Visual C ++.

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Ответы [ 2 ]

7 голосов
/ 05 мая 2009

Одна вещь, которую нужно искать, это то, есть ли у exe внутренний манифест. В XP порядок поиска exe-манифеста является внешним, а затем внутренним. В Server 2003 и более поздних версиях порядок внутренний, а затем внешний.

0 голосов
/ 05 мая 2009

С COM-сервером, созданным в Delphi 7, я видел похожие проблемы, если COM-сервер был незарегистрирован, а клиентское приложение запускалось под ограниченной учетной записью пользователя, потому что реализация Delphi COM всегда пыталась обновить регистрационную информацию, даже когда библиотеки DLL Функция RegisterServer не была вызвана явно.

Чтобы узнать, является ли это проблемой, попытайтесь запустить клиентское приложение с учетной записью с неограниченными административными привилегиями.

В MSDN упоминается, что в Windows 2003 проблемы с регистрацией свободных COM-серверов должны быть подробно описаны в специальном разделе журнала системных событий:

При устранении неполадок без регистрации Проблемы с COM, Event Viewer включен Windows Server 2003 ваш друг. Когда Windows XP или Windows Server 2003 обнаруживает ошибку конфигурации обычно показывают окно сообщения об ошибке под названием для приложения у вас есть запущен и содержит сообщение «Это приложение не удалось запустить потому что конфигурация приложения это неверно. Переустановка Приложение может решить эту проблему. "Я советую всякий раз, когда вы видите это сообщение, которое вы воспроизводите проблему на Windows Server 2003, обратитесь к Журнал системных событий и поиск событий из источника SideBySide. Причина Я не предлагаю вам взглянуть на Журнал событий Windows XP в этих случаях что он всегда будет содержать сообщение типа «Сгенерировать активацию» Сбой контекста для [путь] [приложения имя файла] .manifest. Ошибка ссылки сообщение: операция завершена успешно ", который не помогает определить проблему. http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic6

Также, если возможно, сообщите нам имена файлов и содержимое используемых вами файлов манифеста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...