去除杀死进程逻辑
This commit is contained in:
60
Form1.cs
60
Form1.cs
@@ -539,10 +539,6 @@ namespace CheckDownload
|
||||
}
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool GetProcessHandleCount(IntPtr hProcess, out uint pdwHandleCount);
|
||||
|
||||
private void VerifyAndSaveAllFiles()
|
||||
{
|
||||
UpdateStatus("正在校验文件...");
|
||||
@@ -632,61 +628,10 @@ namespace CheckDownload
|
||||
|
||||
try
|
||||
{
|
||||
// 尝试找出占用文件的进程
|
||||
var processes = Process.GetProcesses();
|
||||
foreach (var process in processes)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 跳过当前进程
|
||||
if (process.Id == Process.GetCurrentProcess().Id)
|
||||
continue;
|
||||
|
||||
// 检查进程是否可能占用了文件
|
||||
string processName = process.ProcessName.ToLower();
|
||||
if (processName.Contains("explorer") ||
|
||||
processName.Contains("chrome") ||
|
||||
processName.Contains("edge") ||
|
||||
processName.Contains("firefox") ||
|
||||
processName.Contains("ieplore") ||
|
||||
processName.Contains("winword") ||
|
||||
processName.Contains("excel") ||
|
||||
processName.Contains("powerpnt") ||
|
||||
processName.Contains("acrobat") ||
|
||||
processName.Contains("reader"))
|
||||
{
|
||||
// 跳过常见的系统进程
|
||||
continue;
|
||||
}
|
||||
|
||||
// 尝试获取进程句柄数量,如果句柄数量较多,可能正在使用文件
|
||||
uint handleCount = 0;
|
||||
if (GetProcessHandleCount(process.Handle, out handleCount) && handleCount > 0)
|
||||
{
|
||||
// 尝试关闭进程
|
||||
UpdateStatus($"尝试关闭可能占用文件的进程: {process.ProcessName}");
|
||||
process.CloseMainWindow();
|
||||
|
||||
// 等待进程关闭
|
||||
if (!process.WaitForExit(1000))
|
||||
{
|
||||
// 如果进程没有响应,尝试强制结束
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略处理单个进程时的错误
|
||||
}
|
||||
finally
|
||||
{
|
||||
process.Dispose();
|
||||
}
|
||||
}
|
||||
// 等待一段时间,让文件可能被释放
|
||||
Thread.Sleep(1000);
|
||||
|
||||
// 再次尝试移动文件
|
||||
Thread.Sleep(500); // 等待一段时间确保文件已释放
|
||||
File.Move(sourcePath, targetPath);
|
||||
UpdateStatus($"文件解锁成功并已更新");
|
||||
return true;
|
||||
@@ -694,6 +639,7 @@ namespace CheckDownload
|
||||
catch
|
||||
{
|
||||
// 如果仍然无法移动,返回失败
|
||||
UpdateStatus($"文件仍被占用,无法移动");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user