diff --git a/app/appearance/langs/ar_SA.json b/app/appearance/langs/ar_SA.json index 314145364..6c4507ded 100644 --- a/app/appearance/langs/ar_SA.json +++ b/app/appearance/langs/ar_SA.json @@ -1579,6 +1579,6 @@ "249": "تعذر الوصول إلى البيانات بسبب خطأ في الإعدادات. الرجاء التحقق من الإعدادات وأذونات التخزين السحابية", "250": "تم تحديد معدل الطلب بواسطة التخزين السحابي. الرجاء التحقق من الإعدادات وأذونات التخزين السحابية", "251": "‫مجموع الأصول غير المستخدمة [%d]، [%d] فقط منها مدرج هنا‬", - "252": "\uD83D\uDEA8 قد يقوم Microsoft Defender بحذف النواة عن طريق الخطأ، وحذف البيانات وتقليل الأداء بشكل كبير. يوصى بإضافة مسار التثبيت ومسار مساحة العمل الخاصة بـ SiYuan إلى قائمة الاستثناءات " + "252": "\uD83D\uDEA8 قد يقوم Microsoft Defender بحذف النواة عن طريق الخطأ، وحذف البيانات وتقليل الأداء بشكل كبير. يوصى بإضافة مسار التثبيت ومسار مساحة العمل الخاصة بـ SiYuan إلى قائمة الاستثناءات" } } \ No newline at end of file diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json index aa7d3fb3e..4ef527669 100644 --- a/app/appearance/langs/de_DE.json +++ b/app/appearance/langs/de_DE.json @@ -1579,6 +1579,6 @@ "249": "Aufgrund eines Konfigurationsfehlers kann nicht auf die Daten zugegriffen werden. Bitte überprüfen Sie die Einstellungen und die Berechtigungen für den Cloud-Speicher", "250": "Die Anfrage wurde vom Cloud-Speicher begrenzt. Bitte überprüfen Sie die Einstellungen und die Berechtigungen für den Cloud-Speicher", "251": "Insgesamt ungenutzte Assets [%d], hier nur [%d] aufgeführt", - "252": "\uD83D\uDEA8 Microsoft Defender könnte fälschlicherweise den Kernel löschen, Daten löschen und die Leistung erheblich verringern. Es wird empfohlen, den Installationspfad und den Arbeitsbereich von SiYuan zur Ausschlussliste hinzuzufügen " + "252": "\uD83D\uDEA8 Microsoft Defender könnte fälschlicherweise den Kernel löschen, Daten löschen und die Leistung erheblich verringern. Es wird empfohlen, den Installationspfad und den Arbeitsbereich von SiYuan zur Ausschlussliste hinzuzufügen" } } diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 3de970008..bb679a0fa 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1579,6 +1579,6 @@ "249": "Unable to access data due to configuration error. Please check the settings and cloud storage permissions", "250": "Request has been rate-limited by cloud storage. Please check the settings and cloud storage permissions", "251": "Total unused assets [%d], only [%d] listed here", - "252": "\uD83D\uDEA8 Microsoft Defender may mistakenly delete the kernel, delete data, and significantly reduce performance. It is recommended to add the SiYuan installation path and workspace path to the exclusion list " + "252": "\uD83D\uDEA8 Microsoft Defender may mistakenly delete the kernel, delete data, and significantly reduce performance. It is recommended to add the SiYuan installation path and workspace path to the exclusion list" } } diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index d167ff408..6cfbc0c8f 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1579,6 +1579,6 @@ "249": "No se puede acceder a los datos debido a un error de configuración. Por favor, verifique las configuraciones y permisos de almacenamiento en la nube", "250": "La solicitud ha sido limitada por el almacenamiento en la nube. Por favor, verifique las configuraciones y permisos de almacenamiento en la nube", "251": "Total de activos no utilizados [%d], solo [%d] listados aquí", - "252": "\uD83D\uDEA8 Microsoft Defender puede eliminar por error el núcleo, eliminar datos y reducir significativamente el rendimiento. Se recomienda agregar la ruta de instalación y el espacio de trabajo de SiYuan a la lista de exclusiones " + "252": "\uD83D\uDEA8 Microsoft Defender puede eliminar por error el núcleo, eliminar datos y reducir significativamente el rendimiento. Se recomienda agregar la ruta de instalación y el espacio de trabajo de SiYuan a la lista de exclusiones" } } diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 9260a99da..159c4c4c1 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1579,6 +1579,6 @@ "249": "Impossible d'accéder aux données en raison d'une erreur de configuration. Veuillez vérifier les paramètres et les autorisations de stockage cloud", "250": "La demande a été limitée par le stockage cloud. Veuillez vérifier les paramètres et les autorisations de stockage cloud", "251": "Total des actifs inutilisés [%d], seulement [%d] listés ici", - "252": "\uD83D\uDEA8 Microsoft Defender peut supprimer par erreur le noyau, supprimer des données et réduire considérablement les performances. Il est recommandé d'ajouter le chemin d'installation et l'espace de travail de SiYuan à la liste des exclusions " + "252": "\uD83D\uDEA8 Microsoft Defender peut supprimer par erreur le noyau, supprimer des données et réduire considérablement les performances. Il est recommandé d'ajouter le chemin d'installation et l'espace de travail de SiYuan à la liste des exclusions" } } diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json index faaa866cd..f08a82347 100644 --- a/app/appearance/langs/he_IL.json +++ b/app/appearance/langs/he_IL.json @@ -1579,6 +1579,6 @@ "249": "אין אפשרות לגשת לנתונים עקב שגיאת תצורה. אנא בדוק את ההגדרות והרשאות האחסון בענן", "250": "הבקשה הוגבלה על ידי אחסון הענן. אנא בדוק את ההגדרות והרשאות האחסון בענן", "251": "סך כל הנכסים שלא נעשה בהם שימוש [%d], רק [%d] מופיעים כאן", - "252": "\uD83D\uDEA8 Microsoft Defender עלול למחוק בטעות את הליבה, למחוק נתונים ולהפחית משמעותית את הביצועים. מומלץ להוסיף את נתיב ההתקנה ונתיב סביבת העבודה של SiYuan לרשימת החריגים " + "252": "\uD83D\uDEA8 Microsoft Defender עלול למחוק בטעות את הליבה, למחוק נתונים ולהפחית משמעותית את הביצועים. מומלץ להוסיף את נתיב ההתקנה ונתיב סביבת העבודה של SiYuan לרשימת החריגים" } } diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json index 26b031a6b..5f372f257 100644 --- a/app/appearance/langs/it_IT.json +++ b/app/appearance/langs/it_IT.json @@ -1579,6 +1579,6 @@ "249": "Impossibile accedere ai dati a causa di un errore di configurazione. Si prega di controllare attentamente le impostazioni e le autorizzazioni di archiviazione cloud", "250": "La richiesta è stata limitata dall'archiviazione cloud. Si prega di controllare attentamente le impostazioni e le autorizzazioni di archiviazione cloud", "251": "Totale risorse inutilizzate [%d], qui elencate solo [%d]", - "252": "\uD83D\uDEA8 Microsoft Defender potrebbe eliminare erroneamente il kernel, eliminare i dati e ridurre significativamente le prestazioni. Si consiglia di aggiungere il percorso di installazione e lo spazio di lavoro di SiYuan all'elenco delle esclusioni " + "252": "\uD83D\uDEA8 Microsoft Defender potrebbe eliminare erroneamente il kernel, eliminare i dati e ridurre significativamente le prestazioni. Si consiglia di aggiungere il percorso di installazione e lo spazio di lavoro di SiYuan all'elenco delle esclusioni" } } diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index 44856dc22..196ab3d44 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -1579,6 +1579,6 @@ "249": "設定エラーのためデータにアクセスできません。設定を一つずつ確認し、クラウドストレージの権限を確認してください", "250": "リクエストがクラウドストレージによって制限されました。設定を一つずつ確認し、クラウドストレージの権限を確認してください", "251": "未使用のアセットの合計 [%d]、ここにリストされているのは [%d] のみ", - "252": "\uD83D\uDEA8 Microsoft Defender はカーネルを誤って削除したり、データを削除したり、パフォーマンスを大幅に低下させ��可能性があります。SiYuan のインストールパスとワークスペースパスを除外リストに追加することをお勧めします " + "252": "\uD83D\uDEA8 Microsoft Defender はカーネルを誤って削除したり、データを削除したり、パフォーマンスを大幅に低下させ��可能性があります。SiYuan のインストールパスとワークスペースパスを除外リストに追加することをお勧めします" } } diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json index 6ce6e45e9..1031d70f0 100644 --- a/app/appearance/langs/pl_PL.json +++ b/app/appearance/langs/pl_PL.json @@ -1579,6 +1579,6 @@ "249": "Z powodu błędu konfiguracji nie można uzyskać dostępu do danych. Proszę dokładnie sprawdzić ustawienia i uprawnienia do przechowywania w chmurze", "250": "Żądanie zostało ograniczone przez przechowywanie w chmurze. Proszę dokładnie sprawdzić ustawienia i uprawnienia do przechowywania w chmurze", "251": "Łączna liczba nieużywanych zasobów [%d], tutaj wymieniono tylko [%d]", - "252": "\uD83D\uDEA8 Microsoft Defender może błędnie usunąć jądro, usunąć dane i znacznie obniżyć wydajność, zaleca się dodanie ścieżki instalacji i przestrzeni roboczej SiYuan do listy wykluczeń " + "252": "\uD83D\uDEA8 Microsoft Defender może błędnie usunąć jądro, usunąć dane i znacznie obniżyć wydajność, zaleca się dodanie ścieżki instalacji i przestrzeni roboczej SiYuan do listy wykluczeń" } } diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json index e9d6a67a9..e7c3dc256 100644 --- a/app/appearance/langs/ru_RU.json +++ b/app/appearance/langs/ru_RU.json @@ -1579,6 +1579,6 @@ "249": "Из-за ошибки конфигурации невозможно получить доступ к данным. Пожалуйста, проверьте настройки и права доступа к облачному хранилищу", "250": "Запрос был ограничен облачным хранилищем. Пожалуйста, проверьте настройки и права доступа к облачному хранилищу", "251": "Всего неиспользованных активов [%d], здесь перечислены только [%d]", - "252": "\uD83D\uDEA8 Microsoft Defender может ошибочно удалить ядро, удалить данные и значительно снизить производительность, рекомендуется добавить путь установки и рабочее пространство SiYuan в список исключений " + "252": "\uD83D\uDEA8 Microsoft Defender может ошибочно удалить ядро, удалить данные и значительно снизить производительность, рекомендуется добавить путь установки и рабочее пространство SiYuan в список исключений" } } diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index b0ab3776e..d973c0ec3 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1579,6 +1579,6 @@ "249": "因配置錯誤導致無法存取數據,請仔細逐個核對配置項,並檢查雲端存儲相關權限配置", "250": "請求已被雲端存儲限流,請仔細逐個核對配置項,並檢查雲端存儲相關權限配置", "251": "未引用資源一共 ${x} 個,這裡僅列出 ${y} 個", - "252": "\uD83D\uDEA8 Microsoft Defender 可能會誤殺內核、誤刪數據和嚴重降低運行性能,建議將思源安裝路徑和工作空間路徑添加到排除列表 " + "252": "\uD83D\uDEA8 Microsoft Defender 可能會誤殺內核、誤刪數據和嚴重降低運行性能,建議將思源安裝路徑和工作空間路徑添加到排除列表" } } diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 11fa29721..59e7df38c 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1579,6 +1579,6 @@ "249": "因配置错误导致无法存取数据,请仔细逐个核对配置项,并检查云端存储相关权限配置", "250": "请求已被云端存储限流,请仔细逐个核对配置项,并检查云端存储相关权限配置", "251": "未引用资源一共 [%d] 个,这里仅列出 [%d] 个", - "252": "\uD83D\uDEA8 Microsoft Defender 可能会误杀内核、误删数据和严重降低运行性能,建议将思源安装路径和工作空间路径添加到排除列表 " + "252": "\uD83D\uDEA8 Microsoft Defender 可能会误杀内核、误删数据和严重降低运行性能,建议将思源安装路径和工作空间路径添加到排除列表" } } diff --git a/app/src/util/processMessage.ts b/app/src/util/processMessage.ts index 111cabd3f..619662f5f 100644 --- a/app/src/util/processMessage.ts +++ b/app/src/util/processMessage.ts @@ -8,10 +8,11 @@ import {fetchPost} from "./fetch"; export const processMessage = (response: IWebSocketData) => { if ("msg" === response.cmd) { - showMessage(response.msg, response.data.closeTimeout, response.code === 0 ? "info" : "error", response.data.id); + const id = showMessage(response.msg, response.data.closeTimeout, response.code === 0 ? "info" : "error", response.data.id); document.querySelector("#message #addMicrosoftDefenderExclusion")?.addEventListener("click", (event) => { - fetchPost("/api/system/addMicrosoftDefenderExclusion", {}, (response) => { - (event.target as HTMLElement).innerHTML = ''; + (event.target as HTMLElement).innerHTML = ''; + fetchPost("/api/system/addMicrosoftDefenderExclusion", {}, () => { + hideMessage(id); }); }, {once: true}); return false; diff --git a/kernel/model/elevator_windows.go b/kernel/model/elevator_windows.go index 8710b896a..22e28658b 100644 --- a/kernel/model/elevator_windows.go +++ b/kernel/model/elevator_windows.go @@ -26,6 +26,7 @@ import ( "path/filepath" "runtime" "strings" + "sync" "syscall" "github.com/88250/gulu" @@ -34,7 +35,12 @@ import ( "golang.org/x/sys/windows" ) +var microsoftDefenderLock = sync.Mutex{} + func AddMicrosoftDefenderExclusion() (err error) { + microsoftDefenderLock.Lock() + defer microsoftDefenderLock.Unlock() + if !gulu.OS.IsWindows() { return } @@ -46,15 +52,17 @@ func AddMicrosoftDefenderExclusion() (err error) { installPath := filepath.Dir(util.WorkingDir) psArgs := []string{"-Command", "Add-MpPreference", "-ExclusionPath", installPath, ",", util.WorkspaceDir} if isAdmin() { + logging.LogInfof("current user is admin, add Windows Defender exclusion path [%s, %s]", installPath, util.WorkspaceDir) cmd := exec.Command("powershell", psArgs...) gulu.CmdAttr(cmd) output, cmdErr := cmd.CombinedOutput() if nil != cmdErr { - logging.LogErrorf("add Windows Defender exclusion path [%s] failed: %s, %s", installPath, cmdErr, string(output)) + logging.LogErrorf("add Windows Defender exclusion path [%s, %s] failed: %s, %s", installPath, util.WorkspaceDir, cmdErr, string(output)) err = cmdErr return } } else { + logging.LogInfof("current user is not admin, use elevator to add Windows Defender exclusion path [%s, %s]", installPath, util.WorkspaceDir) elevator := filepath.Join(util.WorkingDir, "elevator.exe") if "dev" == util.Mode || !gulu.File.IsExist(elevator) { elevator = filepath.Join(util.WorkingDir, "elevator", "elevator-"+runtime.GOARCH+".exe") @@ -75,13 +83,13 @@ func AddMicrosoftDefenderExclusion() (err error) { argPtr, _ := syscall.UTF16PtrFromString(strings.Join(ps, " ")) execErr := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, 1) if execErr != nil { - logging.LogErrorf("add Windows Defender exclusion path [%s] failed: %s", installPath, execErr) + logging.LogErrorf("add Windows Defender exclusion path [%s, %s] failed: %s", installPath, util.WorkspaceDir, execErr) err = execErr return } } - util.PushClearAllMsg() + logging.LogInfof("added Windows Defender exclusion path [%s, %s]", installPath, util.WorkspaceDir) util.PushMsg(Conf.language(102), 5000) return } @@ -91,6 +99,9 @@ func AutoProcessMicrosoftDefender() { } func checkMicrosoftDefender() { + microsoftDefenderLock.Lock() + defer microsoftDefenderLock.Unlock() + if !gulu.OS.IsWindows() || Conf.System.MicrosoftDefenderExcluded { return }