2011-02-09 19 views
2

従来のcomコンポーネントを登録する必要がないように、reg-free comを使用します。しかし、私はクライアントのexeのディレクトリの下にない場所にcomのdllを置くことができるようにしたいと思います。 .... \ lib。相対パスまたは絶対パスを許可しないため、サーバーマニフェストファイルでこれを行うことはできません。Reg-free COM - クライアントとの相対的なCOM DLLの場所exe

これは方法がある場合は誰も知っていますか?


UPDATE: は、私はXP上で動作するように相対パスを発見しました。しかし、アクティベーションコンテキストAPIを使用してWindows Server 2008上で絶対パスを使用することができます。今私の問題は、私のCOMコンポーネントは、管理されたデータベースドライバに静的な依存関係を持っているが、現在それを見つけることができないということです。私がマニフェストファイルについて読んだところでは、COM dllと同じディレクトリにあるので、このdllを指すCOMのreg-freeマニフェストに別の要素を追加するだけでよいのですが、うまく動作することはできません。要するに、Activation Context APIを使用して、別のディレクトリ(exeディレクトリのサブディレクトリではない)のCOMマニフェスト/ dllを参照して正しく検出してロードするあるディレクトリにexeがあります。しかし、私はまた、COM dllと同じディレクトリに管理されたデータベースドライバdllを持っています。可能であれば、マニフェストファイルを使用してこれをどのようにロードできるのかを知りたいと思います。

+0

これに追加するだけで、アクティベーションコンテキストAPIも使用してみました。上で説明したように、クライアントには、client.exeと同じディレクトリにないCOM dllをロードします。私は、マニフェストファイルとCOM dllを含むディレクトリを指すようにアクティベーションコンテキストのアセンブリディレクトリを設定することで、これを実行しようとしました。その結果、マニフェストファイルは正しく検出されますが、付属のdllをロードしようとすると、マニフェストを見つけたディレクトリではなく、client.exeを基準にしたパスになります。何か不足していますか? – HammerIp

+0

相対パスは機能します。つまり、dllを '。\ External'フォルダに置くことができます。マニフェストで ''を使ってください。 – wqw

+0

私はそれが相対的だと思いますが、同じまたはより低いディレクトリレベルでのみ動作します。 – Jeff

答えて

3

これは、現在のディレクトリとして親ディレクトリを持つexeファイルを実行することで実現しました。 すなわち、このフォルダ構造

  • parentdir/
  • parentdir/myappに/
  • parentdir/somedependency/

とその後、現在のディレクトリとして "parentdir" で、あなたのようにあなたのexeファイルを実行することができます "。\ myapp \ myapp.exe" とmyapp.exe.manifestには、 "somedependency"という名前の参照が含まれています。

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

これはWindows Server上で動作します

+0

クライアントがサーバーを比較的参照するための例。マニフェストを表示できますか? – Measuring