2

レガシ com コンポーネントを登録する必要がないように、reg-free com を使用したいと考えています。ただし、com dll をクライアント exe のディレクトリ内またはその下にない場所 (例: ....\lib) に配置できるようにしたいと考えています。相対パスまたは絶対パスが許可されていないため、サーバー マニフェスト ファイルでこれを行うことはできません。

これを回避する方法があるかどうか誰かが知っていますか?


更新: XP で動作する相対パスしか見つかりませんでした。ただし、Windows Server 2008 ではアクティベーション コンテキスト API を使用して絶対パスを使用できるので、すばらしいです。私の問題は、COM コンポーネントがマネージ データベース ドライバーに静的に依存しているにもかかわらず、現在それが見つからないことです。マニフェスト ファイルについて読んだことから、COM dll と同じディレクトリにあるため、この dll を指す COM reg-free マニフェストに別の要素を単純に追加できることを望んでいましたが、動作させることができません。つまり、要約すると、別のディレクトリ (exe ディレクトリのサブディレクトリではない) の COM マニフェスト/dll を参照するためにアクティベーション コンテキスト API を使用する 1 つのディレクトリに exe があります。

4

1 に答える 1

4

親ディレクトリを現在のディレクトリとしてexeを実行することで、これを達成しました。つまり、このフォルダ構造で

  • 親ディレクトリ/
  • 親ディレクトリ/myapp/
  • 親ディレクトリ/somedependency/

次に、現在のディレクトリとして「parentdir」を使用して、exeを「.\myapp\myapp.exe」として実行でき、myapp.exe.manifestには「somedependency」内の何かへの参照を次のように含めることができます

<file name=".\somedependency\somecomassembly.dll" />

これは Windows Server で動作します

于 2012-05-02T09:46:44.163 に答える