[每天记录一个问题,记录十年 Blog]
问题:
使用easytier进行异地组网mstsc时,运行一段时间后会莫名网关消失,导致远程失败,重启服务后状态正常
1、临时性解决方案如下:
A. 新建一个bat脚本,填入内容,远程失败时双击执行即可:
# 脚本已放入_unable_to_sync下同名文件中
@echo off
chcp 65001 >nul
REM 设置控制台为UTF-8编码
REM 通过尝试访问系统文件检测是否具有管理员权限
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM 根据错误代码判断权限状态
if '%errorlevel%' NEQ '0' (
REM 无管理员权限,执行提权操作
goto UACPrompt
) else (
REM 已有管理员权限,继续执行
goto gotAdmin
)
:UACPrompt
REM 创建VBScript脚本用于提权
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
REM 执行提权脚本
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
REM 清理临时提权脚本文件
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
REM 定义服务名称变量
set SERVICE_NAME=EasyTierService
REM 检查服务是否存在
sc query "%SERVICE_NAME%" >nul 2>&1
if %errorlevel% neq 0 (
echo [错误] 服务 "%SERVICE_NAME%" 不存在!
goto :end
)
REM 获取服务当前状态
for /f "tokens=4" %%i in ('sc query "%SERVICE_NAME%" ^| findstr "STATE"') do set SERVICE_STATE=%%i
REM 根据服务状态执行相应操作
if "%SERVICE_STATE%"=="RUNNING" (
echo [信息] 服务 "%SERVICE_NAME%" 当前正在运行,正在停止...
net stop "%SERVICE_NAME%"
echo [信息] 正在重新启动服务...
net start "%SERVICE_NAME%"
echo [成功] 服务重启完成!
) else if "%SERVICE_STATE%"=="STOPPED" (
echo [信息] 服务 "%SERVICE_NAME%" 当前已停止,正在启动...
net start "%SERVICE_NAME%"
echo [成功] 服务启动完成!
) else (
echo [警告] 服务 "%SERVICE_NAME%" 当前状态未知: %SERVICE_STATE%
echo [信息] 尝试重新启动服务...
net stop "%SERVICE_NAME%" >nul 2>&1
net start "%SERVICE_NAME%"
)
:end
REM 暂停以便查看输出结果
echo.
echo 按任意键退出...
pause >nul
2、补充解决办法:
使用管理员cmd添加手动10.0.0.0网关永久路由(本机虚拟IP10.0.0.4时):
route -p add 10.0.0.0 mask 255.255.255.0 10.0.0.4 metric 261
使用命令删除永久路由:
route delete 10.0.0.2


