1

非 msi インストーラーを使用して、Visual Studio 用の .NET ウィザード フォームを配布しようとしています。簡単にするために、Visual Studio 2008 に注目しましょう。

したがって、アセンブリのビルド後のプロセスの一部として、次のように呼び出します。

regasm /regfile C:\path\to\my\assembly.dll

次に、生成された regfile をパックし、regedit を使用してこれをエンド ユーザー レジストリとマージします。アセンブリ名と CLSID が正しく生成され、それぞれ HKEY_CLASSES_ROOT と HKEY_CLASSES_ROOT\CLSID に配置されていることがわかります。

ただし、Visual Studio 側では、インストールの完了後にエラーが発生します。詳しく説明すると、ウィザードは vsdir ファイルを介して「新しい項目の追加」に表示されます。これは、Visual Studio が適切な COM クラスを認識する vsz ファイルを指します。エラー メッセージに実際に正しい CLSID が表示されるため、HKEY_CLASSES_ROOT にこのクラスが表示されていることがわかります。

Class not registered. Looking for object with CLSID: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

何が問題なのか完全にはわかりません。古い InstallShield プロジェクトには、アセンブリを COM 相互運用としてインストールするための簡単なチェック ボックスがあったことは知っています。残念ながら、これは私には利用できません。おそらくそれは実際の問題ではなく、Visual Studio 2008 のインストール側で何かが欠けています。

アイデアやデバッグの助けをいただければ幸いです。何よりもまず、COM 相互運用のためにアセンブリが正しくインストールされていることを確認したいと思います。これまで COM を使用したことがないため、COM はすべてギリシャ語です。:)

編集:この同じアセンブリは、「古い」InstallShieldプロジェクトでうまくビルドおよび配布されたことに言及する必要があります。したがって、Visual Studio の [項目の追加] ダイアログに .NET COM ウィザードを追加するという私自身の理解/実装に問題があることはわかっています。

4

1 に答える 1

1

クラス (またはアセンブリ) の Com visible 属性が true に設定されていますか?

于 2012-10-22T21:21:10.043 に答える