我有一个COM库,我想在Wix安装期间在COM中注册。
起初,我尝试使用heat
命令获取信息,但没有从该.dll中获取任何信息。然后我认为我的库是错的,并尝试使用regsvr32
命令手动安装它:
regsvr32.exe /s "RouteToMyLibrary/MyLibrary.dll"
它确实安装正确......
然后我决定使用CustomAction
而不是收获来安装.dll,因为它看起来像是我的解决方案。
所以我写了以下CustomAction
:
<CustomAction Id="RegisterCOMLibrary"
Directory"DirIdOfWhereMyComLibraryIsLocated"
ExeCommand='regsvr32.exe /s "[DirIdOfWhereMyComLibraryIsLocated]MyLibrary.dll"'></CustomAction>
<InstallExecuteSequence>
<Custom Action="RegisterCOMLibrary" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>
但是,当我运行安装程序时,会启动1722错误。
我运行安装程序编写log.txt
,如下所示:
msiexec /i MyInstaller.msi /l*v log.txt
我可以看到1722年的错误。 注意:
regsvr32
命令并尝试执行它,它会注册 COM库。关于我做错了什么以及为什么我不能使用来自Wix的这个自动CustomAction来注册我的.dll的任何想法?
注意:当我heat file mylibrary.dll -out mylibrary.wxs
时,它会说:
Could not harvest data from a file that was expected to be a SelfReg DLL...
答案 0 :(得分:2)
错误1722只意味着程序意外完成,意味着它不是路径问题。 “正确路径”的概念可能是一个问题,具体取决于Dll或regsvr32的版本是64位还是32位。在32位Dll上运行64位regsvr32可能会导致该问题。我也不清楚(在自定义操作的上下文中)Windows会自动知道您想要哪个bitnessvs32以及它在哪里。
简短的回答是你应该解决热量收获问题。它是64位Dll吗?
答案 1 :(得分:1)
您的COM dll看起来有问题,或者它缺少依赖性,无法通过heat.exe加载。两个可以提供帮助的工具:依赖性walker和regspy:
RegSpy (来自Phil Wilson和其他人的免费软件,从Stefan Kruger的http://installsite.org/下载。tools page。):
Dependency Walker (来自Steve Miller的免费软件):
首先尝试使用RegSpy来确定它是否可以从dll中提取com数据。如果这不起作用,请使用Dependency Walker检查是否存在阻止加载dll的缺少依赖项。这些可能是其他dll甚至是资源文件,例如图像或语言dll,它们仅是资源(有时还带有图像)。
根据运行这两个工具的结果,您可能需要修复dll中的某些内容,或者仅使用所有依赖项正确执行com数据提取。
请注意,某些COM文件在注册过程中确实存在疯狂的事情 - 比如更改TCP / IP的网络参数或者上帝知道还有什么。很少见,但COM组件的设计错误很严重。 RegSpy可以揭示这一点,但最常见的是重新打包应用程序。