如何从MSI / WIX项目中的DLL自定义操作(C ++ DLL)访问临时Exe或DLL?

时间:2011-07-12 02:02:29

标签: wix windows-installer

我有两个用例:1)在自定义操作期间加载临时DLL,以及2)从自定义操作执行临时EXE。自定义操作DLL是非托管C ++。我无法弄清楚如何正常工作。包含DLL很容易,但LoadLibrary失败,因为它找不到DLL。我似乎也无法获取提取的DLL的物理路径,以便在LoadLibrary中指定完整路径。任何帮助表示赞赏。我正在使用WIX btw进行这项工作。

2 个答案:

答案 0 :(得分:1)

如果已在msi的二进制表中包含dll和exe,则文件将实际存在于当前登录用户的%Temp%文件夹中,该文件夹将映射到Windows Installer的SUPPORTDIR属性。

您需要使用MsiGetProperty获取SUPPORTDIR并在LoadLibrary中使用它。

答案 1 :(得分:0)

要记住的一件事 - Windows Installer通常会将文件从二进制表提取到%TEMP%,但是 - 当前工作目录通常设置为c:\ windows \ installer。

我的建议 - 在您需要时自己从二进制表中提取临时.dll。这使您可以控制何时保存到。请记住,您需要对该位置具有写入权限,因此通常一些%temp%的子目录是最佳选择。