代码之家  ›  专栏  ›  技术社区  ›  sebagomez

如何删除其他进程使用的文件

  •  0
  • sebagomez  · 技术社区  · 16 年前

    事情是这样的。

    我的WinApp正在运行,对吗?在进程“A”中,它创建一个文件并保持句柄(保持文件打开以便写入,这是必须的)。
    然后它启动另一个msbuild进程,我们称之为“B”。此过程从 System.Diagnostic.Process
    在某个时刻,我的WinApp(A)需要删除以前创建的文件(记住它是由A自己创建的),这时我收到一个IOException,消息是“进程无法访问文件“X”,因为它正被另一个进程使用”。事实上是这样的!。。。如果终止进程“B”,则只有“A”才能成功删除该文件。


    1) 有没有一种方法可以告诉我创建的流程不处理我打开的文件?
    2) 有没有其他方法可以实现我的场景?

    4 回复  |  直到 16 年前
        1
  •  2
  •   Arnout    16 年前

    看起来像 System.Diagnostic.Process.Start CreateProcess bInheritHandles true .

    你可以试着设置 UseShellExecute 忠实于 ProcessStartInfo ,或直接P/Invoke到 CreateProcess .

        2
  •  0
  •   Brian    16 年前

    在进程正在使用句柄时,可以强制关闭文件句柄,但这可能会导致应用程序崩溃。换句话说,做你不想做的事情可能会导致“B”崩溃。也就是说,你所要求的肯定是可能的,因为申请, Process Explorer 发现 哪个应用程序正在使用句柄是一个令人沮丧的练习,更不用说实际关闭句柄了。

        3
  •  0
  •   Bork Blatt    16 年前

    MoveFile 来自系统内部的实用程序。

    此程序将注册表值添加到 HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

        4
  •  0
  •   Codex    16 年前

    当我试图读取一个被完全锁定的文件时,我遇到了类似的问题。

    我试着用以下方法来做:

    FileStream exclusiveWriter = new FileStream(@"C:\Temp\FileLockTest1.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);  
    

    完整的讨论可在以下网址获得:

    File exclusively locked by another process - MSDN Forum disucssion

    希望这有帮助。