NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path

2023-12-03

我正在尝试在 NSIS 安装程序中加载并调用 C 库 DLL 的函数。当我尝试加载 DLL 时,发出错误 126 (ERROR_MOD_NOT_FOUND)。

这是我用来测试的最小安装程序脚本:

OutFile Main.exe

ShowInstDetails show

Section
  SetOutPath "C:\Program Files (x86)\MyApp"
  System::Call 'kernel32::LoadLibraryA(m "C:\Program Files (x86)\MyApp\API.dll")i.r0 ? e'
  Pop $9
  DetailPrint $9
  DetailPrint $0

  System::Call 'kernel32::GetProcAddress(i r0,m "GetVersion")i.r1 ? e'
  Pop $9
  DetailPrint $9
  DetailPrint $1
  System::Call 'kernel32::FreeLibrary(ir0)'
SectionEnd

您可以看到我将输出路径设置为 DLL 所在的位置;它的所有依赖项都在哪里。然而,在检查 procmon 中的进程时,我发现仅在 Windows 系统目录中搜索依赖项,而不是输出路径:

Load Image             C:\Program Files (x86)\MyApp\API.dll  SUCCESS                 
CreateFile             C:\Program Files (x86)\MyApp\API.dll  SUCCESS                 
QueryBasicInformationFiC:\Program Files (x86)\MyApp\API.dll  SUCCESS                 
CloseFile              C:\Program Files (x86)\MyApp\API.dll  SUCCESS                 
CloseFile              C:\Program Files (x86)\MyApp\API.dll  SUCCESS                 
Thread Create                                                SUCCESS                 
CreateFile             C:\Windows\syswow64\DEPENDENCY_1.dll  NAME NOT FOUND          
CreateFile             C:\Windows\syswow64\msvcr100.dll      SUCCESS                 
QueryBasicInformationFiC:\Windows\syswow64\msvcr100.dll      SUCCESS                 
CloseFile              C:\Windows\syswow64\msvcr100.dll      SUCCESS                 
CreateFile             C:\Windows\syswow64\DEPENDENCY_2.dll  NAME NOT FOUND          
CreateFile             C:\Windows\syswow64\DEPENDENCY_3.dll  NAME NOT FOUND          
CreateFile             C:\Windows\syswow64\msvcr100.dll      SUCCESS                 

如何让我的输出路径被搜索依赖项?需要注意的是,“C:\Program Files (x86)\MyApp”也在 Path 环境变量中,那么为什么也没有被搜索到呢?


NSIS 最近的安全更改锁定了允许您加载库的位置。您可以致电AddDllDirectory添加其他目录:

Section
System::Call 'KERNEL32::AddDllDirectory(w "c:\path")' ; Note: Path must exist at this point
System::Call 'KERNEL32::LoadLibrary(t "c:\path\file.dll")p.r0'
System::Call 'KERNEL32::GetProcAddress(pr0, m "somefunction")p.r1'
${If} $1 P<> 0
  ...
${EndIf}
System::Call 'KERNEL32::FreeLibrary(pr0)'
SectionEnd
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path 的相关文章

随机推荐

  • 如何安装 PyGObject?

    我正在尝试在 Windows 7 上安装 PyGtk for Python 2 7 但是当使用 pip 安装 PyGtk 时 它说我需要 PyGObject 见图 所以我安装了 Python 的 Visual C 包 我知道我有正确的版本
  • 如何在 C# 中进行*整数*求幂?

    内置的Math Pow NET 中的函数引发了double基地到一个double指数并返回 adouble result 对整数执行相同操作的最佳方法是什么 补充 好像可以直接施法Math Pow 结果为 int 但这总是会产生正确的数字并
  • 将语音录制到 Queue 中并将其发送到服务器

    我正在开发语音应用程序 我需要某种缓冲区队列 以便我在线程中连续记录 将充满字节的缓冲区放入队列中并传输到服务器 然后从队列中取出下一个缓冲区 这是录制代码 Queue
  • 如何更改程序的工作目录

    在 Mac 上试用 Clion EAP 如何更改已启动程序的当前工作目录 它似乎被设置为二进制文件的输出目录 这可以通过以下方式更改Run gt Edit Configurations 对话框 就像 Idea 一样 需要进行更改的组合CMa
  • 为什么 @ResponseBody 将排序的 LinkedHashMap 返回为未排序?

    这是 SpringMVC 控制器代码片段 RequestMapping value getCityList method RequestMethod POST public ResponseBody LinkedHashMap
  • 如何将 UITextview 样式设置为圆角矩形文本字段?

    我正在使用文本视图作为评论编辑器 在属性检查器中 我找不到类似边框样式属性的任何内容 以便我可以使用圆角矩形 例如UITextField 所以 问题是 我该如何设计UITextView like a UITextField带有圆角矩形 没有
  • 设置 Maven 插件连接器错误

    我正在尝试将项目导入 Spring Source Tool Suite 最新版本 该项目之前是从 Maven 原型目录创建的 我收到屏幕截图中显示的错误 我能够在不同的机器上导入相同的项目 但使用相同的 Maven 存储库 我复制了整个 m
  • 1:1 或 1:0 关系的标准化

    当使用关系数据库并且您想要 3NF 您用英语称之为 3NF 吗 时 您可以将 1 1 关系拉到一张表中 但如果配给比例是 1 0 1 意思是 或 会发生什么呢 然后将它们分开以避免表格中出现空格 在这种情况下 将它们分开是有效的 3NF 吗
  • Java DOM 通过 ID 获取元素

    我正在 Java 中使用 DOM 解析器将子节点添加到现有节点中 我的 XML 是
  • 如何查找 SQL Server Management Studio 的服务器名称

    我安装了 Microsoft SQL Server 2008 当我启动 SQL Server Management Studio SSMS 时 我得到Connect to Server带有空白文本框的登录窗口Server name 我尝试了
  • 在 mysql 8 中使用 GROUP BY

    我已经升级了 MySQL 服务器 现在我遇到了 group by 问题 select from tickets WHERE status 0 group by tnumber ORDER BY created at DESC 错误是 SEL
  • mllib NaiveBayes 中的类数量有限制吗?调用 model.save() 时出错

    我正在尝试训练一个模型来预测文本输入数据的类别 我使用以下方法遇到了似乎数值不稳定的问题pyspark ml classification NaiveBayes当类别数量超过一定数量时 对词袋进行分类 在我的现实世界项目中 我有大约 10
  • Javascript for 循环和警报

    我正在循环浏览链接列表 我可以正确获取标题属性 并希望它在单击时显示 当页面加载并单击链接时 所有链接标题都会一一提醒 我究竟做错了什么 function prepareShowElement var nav document getEle
  • 仅在 apex 报告的某些行上显示“编辑”链接

    我有以下报告结构 显示全年产品的销售目标和销售额 每个产品都有两行 一行显示销售额 一行显示 sales target 目前 我的报告在报告的每一行旁边都有一个编辑链接 有没有办法从 sales target 行中删除编辑链接 select
  • 无法使用 PRAW 从某些 Reddit 子版块中获取随机帖子

    我正在尝试使用此代码让一个不和谐的机器人从reddit发送图像 只是为了抓取而不是发送 def random post subreddit while True post reddit subreddit subreddit random
  • Android:如何获取自定义View的高度和宽度? [复制]

    这个问题在这里已经有答案了 我该如何使用getMeasuredWidth and getMeasuredHeight 它总是返回 0 这和有什么区别getHeight and getWidth 刚刚找到了获取自定义视图的高度和宽度的解决方案
  • SQLite中保存资源路径

    我需要将图像保存在 SQLite 数据库的资源文件夹中 该数据库是预加载的 复制到数据 路径 因此在运行时不会填充 我尝试将其保存在 SQLite 的文本字段中 R drawable picture1 我的drawable文件夹中有大约30
  • MySQL FULLTEXT 不适用于多个字段

    我有一个标准的 MySQL 全文查询 如下所示 SELECT FROM accounts WHERE MATCH first name username AGAINST stringhere 问题是 它找不到该字段的全文索引first na
  • 通过 jQuery 添加 JSF 标签/组件

    这是我所做的 var a document getElementById panelForm tableId01
  • NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path

    我正在尝试在 NSIS 安装程序中加载并调用 C 库 DLL 的函数 当我尝试加载 DLL 时 发出错误 126 ERROR MOD NOT FOUND 这是我用来测试的最小安装程序脚本 OutFile Main exe ShowInstD