COM サーバー DLL とクライアント アプリケーションが Windows XP で登録なしで動作するために必要なマニフェストを作成しました。私はすべての種類の組み合わせ (登録の有無にかかわらず) をテストしましたが、すべての場合において、クライアント アプリケーションは、マニフェストが存在する場合はライブラリのサイド バイ サイド バージョンを参照し、存在しない場合は登録されたバージョンを参照します (または COM エラー登録がない場合)。私は自分の Windows XP 開発マシンでテストし、ファイル (DLL、クライアント EXE、およびそれぞれに 1 つのマニフェスト) を同僚に渡しました。同僚も自分の Windows XP マシンですべてを正常に実行しました。マニフェストは、埋め込みリソースではなく、外部 XML ファイルです。ここまでは順調ですね。
ただし、ファイルを Windows Server 2003 マシンにコピーすると、機能しません。サイレント エラーが発生しますが、アプリケーション イベント ログにアプリケーション エラーが記録されます (以下を参照)。DLL の登録を解除してマニフェストを削除すると、同様のエラーが発生します (コマンド プロンプトではサイレントになりますが、イベント ログにはアプリケーション エラーが記録されます)。明らかに、登録を見つけるのに問題があります。社内でアクセスできるすべての Windows Server 2003 マシンでこれを再現しました。side-by-side/registration-free COM に関する Microsoft のドキュメントによると、Windows XP 以降、および Windows Server 2003 以降で動作するはずです。
明確にするために、同じクライアントは、同じ Windows Server 2003 マシン上で、同じ COM DLL の登録済み (つまり、regsvr32 を使用) バージョンに対して、登録不要の COM に使用しようとしている同じログイン資格情報の下で完全に実行されます。つまり、登録不要の COM の問題を装った本質的な問題はありません。このクライアントとサーバーは、サーバーがレジストリにグローバルに登録されている場合に正常に動作します。
さらに調査する方法について何か考えがある人はいますか? 私は Windows Server の専門家ではありませんが、このサポートを有効にするために変更する必要があるポリシー設定はありますか? 必要な変更を見つけることができれば、技術サポート/インフラストラクチャの担当者はおそらくそれを行うことはありませんが、彼らが忙殺されているため、問題の調査についても頼ることはできません.
それが問題になる場合(そうすべきではないと思いますが、あなたは決して知りません)、DLL は Delphi 2007 で作成され、クライアントは Visual C++ で作成されます。
イベントの種類: 情報 イベント ソース: アプリケーション エラー イベントカテゴリ: (100) イベント ID: 1004 日付: 2009 年 5 月 2 日 時間: 午前 8:07:45 ユーザー: なし コンピューター: ***サーバー名**** 説明: キューに入れられたエラーの報告: フォールト アプリケーション ***プログラム名***.exe、バージョン 0.0.0.0、フォールト モジュール ***プログラム名***.exe、バージョン 0.0.0.0、フォールト アドレス 0x0002ac9e。 詳細については、ヘルプとサポート センター (http://go.microsoft.com/fwlink/events.asp) を参照してください。