修复下载bug

This commit is contained in:
zsyg
2025-06-18 10:46:59 +08:00
committed by GitHub
parent c0d366acdc
commit 5029b5b2b8

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@@ -9,6 +10,16 @@ namespace AppStore
{ {
public class DownloadManager public class DownloadManager
{ {
[DllImport("shell32.dll")]
private static extern int SHGetKnownFolderPath(
[MarshalAs(UnmanagedType.LPStruct)] Guid rfid,
uint dwFlags,
IntPtr hToken,
out IntPtr ppszPath);
private static DownloadManager instance = null!; private static DownloadManager instance = null!;
public static DownloadManager Instance => instance ??= new DownloadManager(); public static DownloadManager Instance => instance ??= new DownloadManager();
@@ -77,11 +88,36 @@ namespace AppStore
try try
{ {
// 设置下载目录为用户文件夹中的Downloads // 设置下载目录为用户文件夹中的Downloads
var downloadsDir = Path.Combine( // 获取系统下载文件夹路径
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), // 获取系统下载文件夹路径
"Downloads"); string downloadsDir;
IntPtr pathPtr = IntPtr.Zero;
try
{
// 使用SHGetKnownFolderPath API获取下载文件夹
var downloadsFolderGuid = new Guid("374DE290-123F-4565-9164-39C4925E467B");
if (SHGetKnownFolderPath(downloadsFolderGuid, 0, IntPtr.Zero, out pathPtr) != 0)
{
throw new Exception("无法获取下载文件夹路径");
}
downloadsDir = Marshal.PtrToStringUni(pathPtr);
}
catch
{
throw new Exception("无法确定下载文件夹位置,请手动指定下载路径");
}
finally
{
if (pathPtr != IntPtr.Zero)
{
Marshal.FreeCoTaskMem(pathPtr);
}
}
Directory.CreateDirectory(downloadsDir); Directory.CreateDirectory(downloadsDir);
// 构建aria2c路径 // 构建aria2c路径
var aria2cPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "resource", "aria2c.exe"); var aria2cPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "resource", "aria2c.exe");
@@ -95,7 +131,7 @@ namespace AppStore
var uri = new Uri(url); var uri = new Uri(url);
var originalFileName = Path.GetFileName(uri.LocalPath); var originalFileName = Path.GetFileName(uri.LocalPath);
var arguments = $"--out=\"{originalFileName}\" --dir=\"{downloadsDir}\" --split=16 --max-connection-per-server=16 {url}"; var arguments = $"--out=\"{originalFileName}\" --dir=\"{downloadsDir}\" --split=16 --max-connection-per-server=16 {url}";
Console.WriteLine($"下载目录: {downloadsDir}");
currentProcess = new Process currentProcess = new Process
{ {
@@ -134,7 +170,7 @@ namespace AppStore
{ {
if (!string.IsNullOrEmpty(e.Data)) if (!string.IsNullOrEmpty(e.Data))
{ {
Console.WriteLine($"输出: {e.Data}");
// 重置超时计时器 // 重置超时计时器
progressTimer.Stop(); progressTimer.Stop();
@@ -147,7 +183,7 @@ namespace AppStore
.Split('(')[0].Trim(); .Split('(')[0].Trim();
if (long.TryParse(sizeStr, out totalSize)) if (long.TryParse(sizeStr, out totalSize))
{ {
Console.WriteLine($"检测到文件总大小: {totalSize} bytes");
} }
} }
@@ -175,7 +211,7 @@ namespace AppStore
{ {
if (!string.IsNullOrEmpty(e.Data)) if (!string.IsNullOrEmpty(e.Data))
{ {
Console.WriteLine($"错误: {e.Data}");
downloadItem.Status = $"错误: {e.Data}"; downloadItem.Status = $"错误: {e.Data}";
DownloadProgressChanged?.Invoke(downloadItem); DownloadProgressChanged?.Invoke(downloadItem);
} }
@@ -202,11 +238,11 @@ namespace AppStore
if (File.Exists(downloadPath)) if (File.Exists(downloadPath))
{ {
Console.WriteLine($"文件下载完成: {downloadPath}");
} }
else else
{ {
Console.WriteLine("警告: 下载完成但文件不存在");
} }
// 触发界面更新 // 触发界面更新
@@ -222,7 +258,7 @@ namespace AppStore
var mainForm = Application.OpenForms[0]; var mainForm = Application.OpenForms[0];
mainForm.Invoke((MethodInvoker)delegate { mainForm.Invoke((MethodInvoker)delegate {
MessageBox.Show(mainForm, MessageBox.Show(mainForm,
$"文件 {downloadItem.FileName} 已成功下载到:\n{Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads", downloadItem.FileName)}", $"文件 {downloadItem.FileName} 已成功下载到:\n{Path.Combine(downloadsDir, downloadItem.FileName)}",
"下载完成", "下载完成",
MessageBoxButtons.OK, MessageBoxButtons.OK,
MessageBoxIcon.Information); MessageBoxIcon.Information);
@@ -230,12 +266,11 @@ namespace AppStore
} }
else else
{ {
Console.WriteLine("下载完成提示:无法找到主窗体");
} }
} }
catch (Exception ex) catch
{ {
Console.WriteLine($"显示下载完成提示时出错:{ex}");
} }
} }
else else
@@ -263,8 +298,7 @@ namespace AppStore
downloadItem.UpdateDisplay(); downloadItem.UpdateDisplay();
}; };
Console.WriteLine($"启动aria2c: {aria2cPath}");
Console.WriteLine($"参数: {arguments}");
if (!currentProcess.Start()) if (!currentProcess.Start())
{ {
@@ -278,8 +312,8 @@ namespace AppStore
catch (Exception ex) catch (Exception ex)
{ {
downloadItem.Status = $"下载错误: {ex.Message}"; downloadItem.Status = $"下载错误: {ex.Message}";
Console.WriteLine($"下载错误: {ex}");
DownloadCompleted?.Invoke(downloadItem); DownloadCompleted?.Invoke(downloadItem);
} }
} }
@@ -304,7 +338,6 @@ namespace AppStore
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"取消下载时出错: {ex}");
item.Status = $"取消失败: {ex.Message}"; item.Status = $"取消失败: {ex.Message}";
DownloadProgressChanged?.Invoke(item); DownloadProgressChanged?.Invoke(item);
} }