复制未使用的DLL时,File.Copy失败

时间:2011-11-06 00:44:21

标签: c# winforms dll file-io copy

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

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

我试图复制的DLL是另一个解决方案的一部分,该解决方案目前尚未打开。

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

可以通过常规手动方式(即复制和粘贴快捷方式)复制有问题的DLL。

如果没有在程序中创建批处理文件,并在该DLL路径上运行xcopy,我不知道如何使其工作。

根据我从谷歌搜索中找到的内容(这种情况并不多),File.Copy()应该可以正常工作..

任何帮助都会很精彩,即使它是我可能已经看过的重复问题的链接。

谢谢!

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

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

- 它不处理打开的文件。它基本上构建了正确的src和dest路径,并对它们进行了File.Copy()。我将如何处理打开的文件?我确定我能弄清楚它是否是开放的,但是我怎么做才开放?

4 个答案:

答案 0 :(得分:1)

它并没有抱怨你要复制的文件,它抱怨你试图用副本覆盖的文件。例如,许多候选者,病毒扫描程序总是对新的DLL感到非常兴奋。或者它被加载到进程中,这是尝试实现自己的自动更新程序的典型故障模式。

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

答案 1 :(得分:0)

你是vista还是win7?如果是这样,请检查“用户帐户控制设置”。有时,这会干扰.NET安全选项,并阻止文件操作,否则将起作用。

答案 2 :(得分:0)

除了Process Explorer之外,我还会使用Microsoft的Process Monitor,这样您就可以看到失败时发生的事情,并且可以查看是否还有其他任何内容正在访问dll。

可能的罪魁祸首

  1. 您正在运行的程序
  2. 您的防病毒软件包
  3. 病毒。
  4. 如果它抱怨的路径是目标路径,那么路径可能太长了吗?

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

答案 3 :(得分:0)

我也碰到了这个问题。我尝试将.DLL从FTP服务器复制到本地目录(替换现有目录),但由于我的一生,我无法使其正常工作。一直给我一个“访问被拒绝的代码:5”错误。

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

一旦我将本地的更改为也可见。我没有其他问题了。

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

希望这对某人有帮助