<CustomAction Id="RegisterEXE"
Directory="INSTALLDIR"
ExeCommand=""[INSTALLDIR]MyApp.exe" /Register"
Execute="immediate"
Return="ignore"
/>
<InstallExecuteSequence>
<Custom Action='RegisterEXE' After='InstallFinalize' />
</InstallExecuteSequence>
exe应该注册为ole server。 但它没有注册。
答案 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=""[INSTALLDIR]TKW5.exe" /Register"
Execute="deferred"
Return="ignore"
Impersonate="no"
/>
<InstallExecuteSequence>
<Custom Action='RegisterEXE' After='InstallFiles' />
</InstallExecuteSequence>