我试图了解我的setup.msi在安装时如何插入注册表值。在Orca编辑器中,我看到了这样,
安装msi后,在我看到的日志文件中,
MSI (s) (A8:B4) [16:27:28:674]: Executing op: ComponentRegister(ComponentId={45667B7F-9DC7-43B7-BE9E-3215ED1B1985},KeyPath=02:\SOFTWARE\myCompany\MySolution\Plugins\MyProduct\ProductCode,State=3,,Disk=1,SharedDllRefCount=0,BinaryType=0)
我想对这种机制进行逆向工程,任何人都可以帮助我理解这一点吗?我想使用WIX重新创建相同的内容,所以我只是尝试下面的
<Component Id="RegistryEntries" Guid="*">
<RegistryKey Root="HKLM"
Key="Software\Microsoft\MyCompany"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="MyApp" Value="[INSTALLLOCATION]" KeyPath="yes"/>
<RegistryValue Type="string" Name="Configuration Files" Value="[INSTALLLOCATIONCONFIG]"/>
<RegistryValue Type="string" Name="Configuration Files1" Value="[INSTALLLOCATIONCONFIG1]"/>
</RegistryKey>
</Component>
当我构建msi并编辑它时,我看到如下,
如何获取msi,如上图所示?
答案 0 :(得分:4)
MSI在Registry table中表达注册数据。在安装过程中,系统会确定要安装哪些功能和组件,以便执行哪个注册表添加,更新和删除。实际工作由WriteRegistryValues和RemoveRegistryValues操作执行。
在安装过程中“执行reg文件”不是最佳做法,因为它不在进程中,MSI无法管理更改。而是使用WiX Heat tool将注册表文件的内容收集到wix xml源中以包含在安装程序中。