去除杀死进程逻辑

This commit is contained in:
zzz
2025-06-18 21:49:26 +08:00
parent 286589cddb
commit a0e1909a4b

View File

@@ -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;
}
}