11

PhilWilsonによる例外的な記事BuildandDeploy .NET COM Assemblyに従って、COMに公開される.NETアセンブリを作成しました。

また、.NETアセンブリがCOMに適切に登録されており、コンパイルされたCOMコードで問題なく呼び出すことができるという意味で、すべてが正常に機能します。

唯一の奇妙なことは、VB 6.0またはVBAを使用するときにCOMに公開された.NETアセンブリに対して開発するには、プログラマーが関連する.tlbファイルの正確なファイルの場所を「参照」する必要があります。その後はすべて正常に機能します。つまり、クラスライブラリは[参照]ダイアログボックスに直接表示されないため、ファイルの場所を参照する必要があります。

繰り返しますが、COM相互運用機能の側面は100%機能します。ただし、VB6.0およびVBAの[参照]ダイアログ内でライブラリを直接表示できる設定が必要だと思います。

この設定がどうなるか誰か知っていますか?それとも、登録するだけで自動的に発生するのでしょうか?

アドバイスをよろしくお願いします...

マイク

編集/更新

/ codebaseスイッチを使用しているかどうかに関するjpohの質問に答えるために、RegAsmを明示的に使用するのではなく、.msiセットアップパッケージを使用しています。アセンブリは正しく登録されています。これは、HKCR \ CLSID {myGUID} \ InprocServer32内で、「CodeBase」キーがアセンブリへのフルパスを正しく保持していることからわかります。コンパイルされたCOMコンポーネントは、このdllに対して問題なく実行されます。参照ダイアログボックスに表示されないのは、VB6.0またはVBAを使用して開発した場合のみです。したがって、正しいファイルの場所に「参照」する必要があります。その後、100%正常に動作します。

アップデート#2

さらに調査したところ、クラスGUIDは正しく登録されていますが、私の.tlbファイルは登録されていないようです。なぜだかわかりません。.tlbファイルを登録すると、クラスの基になっているインターフェイスのレジストリエントリがHKCR \ Interface {myInterfaceGUID}に配置されますが、これは発生しません。不思議なことに、この登録の欠如は、VB6およびVBAの参照ダイアログ内での検出可能性を除いて、dllの機能に影響を与えていないようです。

セットアッププロジェクト内の.tlbファイルのプロパティは正しいようです。「PackageAs」プロパティは「vsdpaDefault」に設定され、「Register」プロパティは「vsdrfCOM」に設定されています。なぜこれがターゲットマシンに正常にインストールされないのか、私は戸惑っています。

アップデート#3

「ビルドが成功しました」と報告されているにもかかわらず、セットアッププロジェクトが正常にビルドされていないことがわかりました。

実際には、「ファイル名'DotNetLibrary3.tlb'の登録情報を作成できません」というビルド警告(驚くべきことに、エラーではなく警告)が報告されています。これは警告であり、エラーではないため、コンパイルは「ビルドが成功しました」と表示し、エラーリストは開きませんでした。

これを追跡すると、ここで説明するように、Vistaが開発マシンであるときにセットアッププロジェクトを作成しようとすると、これが問題になる可能性があります。

VS2008セットアッププロジェクトでのCOMtypelib登録の問題

ここで説明されているやや手動の修正があります:

フィードバック:「filename」という名前のファイルの登録情報を作成できません

私はまだ修正を試していませんが、明日、これで解決した場合は報告します。

アップデート#4

それはあまりうまくいきませんでした...その記事で提案されているようにRegCap.exeを実行すると、Vistaで実行すると機能しないようです。RegCapは、実際には.msiの作成時にセットアッププロジェクト自体によって内部的に実行されるため、これはそれほど驚くべきことではありません。つまり、セットアッププロジェクトは、呼び出していたRegCapコマンドが失敗したため、ほぼ確実に失敗していました...したがって、RegCapを直接呼び出すことは役に立ちません。

肝心なのは、これはVistaでセットアップパッケージを作成しようとしたときの単なるバグであるということです。または、おそらくVisual Studio 2008とVistaの組み合わせかどうかはわかりませんが、同じ正確なアプローチを試みることは、WindowsXPで実行されているVisualStudio 2005でセットアッププロジェクトを作成することであり、まったく問題はありませんでした。

VistaやVisualStudio2008でこれを正しく実行するための修正があるかもしれませんが、追跡できませんでした。私にとってはるかに効率的なのは、WindowsXPでVisualStudio 2005を使用してビルドし、COM登録要件を生成してから、それらをVisualStudio2008セットアッププロジェクトにインポートすることでした。これらは、dllに対して/ regfileスイッチを使用し、.tlbファイルに対してRegCap(W'XPで実行!)を使用して、regasmを介して.REGファイルとしてエクスポートできます。私のCOMインターフェースは変更されないので、これを行う必要があるのは1回だけです。

うまくいけば、Vistaで実行しているときのVisual Studio 2008のこの問題は、ある時点で修正されるでしょうが、そうでない場合は、この投稿が同じ状況で自分自身を見つけた他の誰かにとって価値があることを願っています...

関連項目:

VB.NETで記述されたCOMServerforExcelをインストールしてAutomationServersリストに登録するにはどうすればよいですか?

-マイク

4

4 に答える 4

2

これはずっと前のことですが、賢明な答えは見つかりません。同様の問題が発生しました。解決策は、VisualStudioをインストールしたのと同じユーザーとして実行することでした。別のユーザーとして実行すると、COM登録以外はすべて機能します。

于 2011-09-22T16:14:39.860 に答える
2

regasmコマンドに/codebaseフラグが含まれていましたか?

于 2009-04-13T02:16:29.950 に答える
0

VistaでVS2008を実行している場合、警告は表示されませんが、昇格されていません。高架は、私たち(Vistaユーザー)が常に物を使用することを学ぶ方法ですが、このため、何らかの理由で、他の方法の方が好きです。

注意:昇格中に、SQL Serverツールのインストールを開始しましたが、最終的には通過できましたが、昇格せずに実行すると、これを再度実行しようとし、アクセス許可の問題で失敗します。ただし、実際のビルド結果には影響しないようです。

于 2009-07-22T00:13:25.237 に答える