6

COM インターフェイス (COM 呼び出し可能ラッパー / CCW) を公開する .NET コンポーネントを使用する .NET サービス アプリケーションのセットアップ プロジェクトがあります。コンポーネントをターゲットマシンで動作させるには、登録する必要があります

regasm.exe /tlb /コードベース component.dll

この場合、typelib を生成するための /tlb スイッチは必須です。そうしないと、そのアセンブリからオブジェクトを作成できません。

問題は、Visual Studio 2008 セットアップ プロジェクトを構成して、このアセンブリを regasm /tlb の呼び出しで登録するにはどうすればよいかということです。

4

5 に答える 5

14

代わりにSystem.Runtime.InteropServices.RegistrationServicesを使用すると、regasm.exeへの手動呼び出しを失う可能性があります。

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
    throw new InstallException("Failed to register for COM Interop.");
}

}

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
    throw new InstallException("Failed to unregister for COM Interop.");
}
}

これにより、アンインストール時にライブラリの登録も解除されます。

于 2009-12-10T19:49:56.500 に答える
4
  1. メイン プロジェクト (登録するクラスを含むプロジェクト) で、プロジェクト ファイルを右クリックし、[追加/新しい項目] を選択して、[インストーラー クラス] を選択します。clsRegisterDll.cs のように呼び出します
  2. 表示されるデザイナーで、[ここをクリックしてコード ビューに切り替える] をクリックするか、ソリューション エクスプローラーで clsRegisterDll.cs ファイルを右クリックして [コードの表示] を選択します。
  3. 以下を追加して、Install、Commit、および Uninstall メソッドをオーバーライドします。

    // regasm の場所を取得 string regasmPath = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + @"regasm.exe"; // DLL 文字列の場所を取得 componentPath = typeof(RegisterAssembly).Assembly.Location; // regasmを実行
    System.Diagnostics.Process.Start(regasmPath, "/codebase /tlb \"" + componentPath + "\"");

    アンインストール アクションで /codebase /tlb を /u に置き換えます。

  4. プロジェクトをコンパイルする
  5. インストーラーで、dll をアプリケーション フォルダーに追加したことを確認してから、インストーラー プロジェクトを右クリックし、[表示]、[カスタム アクション] の順に選択します。
  6. [インストール] を右クリックし、[カスタム アクションの追加] をクリックします。
  7. アプリケーションフォルダーをダブルクリックしてから、dll をダブルクリックします。
  8. コミットアクションについても同じことを行います
  9. インストーラーをビルドしてテストする

実際のクラスを試してみるためのチュートリアルは、http: //leon.mvps.org/DotNet/RegasmInstaller.htmlにあります。

于 2009-01-15T12:12:27.220 に答える
1

最初に、インストーラー プロセスから regasm を実行しようとしました (この投稿を見る前に)。regasm を実行しようとして、Windows 7 の昇格された特権を処理しようとしなくても、すべてのエラーを処理するのは問題がありました。

を使用するRuntime.InteropServices.RegistrationServices.RegisterAssemblyと、はるかにクリーンになり、はるかに優れたエラー トラップが提供されました。

于 2011-08-25T12:01:09.110 に答える
1

サービスには Installer クラスが必要です。OnAfterInstall イベントに登録し、RegAsm を呼び出します。パスは Windows ディレクトリから計算され、特定の .Net バージョンに関連付けられている必要があります。

于 2008-10-27T11:45:51.913 に答える
0

デフォルトでは、Visual Studio インストーラーは COM クラスの登録のみを行いますが、タイプ ライブラリの生成と登録は行いません (これが で/tlbの切り替えregasm.exe doesです)。少なくとも Visual Studio 2017 では、DLL のビルド後の手順でタイプ ライブラリを生成し、Tlbexp.exeユーティリティを使用して登録するだけで十分です。

.tlbインストーラー プロジェクトが、インストールするライブラリーと同じディレクトリに同じ名前の拡張子を持つファイルを検出すると、自動的にセットアップ プロジェクトに含め、インストール中に登録手順を実行します。もちろん.tlb、手動でファイルを生成してセットアップ プロジェクトに含めることもできます (そしてその Register プロパティを に設定しますvsdrfCOM)。

これはC# と COM インターフェイスに関する優れた記事で、上記の情報は Deployment というセクションからのものです。

于 2019-06-29T15:27:23.077 に答える