【问题标题】:File.Copy fails when copying a DLL that is not in use复制未使用的 DLL 时 File.Copy 失败
【发布时间】:2011-11-06 00:44:21
【问题描述】:

我已经构建了一个 winforms 应用程序 (C#),它将获取文件路径列表,并将这些文件(来自不同的 VS 解决方案)复制到相同目录结构中的新位置(在用户指定的文件夹中)它们当前存在于本地文件系统中。

我使用 Path 类、Directory 类等,一切都运行良好……除非它到达指向 DLL 的文件路径。

我尝试复制的 DLL 是其他解决方案的一部分,并且该解决方案当前未打开。

我已尝试重新启动计算机以确保即使在解决方案关闭后,Visual Studio 也不会以某种方式挂接到该 DLL。

可以通过常规手动方式(即复制和粘贴快捷方式)复制相关 DLL。

没有在程序中创建批处理文件并在该 DLL 路径上运行 xcopy,我不知道有什么方法可以让它工作。

根据我从谷歌搜索中找到的信息(在这种特殊情况下并不多),File.Copy() 应该可以工作..

任何帮助都会很棒,即使它是指向我可能忽略的重复问题的链接。

谢谢!

-错误信息是:进程无法访问文件[插入文件路径],因为它正在被另一个进程使用(路径肯定也是正确的)

-刚刚下载并尝试使用 Process Explorer 搜索 DLL 名称。我还从命令提示符处运行了类似的 exe,但无济于事。它声称没有任何东西在使用它。这就是为什么我对此完全感到困惑。另外,我刚刚检查了权限,一切看起来都很好(即完全控制,所有者有效权限)

-它不处理打开的文件。它基本上构建了正确的 src 和 dest 路径,并在这些路径上执行 File.Copy()。我将如何处理打开的文件?我确定我可以确定它是否打开,但如果它打开了我该怎么办?

【问题讨论】:

  • 您可以从 Microsoft 下载 Process Explorer 并检查使用它的程序,如果您愿意,也可以关闭句柄。出于某种原因,有人锁定了它,但除了你之外没有人能告诉我们它是什么应用程序。
  • 你能显示你用来复制文件的代码吗?可能是您的方法没有考虑打开的文件。
  • 它是否说明了另一个进程正在使用哪个文件?显然,如果目标文件不存在,这一点是没有意义的。 . .您是否在 File.Copy 之前放置了一个断点并检查了 Process Explorer 以确保没有任何东西已经打开了源或目标?您确定源和目标没有指向同一个文件吗?我知道File.Copy 会复制 DLL 文件,因为我已经使用它了。你的代码一定有问题。
  • Unlocker 也是检测和杀死文件句柄的好工具

标签: c# winforms dll file-io copy


【解决方案1】:

它不是在抱怨您试图复制的文件,而是在抱怨您试图用副本覆盖的文件。很多候选者,例如,病毒扫描程序总是对新的 DLL 感到非常兴奋。或者它被加载到一个进程中,这是尝试实现自己的自动更新程序的典型失败模式。

您可以重命名目标文件以使您的复制成功。

【讨论】:

    【解决方案2】:

    你是用vista还是win7?如果是这样,请检查您的“用户帐户控制设置”。有时这会干扰 .NET 安全选项并阻止原本可以正常工作的文件操作。

    【讨论】:

      【解决方案3】:

      除了 Process Explorer,我还会使用 Microsoft 的 Process Monitor,这样您就可以看到发生故障时发生的情况,并允许您查看是否有其他任何东西正在访问 dll。

      可能的罪魁祸首是

      1. 你正在运行的程序,
      2. 您的防病毒包
      3. 一种病毒。

      如果它抱怨的路径是目标路径,那么可能是路径太长了?

      此外,在使用 Process Explorer 时,请确保您已启用选项以显示所有进程的详细信息,而不仅仅是您自己的。

      【讨论】:

        【解决方案4】:

        我也遇到了这个问题。我尝试将 .DLL 从 FTP 服务器复制到本地目录(替换现有目录),但在我的一生中,我无法让它工作。不断给我一个“拒绝访问代码:5”错误。

        然后我意识到 FTP 服务器上的 .DLL 没有被标记为隐藏,而我试图替换的 .DLL 被标记为隐藏。

        一旦我将本地更改为可见。我没有更多的问题。

        所以我的解决方案是: 确保两个文件都可见。

        希望这对某人有所帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-25
          • 2014-08-08
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多