【问题标题】:DLL locked - Visual Studio 2010 C++DLL 锁定 - 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),但我会保持开放状态,看看是否有人发现了与该主题相关的任何新内容。

【问题讨论】:

  • 只是出于好奇,当您尝试使用管理员帐户时会发生什么? (假设你能得到一个。)
  • 我不确定。不幸的是,我买不到。

标签: c++ windows git visual-studio-2010 dll


【解决方案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 是罪魁祸首。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多