Вопрос

Я создал необходимые манифесты для библиотеки 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.
Это было полезно?

Решение

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

Другие советы

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

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

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

  

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top