我现在正在使用wix并开发了一个安装程序。此安装程序调用C ++自定义操作DLL。 DLL和安装程序都正在构建成功,但是当我安装它时,安装结束时“安装程序向导因错误而提前结束”任何人都知道可能的答案吗?
这是C ++ Dll函数:
extern "C" UINT __stdcall StopOrcService(MSIHANDLE hInstall)
然后我继续使用该函数的代码。然后我使用def文件导出它。
<CustomAction Id='StopOrcService' BinaryKey='StopOrcService' DllEntry='StopOrcService' Execute='immediate' Return='check'/>
<InstallExecuteSequence>
<Custom Action='StopOrcService' After='ProcessComponents' />
</InstallExecuteSequence>
<Binary Id='StopOrcService' SourceFile='SetupDLL.dll' />
那是我的wix代码。
答案 0 :(得分:1)
有很多可能的答案,如果没有看到你的C ++和你的WiX代码就很难说。
需要考虑的事项:
C ++ dll是否有目的地构建为自定义操作? (它是否导出Type1 stdcall MsiCustom Action?) 这个功能叫什么名字? 您的WiX代码中该功能名称是否正确? 你有没有在你的函数中记录它是否被执行了?
更新:您不应该使用自定义操作来执行安装程序可以本机执行的操作。此外,在创建需要提升和/或更改机器状态的CA时,应始终将它们安排为延迟,不要立即进行模拟。您有很多关于安装程序最佳实践的解读,以解决您的战略问题,而不是强调您的战术问题。
答案 1 :(得分:-1)
我意识到我忘了添加以下行,这使我的代码完美运行。希望这有助于其他人。:)
#pragma comment(linker, "/EXPORT:StopOrcService=_StopOrcService@4")