0

我目前使用 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代码。

4

2 回答 2

1

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

需要考虑的事项:

C++ dll 是否有目的地构建为自定义操作?(它是否导出 Type1 stdcall MsiCustom Action?)该函数的名称是什么?您的 WiX 代码中的函数名称是否正确?您是否在函数中添加了任何日志以查看它是否被执行?

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

于 2012-07-26T14:42:16.023 回答
-1

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

#pragma comment(linker, "/EXPORT:StopOrcService=_StopOrcService@4")
于 2012-07-27T10:05:11.970 回答