2012-07-10 65 views
2

我正在創建一個WIX安裝程序項目。安裝過程中的一部分工作是註冊一些COM組件。我(有希望)通過使用heat.exe來生成COM組件聲明,儘管我需要在wxs文件生成後稍微修改一下。爲了說清楚,我在這裏粘貼我的COM組件聲明:回滾期間在WIX中取消註冊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> 

我用xxx代替了一些ID,所以它們不是問題。如果還有其他問題,請通知我。

現在我的問題是:我是否需要顯式指定在回滾階段卸載COM組件?因爲我遇到過一些問題,那就是在安裝失敗之後,安裝的進一步嘗試將不會通過,並且彈出一些「ActiveX對象無法創建」的錯誤。我懷疑這是因爲COM組件在以前的失敗安裝中未成功註銷。但我不確定。事實上,我在COM互操作方面的知識有限,所以我不確定安裝/卸載它們的必要條件。任何幫助,將不勝感激。謝謝!

回答

2

當您使用Heat來收集COM組件時,這就足夠了。如果安裝失敗並回滾,它應該處理註銷COM組件。

相關問題