DLL 锁定 - Visual Studio 2010 C++
Posted
技术标签:
【中文标题】DLL 锁定 - Visual Studio 2010 C++【英文标题】:DLL locked - Visual Studio 2010 C++ 【发布时间】:2015-08-17 02:48:30 【问题描述】:我目前登录到一台机器上,我当前的问题涉及一个自定义构建步骤,该步骤无法将 .dll 复制到 Bin 目录,因为 Windows 说它无法访问该文件,因为它当前正被另一个进程使用。
我能够在其他几个项目中重现这一点。事件的顺序是我成功构建了一个版本,进行了一些测试,在执行 git bisect 时检查了另一个 SHA,并尝试从该 SHA 而不执行 git clean -xfd 构建一个版本(故意,因为我试图缓存尽可能多的可重用数据)。奇怪的是,我尝试使用 Process Explorer (procexp) 和 tasklist /m <locked_dll.dll>
来搜索持有该 dll 的任何内容,但找不到任何持有该 dll 的内容。我使用的是非管理员帐户,我不确定这是否会导致 Windows 对我隐藏某些进程。重新启动机器会有所帮助,但这不是一个可接受的解决方案,因为我正在尝试使事情自动化。我可以删除 .dll,当我尝试在 VS 中构建项目时,它会抱怨在尝试将其复制到 Bin 文件夹时仍然无法访问该 dll。有任何想法吗?我会继续研究这个问题,但到目前为止,我有点难过。
编辑: 这似乎是一个重复的问题 (Error: Cannot access file bin/Debug/... because it is being used by another process),但我会保持开放状态,看看是否有人发现了与该主题相关的任何新内容。
【问题讨论】:
只是出于好奇,当您尝试使用管理员帐户时会发生什么? (假设你能得到一个。) 我不确定。不幸的是,我买不到。 【参考方案1】:我在 VS 2010 中看到了这个问题,其中包含一个包含多个项目的大型 .Net 解决方案。到目前为止,我所看到的每个案例都与一个项目有关,该项目具有另一个项目也使用的依赖 DLL,并且另一个项目也使用第一个项目作为参考,并且还使用恰好是不同版本的相同依赖 DLL第一个项目。
换一种说法:
项目 A 依赖于 DLL A 的 v1
项目 B 依赖于项目 A 和 DLL A 的 v2
项目 A 和 B 都在同一个解决方案中
解决办法是使用同版本的DLL A。我在升级到新版本的SQLite时通常会遇到这个问题,我忘记更新我所有项目中的依赖关系。
【讨论】:
【参考方案2】:在与几位同事交谈后,我找到了解决问题的方法。 procexp 和 tasklist 没有看到哪个进程正在锁定 dll,因为没有进程在 特定机器上锁定 dll。
我有一个硬件配置,其中机器 A(主机 PC)使用网络交换机连接到机器 B(充当从机器 A 检索指令的客户端)。机器 B 运行链接到相同 dll 的相同二进制文件。因此,显然,在机器 A 上运行 procexp 或 tasklist 不会看到任何锁定 dll 的东西,因为机器 B 是罪魁祸首。
【讨论】:
以上是关于DLL 锁定 - Visual Studio 2010 C++的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 2017 构建 open62541 DLL
将 Visual Studio 扩展 (VSIX/DLL) 整合到一个 exe 中
在 Visual Studio 2012 中,如何将资源文件 (.rc) 与 c ++ dll 链接