improve:用户体验分级

This commit is contained in:
2025-07-26 15:00:31 +08:00
parent bf8d988c75
commit c15c75075c
-413
View File
@@ -2326,251 +2326,9 @@ namespace Ink_Canvas.Helpers
return GetUsageDataProtectionSummary();
}
/// <summary>
/// 测试每周重置功能
/// </summary>
public static string TestWeeklyReset()
{
var results = new StringBuilder();
results.AppendLine("每周重置功能测试:");
try
{
lock (fileLock)
{
var stats = LoadUsageStats();
if (stats == null)
{
results.AppendLine("无法加载使用统计数据");
return results.ToString();
}
results.AppendLine($"\n当前状态:");
results.AppendLine($" 本周开始日期: {(stats.WeekStartDate != DateTime.MinValue ? stats.WeekStartDate.ToString("yyyy-MM-dd") : "")}");
results.AppendLine($" 本周启动次数: {stats.WeeklyLaunchCount}");
results.AppendLine($" 本周使用时长: {stats.WeeklyUsageMinutes}分钟");
results.AppendLine($" 上周启动次数: {stats.LastWeekLaunchCount}");
results.AppendLine($" 上周使用时长: {stats.LastWeekUsageMinutes}分钟");
// 模拟跨周情况
results.AppendLine($"\n模拟跨周测试:");
var originalWeekStart = stats.WeekStartDate;
var originalWeeklyLaunches = stats.WeeklyLaunchCount;
var originalWeeklyMinutes = stats.WeeklyUsageMinutes;
// 手动设置为上周
stats.WeekStartDate = DateTime.Now.AddDays(-7).Date;
stats.WeeklyLaunchCount = 5;
stats.WeeklyUsageMinutes = 120;
results.AppendLine($" 设置为上周数据 - 启动: {stats.WeeklyLaunchCount}次, 时长: {stats.WeeklyUsageMinutes}分钟");
// 触发重置检查
stats.CheckAndResetWeeklyStats();
results.AppendLine($"\n重置后状态:");
results.AppendLine($" 本周开始日期: {stats.WeekStartDate:yyyy-MM-dd}");
results.AppendLine($" 本周启动次数: {stats.WeeklyLaunchCount}");
results.AppendLine($" 本周使用时长: {stats.WeeklyUsageMinutes}分钟");
results.AppendLine($" 上周启动次数: {stats.LastWeekLaunchCount}");
results.AppendLine($" 上周使用时长: {stats.LastWeekUsageMinutes}分钟");
// 验证重置是否正确
var currentWeekStart = stats.GetWeekStartDate(DateTime.Now);
if (stats.WeekStartDate == currentWeekStart &&
stats.WeeklyLaunchCount == 0 &&
stats.WeeklyUsageMinutes == 0 &&
stats.LastWeekLaunchCount == 5 &&
stats.LastWeekUsageMinutes == 120)
{
results.AppendLine($"\n✓ 每周重置功能工作正常");
}
else
{
results.AppendLine($"\n✗ 每周重置功能异常");
}
// 恢复原始数据
stats.WeekStartDate = originalWeekStart;
stats.WeeklyLaunchCount = originalWeeklyLaunches;
stats.WeeklyUsageMinutes = originalWeeklyMinutes;
stats.UpdateDataHash();
SaveUsageStats(stats);
results.AppendLine($"\n已恢复原始数据");
return results.ToString();
}
}
catch (Exception ex)
{
results.AppendLine($"\n测试失败: {ex.Message}");
LogHelper.WriteLogToFile($"DeviceIdentifier | 每周重置测试失败: {ex.Message}", LogHelper.LogType.Error);
return results.ToString();
}
}
/// <summary>
/// 手动触发每周重置(用于测试)
/// </summary>
public static string ManualWeeklyReset()
{
try
{
lock (fileLock)
{
var stats = LoadUsageStats();
if (stats == null)
{
return "无法加载使用统计数据";
}
var beforeReset = $"重置前 - 本周启动: {stats.WeeklyLaunchCount}次, 本周时长: {stats.WeeklyUsageMinutes}分钟";
// 强制重置
stats.LastWeekLaunchCount = stats.WeeklyLaunchCount;
stats.LastWeekUsageMinutes = stats.WeeklyUsageMinutes;
stats.WeeklyLaunchCount = 0;
stats.WeeklyUsageMinutes = 0;
stats.WeekStartDate = stats.GetWeekStartDate(DateTime.Now);
stats.UpdateDataHash();
SaveUsageStats(stats);
var afterReset = $"重置后 - 本周启动: {stats.WeeklyLaunchCount}次, 本周时长: {stats.WeeklyUsageMinutes}分钟, 上周启动: {stats.LastWeekLaunchCount}次, 上周时长: {stats.LastWeekUsageMinutes}分钟";
LogHelper.WriteLogToFile($"DeviceIdentifier | 手动每周重置完成");
return $"每周重置完成:\n{beforeReset}\n{afterReset}";
}
}
catch (Exception ex)
{
var errorMsg = $"手动每周重置失败: {ex.Message}";
LogHelper.WriteLogToFile($"DeviceIdentifier | {errorMsg}", LogHelper.LogType.Error);
return errorMsg;
}
}
/// <summary>
/// 测试注册表写入操作
/// </summary>
public static string TestRegistryOperations()
{
var results = new StringBuilder();
results.AppendLine("注册表操作测试结果:");
try
{
// 测试设备ID写入
var testDeviceId = "TEST" + DateTime.Now.ToString("yyyyMMddHHmmss");
results.AppendLine($"测试设备ID: {testDeviceId}");
try
{
using (var key = Registry.CurrentUser.CreateSubKey(@"Software\ICC\DeviceInfo"))
{
if (key != null)
{
key.SetValue("TestDeviceId", testDeviceId);
key.SetValue("TestTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
results.AppendLine("✓ 主注册表位置写入成功");
}
else
{
results.AppendLine("✗ 主注册表位置创建失败");
}
}
}
catch (Exception ex)
{
results.AppendLine($"✗ 主注册表位置写入失败: {ex.Message}");
}
// 测试多个注册表位置写入
var registryPaths = new[]
{
@"Software\Microsoft\Windows\CurrentVersion\ICC",
@"Software\Classes\.icc\UsageData",
@"Software\ICC\Config\Usage"
};
foreach (var path in registryPaths)
{
try
{
using (var key = Registry.CurrentUser.CreateSubKey(path))
{
if (key != null)
{
key.SetValue("TestData", "TestValue");
key.SetValue("TestTime", DateTime.Now.ToBinary());
results.AppendLine($"✓ 注册表位置写入成功: {path}");
}
else
{
results.AppendLine($"✗ 注册表位置创建失败: {path}");
}
}
}
catch (Exception ex)
{
results.AppendLine($"✗ 注册表位置写入失败 ({path}): {ex.Message}");
}
}
// 测试读取操作
results.AppendLine("\n注册表读取测试:");
try
{
using (var key = Registry.CurrentUser.OpenSubKey(@"Software\ICC\DeviceInfo"))
{
if (key != null)
{
var readValue = key.GetValue("TestDeviceId") as string;
if (readValue == testDeviceId)
{
results.AppendLine("✓ 注册表读取验证成功");
}
else
{
results.AppendLine($"✗ 注册表读取验证失败: 期望 {testDeviceId}, 实际 {readValue}");
}
}
else
{
results.AppendLine("✗ 注册表读取失败: 键不存在");
}
}
}
catch (Exception ex)
{
results.AppendLine($"✗ 注册表读取失败: {ex.Message}");
}
// 测试实际数据保存
results.AppendLine("\n实际数据保存测试:");
var stats = LoadUsageStats();
if (stats != null)
{
try
{
SaveUsageStatsToRegistry(stats);
SaveUsageStatsToMultipleRegistryLocations(stats);
results.AppendLine("✓ 实际使用统计数据保存到注册表成功");
}
catch (Exception ex)
{
results.AppendLine($"✗ 实际使用统计数据保存失败: {ex.Message}");
}
}
return results.ToString();
}
catch (Exception ex)
{
return $"注册表操作测试失败: {ex.Message}";
}
}
/// <summary>
/// 强制执行一次完整的数据保存操作(包括注册表)
@@ -2726,179 +2484,8 @@ namespace Ink_Canvas.Helpers
}
}
/// <summary>
/// 测试反篡改恢复机制
/// </summary>
public static string TestAntiTamperingRecovery()
{
var results = new StringBuilder();
results.AppendLine("反篡改恢复机制测试结果:");
try
{
lock (fileLock)
{
// 1. 收集所有数据源
results.AppendLine("\n1. 收集数据源:");
var allSources = CollectAllUsageDataSources();
results.AppendLine($" 找到 {allSources.Count} 个数据源");
foreach (var source in allSources)
{
results.AppendLine($" - {source.Source}: 完整性={source.IsIntegrityValid}, 信任度={source.TrustScore}, 修改时间={source.LastModified:yyyy-MM-dd HH:mm:ss}");
results.AppendLine($" 启动次数={source.Stats.LaunchCount}, 使用时长={source.Stats.TotalUsageMinutes}分钟");
}
// 2. 选择最可信数据
results.AppendLine("\n2. 选择最可信数据:");
var bestData = SelectMostTrustedData(allSources);
if (bestData != null)
{
results.AppendLine($" 选择: {bestData.Source}");
results.AppendLine($" 完整性: {bestData.IsIntegrityValid}");
results.AppendLine($" 信任度: {bestData.TrustScore}");
results.AppendLine($" 数据: 启动{bestData.Stats.LaunchCount}次, 使用{bestData.Stats.TotalUsageMinutes}分钟");
}
else
{
results.AppendLine(" 未找到可信数据");
}
// 3. 测试部分恢复
results.AppendLine("\n3. 部分数据恢复测试:");
var partialRecovery = AttemptPartialDataRecovery(allSources);
if (partialRecovery != null)
{
results.AppendLine($" 恢复成功: 启动{partialRecovery.LaunchCount}次, 使用{partialRecovery.TotalUsageMinutes}分钟");
results.AppendLine($" 完整性验证: {partialRecovery.VerifyDataIntegrity()}");
}
else
{
results.AppendLine(" 部分恢复失败");
}
// 4. 测试实际加载
results.AppendLine("\n4. 实际加载测试:");
var loadedStats = LoadUsageStats();
if (loadedStats != null)
{
results.AppendLine($" 加载成功: 启动{loadedStats.LaunchCount}次, 使用{loadedStats.TotalUsageMinutes}分钟");
results.AppendLine($" 完整性验证: {loadedStats.VerifyDataIntegrity()}");
results.AppendLine($" 使用频率: {loadedStats.UsageFrequency}");
results.AppendLine($" 更新优先级: {loadedStats.UpdatePriority}");
}
else
{
results.AppendLine(" 加载失败");
}
return results.ToString();
}
}
catch (Exception ex)
{
results.AppendLine($"\n测试失败: {ex.Message}");
LogHelper.WriteLogToFile($"DeviceIdentifier | 反篡改恢复测试失败: {ex.Message}", LogHelper.LogType.Error);
return results.ToString();
}
}
/// <summary>
/// 模拟数据篡改并测试恢复
/// </summary>
public static string SimulateDataTamperingAndRecover()
{
var results = new StringBuilder();
results.AppendLine("数据篡改模拟和恢复测试:");
try
{
lock (fileLock)
{
// 1. 保存当前正常数据
results.AppendLine("\n1. 保存当前正常数据作为备份...");
var originalStats = LoadUsageStats();
if (originalStats == null)
{
results.AppendLine(" 无法获取原始数据,创建测试数据");
originalStats = new UsageStats
{
DeviceId = DeviceId,
LaunchCount = 50,
TotalUsageMinutes = 1200,
LastLaunchTime = DateTime.Now.AddDays(-1),
UpdatePriority = UpdatePriority.Medium,
UsageFrequency = UsageFrequency.Medium
};
originalStats.UpdateDataHash();
}
SaveUsageStatsToAllLocations(originalStats);
results.AppendLine($" 原始数据: 启动{originalStats.LaunchCount}次, 使用{originalStats.TotalUsageMinutes}分钟");
// 2. 模拟篡改主文件
results.AppendLine("\n2. 模拟篡改主文件...");
try
{
var tamperedStats = new UsageStats
{
DeviceId = DeviceId,
LaunchCount = 1, // 篡改为很小的值
TotalUsageMinutes = 5,
LastLaunchTime = DateTime.Now,
UpdatePriority = UpdatePriority.Low,
UsageFrequency = UsageFrequency.Low,
DataHash = "TAMPERED_HASH", // 错误的哈希值
LastModified = DateTime.Now
};
var tamperedJson = JsonConvert.SerializeObject(tamperedStats, Formatting.Indented);
File.WriteAllText(UsageStatsFilePath, tamperedJson);
results.AppendLine(" 主文件已被篡改");
}
catch (Exception ex)
{
results.AppendLine($" 篡改主文件失败: {ex.Message}");
}
// 3. 测试恢复机制
results.AppendLine("\n3. 测试智能恢复机制...");
var recoveredStats = LoadUsageStats();
if (recoveredStats != null)
{
results.AppendLine($" 恢复成功: 启动{recoveredStats.LaunchCount}次, 使用{recoveredStats.TotalUsageMinutes}分钟");
results.AppendLine($" 完整性验证: {recoveredStats.VerifyDataIntegrity()}");
// 检查是否恢复了正确的数据
if (Math.Abs(recoveredStats.LaunchCount - originalStats.LaunchCount) <= 5 &&
Math.Abs(recoveredStats.TotalUsageMinutes - originalStats.TotalUsageMinutes) <= 100)
{
results.AppendLine(" ✓ 数据恢复正确,反篡改机制工作正常");
}
else
{
results.AppendLine(" ✗ 数据恢复不完全正确,但避免了使用篡改数据");
}
}
else
{
results.AppendLine(" ✗ 恢复失败");
}
// 4. 恢复正常状态
results.AppendLine("\n4. 恢复正常状态...");
SaveUsageStatsToAllLocations(originalStats);
results.AppendLine(" 系统已恢复到正常状态");
return results.ToString();
}
}
catch (Exception ex)
{
results.AppendLine($"\n模拟测试失败: {ex.Message}");
LogHelper.WriteLogToFile($"DeviceIdentifier | 数据篡改模拟测试失败: {ex.Message}", LogHelper.LogType.Error);
return results.ToString();
}
}
}
}