5

この質問は、heat.exe からの出力に関するものです。MSI での COM 相互運用のためにいくつかの .NET アセンブリを登録することに関して、私は「正しいこと」をしようとしています。Regasm.exe は間違っています。

簡単で「ほとんど」動作する regasm.exe を直接呼び出すことは、明らかに良い考えではないと Rob Mensching 氏は述べています。そのブログ投稿では、なぜそれが良い考えではないのかを説明し、非常に簡単な解決策も提供しています。残念ながら、2004 年の投稿は、現在非推奨またはサポートされていない wix 機能を示唆しています。そこに記載されている解決策はもはや有効ではないと思いますが、そのブログ投稿に記載されている問題は残っています.

問題の「正しい」解決策は、heat.exe を実行してから、ディレクトリ参照などを「修正」することです。それは非常に簡単に聞こえますが、私がやろうとしていることです。

わかりました、だから私は正しいことをしようとしています。また、アセンブリを GAC したくないので、codebase引数を使用して COM 登録を行う必要があります。heat.exe の出力には、次のようなものが含まれます。

    <RegistryKey Root="HKCR" Key="CLSID\{xxx-GUID-HERE-xxx-xxx}\InprocServer32\1.2.3.4" >
      <RegistryValue Name="Class" Value="My.DotNet.Classname.Here" Type="string" />
      <RegistryValue Name="Assembly" Value="Strongname of .NET Assembly here" />
      <RegistryValue Name="RuntimeVersion" Value="v2.0.50727" Type="string" />
      <RegistryValue Name="CodeBase" Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" Type="string" />
    </RegistryKey>

最初の質問: とは正確には何Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]"ですか?

それはfil4B562083D141F5A2F29E28A1BD09AF3EWix によって生成された Id のようです。ID は .wxs ファイルの File 要素に属し、名前付き .NET クラスを含むアセンブリ (DLL) へのパスを参照します。では、オクトソープは何のためにあるのでしょうか。そして角括弧?そしてfile:/// プレフィックス?この構文を理解するのを手伝ってください。

私が尋ねる理由 - 私はこの ID を使用したくありません。ファイルの実際の意味を反映するファイル ID を既に持っていますが、それは違います。

しかし、問題のファイルは別のコンポーネントにインストールされています。そのファイルを参照しようとすると、次のようなエラー メッセージが表示されます。

  C:\dev\project\ComRegistration.wxs(397): warning LGHT1076: ICE69: Mismatched component reference. 
  Entry 'reg9652ABFDD2B970C523070996FE7BB510' of the Registry table belongs to 
  component 'C.ComRegistration'. However, the formatted string in column 'Value' references 
  file 'MyAssembly.dll' which belongs to component 'C.Main'. Components are in the same 
  feature. [C:\dev\project\MyProject.wixproj]

これを解決するにはどうすればよいですか?

Fileこのコンポーネントには、同じファイルシステム ファイルを参照する別の要素は必要ないと思います。別のコンポーネント (同じ機能) と共に既にインストールされています。どのように参照できますか?

基本的に のような要素が欲しいのですFileRefが、それは明らかに存在しません。

4

1 に答える 1

5

[#fileId] は、ファイルへのパスに置き換えられます。(完全なリストについては、MSI SDK の「フォーマット済み」を参照してください。)

レジストリ値とファイルを同じコンポーネントに配置することで、ICE69 を回避できます。ICE69 は、ファイルが登録なしでインストールされる可能性があることを示しています。(架空の FileRef ではこの問題は解決されません。) それらをまとめると、問題は発生せず、ICE69 は文句を言いません。

于 2011-07-28T20:58:44.573 に答える