From 3e96e51efdc96b0fad1fe62765093fb4832f0fc9 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 1 Oct 2025 22:06:23 +0800
Subject: [PATCH] =?UTF-8?q?delete:office=E6=B3=A8=E5=86=8C=E8=A1=A8?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/App.xaml.cs | 564 -----------------------------------------
1 file changed, 564 deletions(-)
diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs
index a57685b0..15455978 100644
--- a/Ink Canvas/App.xaml.cs
+++ b/Ink Canvas/App.xaml.cs
@@ -914,125 +914,6 @@ namespace Ink_Canvas
LogHelper.WriteLogToFile($"启动IPC监听器时出错: {ex.Message}", LogHelper.LogType.Error);
}
- // Office注册表检测
- try
- {
- LogHelper.WriteLogToFile("开始Office注册表检测");
-
- // 检查Office安装
- if (!IsOfficeInstalled())
- {
- LogHelper.WriteLogToFile("未检测到Office安装", LogHelper.LogType.Warning);
- return;
- }
-
- // 尝试获取所有可能的Office版本路径
- var officeVersions = GetOfficeVersions();
- if (officeVersions.Count == 0)
- {
- LogHelper.WriteLogToFile("未找到任何Office版本", LogHelper.LogType.Warning);
- return;
- }
-
- foreach (var version in officeVersions)
- {
- string regPath = $"Software\\Microsoft\\Office\\{version}\\Common\\Security";
- LogHelper.WriteLogToFile($"正在处理Office版本 {version}, 注册表路径: {regPath}");
-
- try
- {
- using (RegistryKey baseKey = Registry.CurrentUser.OpenSubKey(regPath))
- {
- if (baseKey == null)
- {
- LogHelper.WriteLogToFile($"注册表路径不存在: {regPath}", LogHelper.LogType.Warning);
- // 尝试创建路径
- try
- {
- using (RegistryKey createKey = Registry.CurrentUser.CreateSubKey(regPath, true))
- {
- if (createKey != null)
- {
- createKey.SetValue("DisableProtectedView", 1, RegistryValueKind.DWord);
- LogHelper.WriteLogToFile($"创建并设置注册表路径: {regPath}");
- }
- }
- }
- catch (Exception createEx)
- {
- LogHelper.WriteLogToFile($"创建注册表路径失败: {createEx.Message}", LogHelper.LogType.Error);
- }
- continue;
- }
-
- // 备份路径更改为软件根目录下的saves/RegistryBackups文件夹
- string backupPath = Path.Combine(RootPath, "Saves", "RegistryBackups");
- LogHelper.WriteLogToFile($"备份路径: {backupPath}");
-
- if (!Directory.Exists(backupPath))
- {
- Directory.CreateDirectory(backupPath);
- LogHelper.WriteLogToFile($"创建备份目录: {backupPath}");
- }
-
- string backupFile = Path.Combine(backupPath, $"SecurityBackup_{version}_{DateTime.Now:yyyyMMddHHmmss}.reg");
- LogHelper.WriteLogToFile($"创建备份文件: {backupFile}");
-
- // 使用UTF8编码写入注册表文件
- using (StreamWriter sw = new StreamWriter(backupFile, false, Encoding.UTF8))
- {
- sw.WriteLine("Windows Registry Editor Version 5.00\n");
- sw.WriteLine();
- sw.WriteLine($"[{Registry.CurrentUser.Name}\\{regPath}]");
-
- foreach (string valueName in baseKey.GetValueNames())
- {
- object value = baseKey.GetValue(valueName);
- sw.WriteLine($"\"{valueName}\"=dword:{((int)value):x8}");
- LogHelper.WriteLogToFile($"备份注册表值: {valueName} = {value}");
- }
- }
-
- using (RegistryKey key = Registry.CurrentUser.CreateSubKey(regPath, true))
- {
- // 仅在值不存在或不等于1时更新
- object currentValue = key.GetValue("DisableProtectedView");
- if (currentValue == null || (int)currentValue != 1)
- {
- key.SetValue("DisableProtectedView", 1, RegistryValueKind.DWord);
- LogHelper.WriteLogToFile($"Office {version} 注册表值已设置: DisableProtectedView = 1");
- }
- else
- {
- LogHelper.WriteLogToFile($"Office {version} 注册表值已存在且无需更改: DisableProtectedView = 1");
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"处理Office版本 {version} 时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- // 处理Office 365的特殊路径
- TryModifyOffice365Registry();
- }
- catch (SecurityException secEx)
- {
- LogHelper.WriteLogToFile($"安全异常: {secEx.Message}", LogHelper.LogType.Error);
- ShowPermissionError();
- }
- catch (UnauthorizedAccessException authEx)
- {
- LogHelper.WriteLogToFile($"访问被拒绝: {authEx.Message}", LogHelper.LogType.Error);
- ShowPermissionError();
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"未知错误: {ex.GetType().FullName} - {ex.Message}", LogHelper.LogType.Error);
- LogHelper.WriteLogToFile(ex.StackTrace);
- }
}
private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
@@ -1198,450 +1079,5 @@ namespace Ink_Canvas
catch { }
}
}
-
- ///
- /// 检查Office是否安装
- ///
- private bool IsOfficeInstalled()
- {
- try
- {
- // 检查多个可能的注册表路径
- // 1. 检查传统的Office版本
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office"))
- {
- if (key != null && key.GetSubKeyNames().Any(name => name.Contains(".0")))
- {
- LogHelper.WriteLogToFile("检测到传统Office安装");
- return true;
- }
- }
-
- // 2. 检查64位注册表中的Office
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Microsoft\\Office"))
- {
- if (key != null && key.GetSubKeyNames().Any(name => name.Contains(".0")))
- {
- LogHelper.WriteLogToFile("检测到64位注册表中的Office安装");
- return true;
- }
- }
-
- // 3. 检查Office 365/Click-to-Run安装
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\ClickToRun"))
- {
- if (key != null)
- {
- LogHelper.WriteLogToFile("检测到Office 365 Click-to-Run");
- return true;
- }
- }
-
- // 4. 检查Office 365部署配置
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\15.0\\ClickToRun"))
- {
- if (key != null)
- {
- LogHelper.WriteLogToFile("检测到Office 365 (15.0)");
- return true;
- }
- }
-
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\16.0\\ClickToRun"))
- {
- if (key != null)
- {
- LogHelper.WriteLogToFile("检测到Office 365 (16.0)");
- return true;
- }
- }
-
- // 5. 检查Office 365零售订阅信息
- using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\ClickToRun\\Configuration"))
- {
- if (key != null)
- {
- LogHelper.WriteLogToFile("检测到Office 365配置");
- return true;
- }
- }
-
- LogHelper.WriteLogToFile("未检测到任何Office安装", LogHelper.LogType.Warning);
- return false;
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"检查Office安装时出错: {ex.Message}", LogHelper.LogType.Error);
- return false;
- }
- }
-
- ///
- /// 显示权限不足的错误提示
- ///
- private void ShowPermissionError()
- {
- const string message = "需要管理员权限才能完成此操作\n请以管理员身份重新启动应用程序";
- LogHelper.WriteLogToFile(message, LogHelper.LogType.Error);
- MessageBox.Show(message, "权限错误", MessageBoxButton.OK, MessageBoxImage.Error);
- }
-
- ///
- /// 获取所有已安装的Office版本
- ///
- private List GetOfficeVersions()
- {
- var versions = new List();
- try
- {
- // 检查HKLM
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office"))
- {
- if (key != null)
- {
- foreach (var subKeyName in key.GetSubKeyNames())
- {
- if (subKeyName.Contains(".0"))
- {
- versions.Add(subKeyName);
- LogHelper.WriteLogToFile($"在HKLM中找到Office版本: {subKeyName}");
- }
- }
- }
- }
-
- // 检查HKCU
- using (var key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Office"))
- {
- if (key != null)
- {
- foreach (var subKeyName in key.GetSubKeyNames())
- {
- if (subKeyName.Contains(".0") && !versions.Contains(subKeyName))
- {
- versions.Add(subKeyName);
- LogHelper.WriteLogToFile($"在HKCU中找到Office版本: {subKeyName}");
- }
- }
- }
- }
-
- // 检查64位注册表
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Microsoft\\Office"))
- {
- if (key != null)
- {
- foreach (var subKeyName in key.GetSubKeyNames())
- {
- if (subKeyName.Contains(".0") && !versions.Contains(subKeyName))
- {
- versions.Add(subKeyName);
- LogHelper.WriteLogToFile($"在64位注册表中找到Office版本: {subKeyName}");
- }
- }
- }
- }
-
- // 检查Office 365的特殊路径
- CheckOffice365Versions(versions);
-
- // 如果没有找到任何版本,添加默认的Office 365版本号
- if (versions.Count == 0 && IsOffice365Installed())
- {
- versions.Add("16.0");
- LogHelper.WriteLogToFile("未找到具体版本,添加默认Office 365版本: 16.0");
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"获取Office版本时出错: {ex.Message}", LogHelper.LogType.Error);
- }
-
- // 按版本号排序
- versions.Sort((a, b) =>
- {
- try
- {
- double va = double.Parse(a.Replace(".0", ""));
- double vb = double.Parse(b.Replace(".0", ""));
- return vb.CompareTo(va); // 降序排列,最新版本在前
- }
- catch
- {
- return 0;
- }
- });
-
- return versions;
- }
-
- ///
- /// 检测Office 365是否已安装
- ///
- private bool IsOffice365Installed()
- {
- try
- {
- // 检查多个Office 365特定路径
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\ClickToRun"))
- {
- if (key != null)
- return true;
- }
-
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\15.0\\ClickToRun"))
- {
- if (key != null)
- return true;
- }
-
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\16.0\\ClickToRun"))
- {
- if (key != null)
- return true;
- }
-
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\ClickToRun\\Configuration"))
- {
- if (key != null)
- return true;
- }
-
- return false;
- }
- catch
- {
- return false;
- }
- }
-
- ///
- /// 检查Office 365特有的版本信息
- ///
- private void CheckOffice365Versions(List versions)
- {
- try
- {
- // 检查Click-to-Run版本路径
- using (var key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Office\\ClickToRun\\Configuration"))
- {
- if (key != null)
- {
- var platformVersion = key.GetValue("Platform") as string;
- var clickToRunVersion = key.GetValue("VersionToReport") as string;
-
- if (!string.IsNullOrEmpty(platformVersion))
- {
- var majorVersion = platformVersion.Split('.').FirstOrDefault();
- if (!string.IsNullOrEmpty(majorVersion) && !versions.Contains($"{majorVersion}.0"))
- {
- versions.Add($"{majorVersion}.0");
- LogHelper.WriteLogToFile($"在Office 365配置中找到平台版本: {majorVersion}.0");
- }
- }
-
- if (!string.IsNullOrEmpty(clickToRunVersion))
- {
- var majorVersion = clickToRunVersion.Split('.').FirstOrDefault();
- if (!string.IsNullOrEmpty(majorVersion) && !versions.Contains($"{majorVersion}.0"))
- {
- versions.Add($"{majorVersion}.0");
- LogHelper.WriteLogToFile($"在Office 365配置中找到报告版本: {majorVersion}.0");
- }
- }
- }
- }
-
- // 检查安装路径来确认版本
- var possibleVersions = new[] { "15.0", "16.0" }; // Office 2013 (15.0) 和 Office 2016/2019/365 (16.0)
- foreach (var version in possibleVersions)
- {
- using (var key = Registry.LocalMachine.OpenSubKey($"Software\\Microsoft\\Office\\{version}\\Common\\InstallRoot"))
- {
- if (key != null && key.GetValue("Path") != null && !versions.Contains(version))
- {
- versions.Add(version);
- LogHelper.WriteLogToFile($"在InstallRoot中找到Office版本: {version}");
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"检查Office 365版本时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- ///
- /// 尝试修改Office 365的特殊注册表路径
- ///
- private void TryModifyOffice365Registry()
- {
- try
- {
- // 准备备份目录
- string backupPath = Path.Combine(RootPath, "Saves", "RegistryBackups");
- if (!Directory.Exists(backupPath))
- {
- Directory.CreateDirectory(backupPath);
- LogHelper.WriteLogToFile($"创建Office 365备份目录: {backupPath}");
- }
-
- // 检查Office 365 Outlook和PowerPoint的特定路径
- string[] apps = { "outlook", "powerpoint" };
-
- foreach (var app in apps)
- {
- // 检查用户级别的注册表
- string regPath = $"Software\\Microsoft\\Office\\16.0\\{app}\\Security";
- LogHelper.WriteLogToFile($"检查Office 365特定应用注册表: {regPath}");
-
- try
- {
- // 先检查是否存在该路径
- using (var baseKey = Registry.CurrentUser.OpenSubKey(regPath))
- {
- // 如果路径存在,先备份
- if (baseKey != null)
- {
- string backupFile = Path.Combine(backupPath, $"SecurityBackup_365_{app}_{DateTime.Now:yyyyMMddHHmmss}.reg");
- LogHelper.WriteLogToFile($"创建Office 365 {app}备份文件: {backupFile}");
-
- // 使用UTF8编码写入注册表文件
- using (StreamWriter sw = new StreamWriter(backupFile, false, Encoding.UTF8))
- {
- sw.WriteLine("Windows Registry Editor Version 5.00\n");
- sw.WriteLine();
- sw.WriteLine($"[{Registry.CurrentUser.Name}\\{regPath}]");
-
- foreach (string valueName in baseKey.GetValueNames())
- {
- object value = baseKey.GetValue(valueName);
- sw.WriteLine($"\"{valueName}\"=dword:{((int)value):x8}");
- LogHelper.WriteLogToFile($"备份Office 365 {app}注册表值: {valueName} = {value}");
- }
- }
- }
- }
-
- // 修改或创建注册表项
- using (var key = Registry.CurrentUser.CreateSubKey(regPath, true))
- {
- if (key != null)
- {
- object currentValue = key.GetValue("DisableProtectedView");
- if (currentValue == null || (int)currentValue != 1)
- {
- key.SetValue("DisableProtectedView", 1, RegistryValueKind.DWord);
- LogHelper.WriteLogToFile($"Office 365 {app} 注册表值已设置: DisableProtectedView = 1");
- }
- else
- {
- LogHelper.WriteLogToFile($"Office 365 {app} 注册表值已存在且无需更改");
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"修改 {app} 注册表时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- // 尝试通过Office信任中心路径修改
- string trustCenterPath = "Software\\Microsoft\\Office\\16.0\\Common\\Security\\FileValidation";
- LogHelper.WriteLogToFile($"检查信任中心路径: {trustCenterPath}");
-
- try
- {
- // 先检查是否存在该路径
- using (var baseKey = Registry.CurrentUser.OpenSubKey(trustCenterPath))
- {
- // 如果路径存在,先备份
- if (baseKey != null)
- {
- string backupFile = Path.Combine(backupPath, $"SecurityBackup_365_TrustCenter_{DateTime.Now:yyyyMMddHHmmss}.reg");
- LogHelper.WriteLogToFile($"创建信任中心备份文件: {backupFile}");
-
- // 使用UTF8编码写入注册表文件
- using (StreamWriter sw = new StreamWriter(backupFile, false, Encoding.UTF8))
- {
- sw.WriteLine("Windows Registry Editor Version 5.00\n");
- sw.WriteLine();
- sw.WriteLine($"[{Registry.CurrentUser.Name}\\{trustCenterPath}]");
-
- foreach (string valueName in baseKey.GetValueNames())
- {
- object value = baseKey.GetValue(valueName);
- sw.WriteLine($"\"{valueName}\"=dword:{((int)value):x8}");
- LogHelper.WriteLogToFile($"备份信任中心注册表值: {valueName} = {value}");
- }
- }
- }
- }
-
- using (var key = Registry.CurrentUser.CreateSubKey(trustCenterPath, true))
- {
- if (key != null)
- {
- key.SetValue("DisableEditFromPV", 1, RegistryValueKind.DWord);
- LogHelper.WriteLogToFile("已禁用受保护视图中的编辑");
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"修改信任中心路径时出错: {ex.Message}", LogHelper.LogType.Error);
- }
-
- // 尝试修改EnableEditWhileViewingPolicy
- string policyPath = "Software\\Policies\\Microsoft\\Office\\16.0\\Common\\Security";
- try
- {
- // 先检查是否存在该路径
- using (var baseKey = Registry.CurrentUser.OpenSubKey(policyPath))
- {
- // 如果路径存在,先备份
- if (baseKey != null)
- {
- string backupFile = Path.Combine(backupPath, $"SecurityBackup_365_Policy_{DateTime.Now:yyyyMMddHHmmss}.reg");
- LogHelper.WriteLogToFile($"创建策略备份文件: {backupFile}");
-
- // 使用UTF8编码写入注册表文件
- using (StreamWriter sw = new StreamWriter(backupFile, false, Encoding.UTF8))
- {
- sw.WriteLine("Windows Registry Editor Version 5.00\n");
- sw.WriteLine();
- sw.WriteLine($"[{Registry.CurrentUser.Name}\\{policyPath}]");
-
- foreach (string valueName in baseKey.GetValueNames())
- {
- object value = baseKey.GetValue(valueName);
- sw.WriteLine($"\"{valueName}\"=dword:{((int)value):x8}");
- LogHelper.WriteLogToFile($"备份策略注册表值: {valueName} = {value}");
- }
- }
- }
- }
-
- using (var key = Registry.CurrentUser.CreateSubKey(policyPath, true))
- {
- if (key != null)
- {
- key.SetValue("EnableEditWhileViewingPolicy", 1, RegistryValueKind.DWord);
- LogHelper.WriteLogToFile("已启用查看时编辑策略");
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"修改策略路径时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"修改Office 365注册表时发生未知错误: {ex.Message}", LogHelper.LogType.Error);
- }
- }
}
}