在wix安装期间注册ole server exe

时间:2014-04-10 05:36:40

标签: wix installation install wix3.7

<CustomAction Id="RegisterEXE"
                Directory="INSTALLDIR"
                  ExeCommand="&quot;[INSTALLDIR]MyApp.exe&quot; /Register"
                  Execute="immediate"
                  Return="ignore"                  
                 />

 <InstallExecuteSequence>
      <Custom Action='RegisterEXE' After='InstallFinalize' />
 </InstallExecuteSequence>

exe应该注册为ole server。 但它没有注册。

2 个答案:

答案 0 :(得分:3)

Windows Installer Best Practices

  

不要使用SelfReg和TypeLib表。

     

•强烈建议安装包作者不要使用自我注册和   SelfReg表。相反,他们应该通过创作一个来注册模块   或者注册表组中的更多表。很多人   自行注册会丢失Windows Installer的好处   因为自注册例程往往会隐藏关键配置   信息。有关避免自我注册的原因列表   请参阅SelfReg表。

     

•强烈建议安装包作者   反对使用TypeLib表。而不是使用TypeLib表,   使用Registry表注册类型库。如果安装   使用TypeLib表失败,必须回滚,回滚   可能无法将计算机还原到之前存在的相同状态   回滚。

原因是自我注册是一个进程外执行,速度较慢,容易出现故障并且Windows Installer无法检测到。这会产生重现,回滚,卸载和升级方案的问题。更好的方法是从EXE“收获”COM元数据并将其原生作用到MSI中。这样,MSI只是复制文件并应用注册表项。如果发生回滚,MSI会知道它做了什么并简单地将其还原。有关更多信息,请参阅:

Reasons for Avoiding Self Registration

在WiX中实现此目的的方法是通过Harvest Tool (Heat)运行EXE。这将生成一个.WxS片段,然后您可以将其包含在安装程序中。

答案 1 :(得分:-1)

CustomAction Attibute Impersonate的默认值为yes。您需要将其设置为no以使用Elevated权限(安装程序现在拥有的权限)运行可执行文件。 OLE服务器注册需要在HKCU和HKLM中进行更改。

阅读Wix doc

<CustomAction Id="RegisterEXE"
                  Directory="INSTALLDIR"
                  ExeCommand="&quot;[INSTALLDIR]TKW5.exe&quot; /Register"
                  Execute="deferred"
                  Return="ignore"  
                  Impersonate="no"
                 />

<InstallExecuteSequence>
      <Custom Action='RegisterEXE' After='InstallFiles' />
</InstallExecuteSequence>