COM без регистрации не работает на Windows Server 2003
-
05-07-2019 - |
Вопрос
Я создал необходимые манифесты для библиотеки 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
Также, если возможно, сообщите нам имена файлов и содержимое используемых вами файлов манифеста.