diff --git a/trans.sh b/trans.sh index 4cecfca..5fe6f20 100644 --- a/trans.sh +++ b/trans.sh @@ -2921,7 +2921,6 @@ modify_windows() { cp -f /configs/frpc.toml "$os_dir/frpc/frpc.toml" download "$confhome/windows-frpc.xml" "$os_dir/frpc/frpc.xml" download "$confhome/windows-frpc.bat" "$os_dir/frpc/frpc.bat" - download "$confhome/windows-frpc-workaround.bat" "$os_dir/frpc/frpc-workaround.bat" bats="$bats frpc\frpc.bat" else warn "$windows_arch Not Support frpc" diff --git a/windows-frpc-workaround.bat b/windows-frpc-workaround.bat deleted file mode 100644 index d1ba31e..0000000 --- a/windows-frpc-workaround.bat +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -mode con cp select=437 >nul - -rem 如果找到 LOCAL SERVICE 运行的 frpc,则结束 SYSTEM 运行的 frpc -rem 如果没找到 frpc,则运行 frpc(本脚本是用 SYSTEM 运行,好像无法 runas "NT AUTHORITY\LOCAL SERVICE") - -rem tasklist 返回值始终为 0,因此需要用 findstr - -:loop -tasklist /FI "IMAGENAME eq frpc.exe" /FI "USERNAME eq NT AUTHORITY\LOCAL SERVICE" | findstr /I "frpc.exe" && goto :kill_system_frpc -tasklist /FI "IMAGENAME eq frpc.exe" | findstr /I "frpc.exe" || start %SystemDrive%\frpc\frpc.exe -c %SystemDrive%\frpc\frpc.toml -timeout 5 -goto :loop - -:kill_system_frpc -taskkill /F /T /FI "IMAGENAME eq frpc.exe" /FI "USERNAME eq NT AUTHORITY\SYSTEM" - -del "%~f0" diff --git a/windows-frpc.bat b/windows-frpc.bat index afb1ca2..0f6efa8 100644 --- a/windows-frpc.bat +++ b/windows-frpc.bat @@ -4,35 +4,30 @@ mode con cp select=437 >nul rem Windows Deferder 会误报,因此要添加白名单 powershell -ExecutionPolicy Bypass -Command "Add-MpPreference -ExclusionPath '%SystemDrive%\frpc\frpc.exe'" -rem ---------- DEBUG ---------- -rem 检查服务状态 -rem sc query Schedule >%SystemDrive%\x.txt 2>&1 - rem 启用日志 rem wevtutil set-log Microsoft-Windows-TaskScheduler/Operational /enabled:true -rem ---------- DEBUG ---------- rem 创建计划任务并立即运行 schtasks /Create /TN "frpc" /XML "%SystemDrive%\frpc\frpc.xml" schtasks /Run /TN "frpc" del "%SystemDrive%\frpc\frpc.xml" -rem win11 在首次登录后计划任务才生效 +rem win10+ 在首次登录后计划任务才生效 rem 即使手动重启,计划任务也没有运行 rem 如果 10 秒内有 frpc 进程,则代表计划任务已经生效,不需要首次登录 -rem 如果 10 秒后也没有 frpc 进程,则需要运行 frpc-workaround.bat +rem 如果 10 秒后也没有 frpc 进程,则需要临时改用 SYSTEM 用户运行计划任务 for /L %%i in (1,1,10) do ( timeout 1 tasklist /FI "IMAGENAME eq frpc.exe" | find /I "frpc.exe" && ( - del "%SystemDrive%\frpc\frpc-workaround.bat" goto :end ) ) -rem 后台运行 frpc-workaround.bat -rem 需要加 cmd /c,不然 frpc-workaround.bat 结束后有 cmd 窗口残留 -start cmd /c "%SystemDrive%\frpc\frpc-workaround.bat" +rem 临时改用 SYSTEM 用户运行计划任务,运行后再改回 Local Service 用户 +schtasks /Change /TN "frpc" /RU "S-1-5-18" +schtasks /Run /TN "frpc" +schtasks /Change /TN "frpc" /RU "S-1-5-19" :end rem 删除此脚本