Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
InstallShield UseDLL()不';在同一目录中找不到dll依赖项_Dll_Dependencies_Installshield_Installscript - Fatal编程技术网

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

InstallShield UseDLL()不';在同一目录中找不到dll依赖项,dll,dependencies,installshield,installscript,Dll,Dependencies,Installshield,Installscript,我有一个dll文件,在我的一个安装脚本中使用UseDLL()在安装过程中尝试加载该文件。 此dll有2个它所依赖的dll。它们都位于主dll的同一目录中 在使用较旧的installshield构建安装时,它会发现它的依赖项并且工作正常。 当我尝试用IS2016构建它时,它失败了,因为它找不到它的依赖项。(如果我将这两个DLL放在SysWOW64中,它会找到它们并正常工作) 有什么问题 谢谢, Dudi通过一个名为DLL\u DIRECTORY\u SUPPORTDIR的新启用/禁用标志,它看起来

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

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

有什么问题

谢谢,
Dudi

通过一个名为DLL\u DIRECTORY\u SUPPORTDIR的新启用/禁用标志,它看起来像是InstallShield 2018。但在InstallShield 2016中,您很有可能添加以下InstallScript代码以在SUPPORTDIR中查找依赖项。如果DLL位于不同的目录中,请替换该目录

// Add prototype for SetDllDirectory(); this typically goes near the top of your script
prototype number kernel32.SetDllDirectoryW(wstring);

请注意,这样做会消除对DLL植入的一些保护,因此,只有在您确保有问题的DLL能够主动抵御此类情况,或者您检查并保护有问题的目录时,这样做才是最安全的。(我不确定InstallShield是否能为您做到这一点。)

通过一个名为DLL\u DIRECTORY\u SUPPORTDIR的新启用/禁用标志,它看起来像是InstallShield 2018。但在InstallShield 2016中,您很有可能添加以下InstallScript代码以在SUPPORTDIR中查找依赖项。如果DLL位于不同的目录中,请替换该目录

// Add prototype for SetDllDirectory(); this typically goes near the top of your script
prototype number kernel32.SetDllDirectoryW(wstring);

请注意,这样做会消除对DLL植入的一些保护,因此,只有在您确保有问题的DLL能够主动抵御此类情况,或者您检查并保护有问题的目录时,这样做才是最安全的。(我不确定InstallShield是否为您提供此功能。)

谢谢,它可以工作!虽然我不明白为什么会在2016年发生这种情况,因为他们提到了在2018年发生的变化。“SetDllDirectoryW”是一个相反的函数吗?所以我可以在完成安装时从dll搜索路径中删除SUPPORTDIR?谢谢为了澄清,2018年增加了启用/禁用选项;这些保护是在2016年添加的,并作为早期版本的热修复程序提供。Microsoft的文档解释了如何反转,但我不记得您是否可以控制在InstallScript中传递空字符串和空字符串。谢谢,它可以工作!虽然我不明白为什么会在2016年发生这种情况,因为他们提到了在2018年发生的变化。“SetDllDirectoryW”是一个相反的函数吗?所以我可以在完成安装时从dll搜索路径中删除SUPPORTDIR?谢谢为了澄清,2018年增加了启用/禁用选项;这些保护是在2016年添加的,并作为早期版本的热修复程序提供。Microsoft的文档解释了如何反转,但我不记得您是否可以控制在InstallScript中传递空字符串和空字符串。