【原创】解决NasCab掉进程,NasCab进程维护

最近对象吐槽家里服务器又连不上,看不了考研视频了。
我掏出手机一试,确实连不上。家里的服务器是Win11平台,用NasCab管理的视频文件,然后通过frpc做的内网穿透。
我们在外面的图书馆,连不上无非是三种情况:服务器关机了、NasCab内网穿透插件掉了、NasCab进程掉了。
远程登录服务器,发现是NasCab进程掉了。。。点开NasCab,1分钟后对象又可以愉快的看考研视频了。
我想了想,决定写个脚本处理一下这事,因为我也时不时遇到NasCab掉进程的情况,我之前都是忽略了,但现在意识到这会影响体验。
思路:写一个维护进程的脚本,循环扫描nascab进程,检测不到就开启NasCab。
要求:该脚本不能受NasCab影响,同时该脚本也不能影响NasCab,那就需要另一个终端开启nascab,于是是bat->cmd->powershell->NasCab,这样只有powershell窗口会被影响,关掉cmd不会影响NasCab。
实现代码为:powershell -command "& {Start-Process %executable%}",其中executable为要执行的程序,就是nascab。
注意nascab的路径要加入path,路径为:C:UsershplAppDataLocalProgramsnascabNasCab.exe,其中hpl替换为自己的用户名。
然后让这个脚本开机自启动就可以了。实现方法可用创建任务计划,也可直接拖入启动文件夹。

完整代码如下(全网首发,转载请保留出处):
取名Gaia是因为我爱玩零之曙光,里面的Gaia功能强大,hhh

点击查看代码
@echo off rem 关闭echo命令显示  chcp 65001 rem 强制开启UTF-8,以支持中文显示  rem 为本脚本获取管理员权限 ver | findstr "10.[0-9].[0-9]*" >nul && goto powershellAdmin  :mshtaAdmin rem 原理是利用mshta运行vbscript脚本给bat文件提权 rem 这里使用了前后带引号的%~dpnx0来表示当前脚本,比原版的短文件名%~s0更可靠 rem 这里使用了两次Net session,第二次是检测是否提权成功,如果提权失败则跳转到failed标签 rem 这有效避免了提权失败之后bat文件继续执行的问题 Net session >nul 2>&1 || mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~dpnx0""","","runas",1)(window.close)&&exit Net session >nul 2>&1 || goto failed goto Admin  :powershellAdmin rem 原理是利用powershell给bat文件提权 rem 这里使用了两次Net session,第二次是检测是否提权成功,如果提权失败则跳转到failed标签 rem 这有效避免了提权失败之后bat文件继续执行的问题 Net session >nul 2>&1 || powershell start-process "%0" -verb runas && exit Net session >nul 2>&1 || goto failed goto Admin  :failed echo 提权失败,可能是杀毒软件拦截了提权操作,或者您没有同意UAC提权申请。 echo 建议您右键点击此脚本,选择“以管理员身份运行”。 echo 按任意键退出。 pause >nul exit  :Admin echo 本脚本处理所在路径:%0 echo 已获取管理员权限! ping 127.0.0.1 -n 1 > nul echo 如果此窗口标题处显示“管理员”字样,那就说明提权成功了。  echo 尝试将工作目录转移到软件目录... cd /d %~dp0 rem 切换软件工作目录到软件所在文件夹 ping 127.0.0.1 -n 1 > nul echo 目录转移成功!  rem 在后台运行本脚本 if "%1" == "h" goto begin mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin  rem 在这里设置目标程序 :: 程序路径需加入Path: C:UsershplAppDataLocalProgramsnascabNasCab.exe set executable=nascab set /a counter=0 set TITLE=GaiaNasCab-background-admin[1.4]  rem 设置标题 title %TITLE%  echo -------------------------------------------------------------------------------- > %TITLE%.log echo [%DATE%%TIME:~0,8%]本脚本[%TITLE%]正在以管理员模式运行! >> %TITLE%.log echo 本脚本用于守护%executable%,保证其始终处于运行状态 >> %TITLE%.log echo 更新于:2024年9月19日,by HPL. >> %TITLE%.log echo -------------------------------------------------------------------------------- >> %TITLE%.log echo: >> %TITLE%.log echo: echo -------------------------------------------------------------------------------- echo [%DATE%%TIME:~0,8%]本脚本[%TITLE%]正在以管理员模式运行! ping 127.0.0.1 -n 1 > nul echo 本脚本用于守护%executable%,保证其始终处于运行状态 ping 127.0.0.1 -n 1 > nul echo 更新于:2024年9月19日,by HPL. echo -------------------------------------------------------------------------------- echo:  echo [%DATE%%TIME:~0,8%]目标程序扫描中... >> %TITLE%.log echo: >> %TITLE%.log echo [%DATE%%TIME:~0,8%]目标程序扫描中... echo:   :checkrun tasklist|findstr /i "%executable%" if errorlevel 1 ( echo [%DATE%%TIME:~0,8%]未检测到正在运行的%executable%,准备开启%executable%... >> %TITLE%.log echo counter[%counter%] >> %TITLE%.log echo -------------------------------------------------------------------------------- >> %TITLE%.log echo [%DATE%%TIME:~0,8%]未检测到正在运行的%executable%,准备开启%executable%... echo counter[%counter%] echo -------------------------------------------------------------------------------- goto start ) if errorlevel 0 ( rem 扫描时间建议5分钟以上,避免更新NasCab时被触发本程序 echo [%DATE%%TIME:~0,8%]已找到%executable%,循环扫描中[300s]... echo counter[%counter%] echo -------------------------------------------------------------------------------- ping 127.0.0.1 -n 300 > nul goto checkrun ) ping 127.0.0.1 -n 5 > nul  :start echo: >> %TITLE%.log echo [%DATE%%TIME:~0,8%]正在开启%executable%... >> %TITLE%.log echo: echo [%DATE%%TIME:~0,8%]正在开启%executable%...  rem 使用powershell后台运行NasCab(测试用) ::powershell -command "& {Start-Process %executable% -WindowStyle Hidden}"  rem 使用powershell前台运行NasCab(效果好,强烈推荐) powershell -command "& {Start-Process %executable%}"  rem 前台运行NasCab(禁用,此方式NasCab会将程序log注入本bat所处的cmd,关掉本bat同时会关掉NasCab) ::start %executable% ping 127.0.0.1 -n 1 > nul echo: echo [%DATE%%TIME:~0,8%]已成功开启%executable%! >> %TITLE%.log echo [%DATE%%TIME:~0,8%]已成功开启%executable%! echo counter[%counter%] >> %TITLE%.log echo -------------------------------------------------------------------------------- >> %TITLE%.log echo: >> %TITLE%.log echo [%DATE%%TIME:~0,8%]5s后进入运行状态检测checkrun... >> %TITLE%.log echo: >> %TITLE%.log echo: echo [%DATE%%TIME:~0,8%]5s后进入运行状态检测checkrun... ping 127.0.0.1 -n 5 > nul set /a counter+=1 goto checkrun  

使用效果:
程序运行时会在bat所在目录生成log日志,可观察运行状态
【原创】解决NasCab掉进程,NasCab进程维护

发表评论

相关文章