windows: 优化 frpc 计划任务运行方式

This commit is contained in:
bin456789 2025-04-30 00:00:16 +08:00
parent fb13af7a3d
commit e11024319f
No known key found for this signature in database
GPG Key ID: EE301B386DE6C11B
3 changed files with 6 additions and 30 deletions

View File

@ -2921,7 +2921,6 @@ modify_windows() {
cp -f /configs/frpc.toml "$os_dir/frpc/frpc.toml" cp -f /configs/frpc.toml "$os_dir/frpc/frpc.toml"
download "$confhome/windows-frpc.xml" "$os_dir/frpc/frpc.xml" download "$confhome/windows-frpc.xml" "$os_dir/frpc/frpc.xml"
download "$confhome/windows-frpc.bat" "$os_dir/frpc/frpc.bat" 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" bats="$bats frpc\frpc.bat"
else else
warn "$windows_arch Not Support frpc" warn "$windows_arch Not Support frpc"

View File

@ -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"

View File

@ -4,35 +4,30 @@ mode con cp select=437 >nul
rem Windows Deferder 会误报,因此要添加白名单 rem Windows Deferder 会误报,因此要添加白名单
powershell -ExecutionPolicy Bypass -Command "Add-MpPreference -ExclusionPath '%SystemDrive%\frpc\frpc.exe'" 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 启用日志
rem wevtutil set-log Microsoft-Windows-TaskScheduler/Operational /enabled:true rem wevtutil set-log Microsoft-Windows-TaskScheduler/Operational /enabled:true
rem ---------- DEBUG ----------
rem 创建计划任务并立即运行 rem 创建计划任务并立即运行
schtasks /Create /TN "frpc" /XML "%SystemDrive%\frpc\frpc.xml" schtasks /Create /TN "frpc" /XML "%SystemDrive%\frpc\frpc.xml"
schtasks /Run /TN "frpc" schtasks /Run /TN "frpc"
del "%SystemDrive%\frpc\frpc.xml" del "%SystemDrive%\frpc\frpc.xml"
rem win11 在首次登录后计划任务才生效 rem win10+ 在首次登录后计划任务才生效
rem 即使手动重启,计划任务也没有运行 rem 即使手动重启,计划任务也没有运行
rem 如果 10 秒内有 frpc 进程,则代表计划任务已经生效,不需要首次登录 rem 如果 10 秒内有 frpc 进程,则代表计划任务已经生效,不需要首次登录
rem 如果 10 秒后也没有 frpc 进程,则需要运行 frpc-workaround.bat rem 如果 10 秒后也没有 frpc 进程,则需要临时改用 SYSTEM 用户运行计划任务
for /L %%i in (1,1,10) do ( for /L %%i in (1,1,10) do (
timeout 1 timeout 1
tasklist /FI "IMAGENAME eq frpc.exe" | find /I "frpc.exe" && ( tasklist /FI "IMAGENAME eq frpc.exe" | find /I "frpc.exe" && (
del "%SystemDrive%\frpc\frpc-workaround.bat"
goto :end goto :end
) )
) )
rem 后台运行 frpc-workaround.bat rem 临时改用 SYSTEM 用户运行计划任务,运行后再改回 Local Service 用户
rem 需要加 cmd /c不然 frpc-workaround.bat 结束后有 cmd 窗口残留 schtasks /Change /TN "frpc" /RU "S-1-5-18"
start cmd /c "%SystemDrive%\frpc\frpc-workaround.bat" schtasks /Run /TN "frpc"
schtasks /Change /TN "frpc" /RU "S-1-5-19"
:end :end
rem 删除此脚本 rem 删除此脚本