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