diff --git a/Ink Canvas/Helpers/ProcessProtectionManager.cs b/Ink Canvas/Helpers/ProcessProtectionManager.cs index 2e4a7ce6..49f0813c 100644 --- a/Ink Canvas/Helpers/ProcessProtectionManager.cs +++ b/Ink Canvas/Helpers/ProcessProtectionManager.cs @@ -366,17 +366,21 @@ namespace Ink_Canvas.Helpers /// /// 要开始扫描的根目录路径。 /// - /// 仅处理扩展名为 `.exe`, `.dll`, `.config`, `.manifest`, `.dat`, `.enc` 的文件;会跳过被 IsExcludedPath 判定为排除的路径。遇到任何 I/O 或访问错误时会静默忽略,不会抛出异常。 + /// 仅处理扩展名为 `.exe`, `.dll`, `.config`, `.manifest`, `.dat`, `.enc` 的文件,以及应用根目录下的点名名单 `Names.txt`; + /// 会跳过被 IsExcludedPath 判定为排除的路径。遇到任何 I/O 或访问错误时会静默忽略,不会抛出异常。 private static void LockFilesRecursive(string root) { try { + var rollCallNamesPath = NormalizePath(Path.Combine(root, "Names.txt")); foreach (var file in Directory.GetFiles(root, "*", SearchOption.AllDirectories)) { if (!IsExcludedPath(file)) { var ext = Path.GetExtension(file); - if (string.Equals(ext, ".exe", StringComparison.OrdinalIgnoreCase) || + var normFile = NormalizePath(file); + if (string.Equals(normFile, rollCallNamesPath, StringComparison.OrdinalIgnoreCase) || + string.Equals(ext, ".exe", StringComparison.OrdinalIgnoreCase) || string.Equals(ext, ".dll", StringComparison.OrdinalIgnoreCase) || string.Equals(ext, ".config", StringComparison.OrdinalIgnoreCase) || string.Equals(ext, ".manifest", StringComparison.OrdinalIgnoreCase) || diff --git a/Ink Canvas/Windows/NamesInputWindow.xaml.cs b/Ink Canvas/Windows/NamesInputWindow.xaml.cs index d453cf52..8941dda7 100644 --- a/Ink Canvas/Windows/NamesInputWindow.xaml.cs +++ b/Ink Canvas/Windows/NamesInputWindow.xaml.cs @@ -1,4 +1,4 @@ -using Ink_Canvas.Helpers; +using Ink_Canvas.Helpers; using System; using System.ComponentModel; using System.IO; @@ -38,7 +38,11 @@ namespace Ink_Canvas var result = MessageBox.Show("是否保存?", "名单导入", MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes) { - File.WriteAllText(App.RootPath + "Names.txt", TextBoxNames.Text); + var path = App.RootPath + "Names.txt"; + ProcessProtectionManager.WithWriteAccess(path, () => + { + File.WriteAllText(path, TextBoxNames.Text); + }); } } }