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);
+ });
}
}
}