从C ++自定义动作dll WIX调用函数的问题

时间:2012-07-26 13:09:46

标签: dll wix custom-action

我现在正在使用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代码。

2 个答案:

答案 0 :(得分:1)

有很多可能的答案,如果没有看到你的C ++和你的WiX代码就很难说。

需要考虑的事项:

C ++ dll是否有目的地构建为自定义操作? (它是否导出Type1 stdcall MsiCustom Action?) 这个功能叫什么名字? 您的WiX代码中该功能名称是否正确? 你有没有在你的函数中记录它是否被执行了?

更新:您不应该使用自定义操作来执行安装程序可以本机执行的操作。此外,在创建需要提升和/或更改机器状态的CA时,应始终将它们安排为延迟,不要立即进行模拟。您有很多关于安装程序最佳实践的解读,以解决您的战略问题,而不是强调您的战术问题。

答案 1 :(得分:-1)

我意识到我忘了添加以下行,这使我的代码完美运行。希望这有助于其他人。:)

#pragma comment(linker, "/EXPORT:StopOrcService=_StopOrcService@4")