25

COM Library を登録するために Visual Studio が行うことについて尋ねたところ、VS が COM 登録のために 2 つのことを行っていることが明らかになりました。

  1. COM ライブラリを登録しました
  2. タイプ ライブラリを作成して登録します

Visual Studio は regasm.exe を使用してこの登録を行うようです。最初の部分 (直接 COM 登録) では、tallowor heat(WiX 2.0 または WiX 3.0) を使用すると、すべての基本的な COM 登録情報が正しく取得されるようです。

ただし、tallow/heat が実行していないように見えるのは、タイプ ライブラリのインストールのセットアップです。WiX インストーラーと regasm.exe を使用してこれを行うカスタム アクションを作成することは可能ですが、Microsoft インストーラー ベースのインストーラーに関しては、カスタム アクションを呼び出すことはベスト プラクティスではありません。

さらに調査すると、msi にはインストール時にタイプ ライブラリを生成する機能があるようです。実際、WiX はそれを直接サポートしているようです! file 要素では、 Typelib要素を追加できます。実際、wix の記事には、TypeLib 要素をInterface要素で埋める例があります。

Interface 要素には少なくとも 2 つの必須属性があるようです。

  1. ID
  2. 名前

Larry Osterman は、TypeLib 一般に登録する必要があるインターフェイスの他の部分について語っています。このインターフェイス エントリは、個々の部分を処理しているようです。Larry は、ProxyStubClassId32 を "{00020424-0000-0000-C000-000000000046}" として指定する必要があると言っているので、簡単に追加できます。

そこからどこへ行けばいいのか、さまざまなインターフェイス要素に何を記入すればよいのか、私は困惑しています。TypeLib 要素を wix ファイルに追加したところ、正常にコンパイルされました。ただし、インターフェイス要素を設定する方法については少しわかりません。TypeLib 要素を適切に入力するにはどうすればよいですか?また、それを取得するためにどのアプリやツールを使用できますか?

以下のwcoenenによる回答は有望に見えます...試してみます。

更新:私の最終的な解決策を回答として以下に投稿しました。

4

3 に答える 3

17

この問題を解決する怠け者の方法は次のとおりですheat。WiX 3.0 から使用します。

自動的に生成され、regasm を介してインストールされたタイプ ライブラリがある場合はheat、.tlb を引数として取ることができます

heat file c:\my\path\to\my.tlb -out tlb.wxs

登録する必要があるすべての typelib 要素とインターフェイス要素が生成されます。これは、それらを事前に知る必要があるという問題を解決しません。また、アセンブリのバージョンが変更されたときに GUID が変更されるという問題を解決しません (インターフェイスが変更されなくても - これが唯一の場合です)。それを変更することになっています)が、途中でそこにたどり着きます。

于 2009-03-06T01:32:22.667 に答える
8

次のトリックは、レジストリの変更を収集し、それらをwxsファイル(必要なtypelib要素を含む)に変換するのに役立ちます。

  1. まず、レジストリをタイプライブラリが登録されていない状態に戻します。

    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb /u mylib.dll
    
  2. レジストリのこのクリーンな状態をhklm-before.regにエクスポートします。

    c:\WINDOWS\system32\reg.exe export HKLM hklm-before.reg
    
  3. タイプライブラリを再度登録します。

    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb mylib.dll
    
  4. レジストリの新しい状態をhklm-after.regにエクスポートします。

    c:\WINDOWS\system32\reg.exe export HKLM hklm-after.reg
    
  5. これで、hklm-before.regとhklm-after.regの2つのテキストファイルができました。これらの間の関連する違いのみを保持するdiff.regファイルを作成します。差分ツールを使用すると、違いを簡単に見つけることができます。TortoiseSVNに含まれているdiffツールは、すでに毎日使用しているので、使用するのが好きです。(この場合、テキストエンコーディングの問題のため、WinDiffはうまく機能しないようです。)

  6. heat.exeこれで、コマンドを使用してdiff.regを.wxsに変換できますreg。(wix 3.5以降が必要です。)

    heat reg diff.reg -out typelib.wxs
    
于 2009-02-20T10:42:10.420 に答える