0

私は次の状況に直面しています: 管理されていない c++ COM サーバー (分離) を参照する単純な完全信頼 XBAP アプリケーションを作成しました。

展開後、XBAP アプリケーションが同じディレクトリに配置された COM サーバー dll を検出することを期待していますが、そうではありません。次のエラーが表示されます。

呼び出しのターゲットによって例外がスローされました。---> System.Runtime.InteropServices.COMException (0x80040154): CLSID {970599E0-2673-11D3-A8A8-00105AA943DF} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 次のエラーが原因で失敗しました: 80040154. at Generation888.Generation888.Simple (Int32 num1、Int32 num2)

XBAP がデプロイされたフォルダーに、適切な CLSID を含む DLL と XBAP マニフェストが含まれていることを確認しました

単純な C# Windows フォーム アプリケーションを作成し、同じ COM dll を参照すると、正常に動作します。

私の質問は、XBAP が Side-by-Side メカニズムをサポートしているかどうかです。

ありがとう

4

1 に答える 1

1

私は XBAP にあまり詳しくないので、これらは一般的な提案です。XBAP が完全信頼であるため、実際に別の実行可能ファイルとして起動されている場合 (taskmgr は何と言っていますか?)、Windows Vista 以降で昇格したコマンド ラインから「sxstrace.exe」ツールを使用して、XBAP マニフェストが実際に実行可能かどうかを判断してみてください。システムによって解釈されます。最初にマニフェストなしでアプリケーションを試した場合やマニフェストを変更した場合、システムがこの古い情報をキャッシュした可能性があります。マニフェストと実行可能ファイルの両方のタイムスタンプに触れて、このマニフェスト状態キャッシュをクリアする必要があります。

実行可能ファイルにマニフェストが埋め込まれている可能性もあります。これは、外部マニフェストが無視されていることを意味します。これを確認するには、Visual Studio で実行可能ファイルを開き、ID 1 の RT_MANIFEST リソースがあるかどうかを確認します。

于 2009-12-01T06:27:34.873 に答える