InstallShield UseDLL() 在同一目录中找不到 dll 依赖项

InstallShield UseDLL() doesn't find dll dependencies in the same directory

我有 1 个 dll 文件,我在安装过程中尝试在我的一个安装脚本中使用 UseDLL() 加载它。 这个 dll 有 2 个它依赖的 dll。它们都位于主 dll 的同一目录中。

在使用较旧的 installshield 构建安装时 - 它发现它的依赖项并且工作正常。 当我尝试使用 IS2016 构建它时,它失败了,因为它找不到它的依赖项。 (如果我将这 2 个 dll 放入 SysWOW64 - 它会找到它们并且工作正常)。

有什么问题?

谢谢, 嘟嘟

看起来像 InstallShield 2018 makes this easier 通过一个名为 DLL_DIRECTORY_SUPPORTDIR 的新 Enable/Disable 标志。但在 InstallShield 2016 中,您很有可能可以添加以下 InstallScript 代码以在 SUPPORTDIR 中查找依赖项。如果您的 DLL 位于不同的目录中,请替换为该目录。

// Add prototype for SetDllDirectory(); this typically goes near the top of your script
prototype number kernel32.SetDllDirectoryW(wstring);
// Call it; this goes in a function called before your UseDLL call
SetDllDirectoryW(SUPPORTDIR);

请注意,这样做会删除一些防止 DLL 植入的保护措施,因此只有在您确保相关 DLL 主动抵制此类行为,或者您审查并保护相关目录时,才最安全地执行此操作。 (我不确定 InstallShield 是否会为您执行此操作。)