我已经提交了另一个使用它的进程。 我想强行关闭文件。所以我将继续填补。
我尝试使用Handle.exe,但它没有找到进程
这里有一些帮助是我的代码:
Process tool = new Process();
tool.StartInfo.FileName = handlPath;
tool.StartInfo.Arguments = _pathDirectory + " /accepteula";
tool.StartInfo.UseShellExecute = false;
tool.StartInfo.RedirectStandardOutput = true;
tool.Start();
tool.WaitForExit();
string outputTool = tool.StandardOutput.ReadToEnd();
string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
foreach (Match match in Regex.Matches(outputTool, matchPattern))
{
Process.GetProcessById(int.Parse(match.Value)).Kill();
}
答案 0 :(得分:1)
我敢肯定,如果某个程序确实对某个文件拥有独占访问权限,那么就有理由这样做。例如,Windows资源管理器在文件处于复制过程时保留它。
很多时候,程序会打开一个文件进行写作,但不会主动写入。例如,当您在MS Word中打开文档时,它将被复制到临时文件,而源文件只是“打开以进行写入”。如果使用标准File.Open
方法,您仍会遇到异常,但可以使用File.Copy
将其复制到临时文件。
或者,您可以显式指定FileShare.ReadWrite
参数并获取对文件的访问权限。在这种情况下,其他程序在访问文件时会遇到问题。
答案 1 :(得分:0)
如果您已经提到了文件名或类型,那么它会更容易,无论如何都要尝试使用cmd。获取进程名称并替换以下代码的ProcessName.exe
。
首先,您必须在顶部添加using System.Diagnostics;
。
Process.Start("cmd.exe", "/c taskkill /F /IM ProcessName.exe");