2

WIX インストーラ プロジェクトを作成しています。インストールの作業の一部は、COM コンポーネントを登録することです。wxs ファイルが生成された後に少し変更する必要がありましたが、heat.exe を使用して COM コンポーネント宣言を生成することで (うまくいけば) 成功しました。わかりやすくするために、COM コンポーネントの宣言をここに貼り付けます。

<ComponentGroup Id="COMComponent" Directory="INSTALLDIR">        
      <Component Id="COMDll" Guid="MY_GUID1">
        <Class Id="{MY_CLASSID1}" Context="InprocServer32" Description="DESCRIPTION1" ThreadingModel="both" ForeignServer="mscoree.dll">
          <ProgId Id="MYID1" Description="DESCRIPTION1" />
        </Class>
...
        <File Id="FILE_ID_1" KeyPath="yes" Source="MY_COM.dll" />  

        <File Id="FILD_ID2" KeyPath="no" Source="MY_COM.tlb">
          <TypeLib Id="{xxx}" Description="xxx" HelpDirectory="INSTALLDIR" Language="0" MajorVersion="525" MinorVersion="0">
            <Interface Id="{xxx}" Name="xxx" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
...
          </TypeLib>
        </File>

        <ProgId Id="Record" />
        <RegistryValue Root="HKCR" Key="CLSID\{xxx}\Implemented Categories\{xxx}"  Value="" Type="string" Action="write" />
        <RegistryValue Root="HKCR" Key="CLSID\{xxx}\InprocServer32\525.0.4573.25681" Name="Class" Value=" MYID1" Type="string" Action="write" />
...
        </Component>                          
    </ComponentGroup>

一部の ID を xxx に置き換えたので問題ありません。他に何か問題がある場合は、お知らせください。

ここで私の質問は、ロールバック フェーズで COM コンポーネントをアンインストールするよう明示的に指定する必要がありますか? インストールに失敗した後、それ以上のインストールの試行が行われず、「ActiveX オブジェクトを作成できません」というエラーが表示されるという問題が発生したためです。以前の失敗したインストールで COM コンポーネントが正常に登録解除されなかったことが原因であると思われます。しかし、よくわかりません。実際、私は COM 相互運用に関する知識が限られているため、それらをインストール/アンインストールするために何が必要かわかりません。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

Heat を使用して COM コンポーネントを収集する場合は、それで十分です。インストールが失敗してロールバックされた場合、COM コンポーネントの登録解除を処理する必要があります。

于 2012-07-10T13:16:53.263 に答える