最近对象吐槽家里服务器又连不上,看不了考研视频了。

我掏出手机一试,确实连不上。家里的服务器是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:\Users\hpl\AppData\Local\Programs\nascab\NasCab.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:\Users\hpl\AppData\Local\Programs\nascab\NasCab.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进程维护的更多相关文章

  1. 解决linux下tomcat停止进程任存在问题

    解决linux下tomcat停止进程任存在问题 在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访 ...

  2. 完美解决IE8有两个进程的问题

    完美解决IE8有两个进程的问题,照以下方法设置后就只有一个进程了,没有什么负影响哦! 方法: 1.win+R,在运行框里输入:gpedit.msc,回车进入组策略设置. 2.依次展开:计算机配置——管 ...

  3. 【转】 VC++ 关闭程序后任务管理器进程中进程仍然存在的解决方法

    转载出处:http://blog.csdn.net/zac_sian/article/details/50809084 可以从以下两个方面进行查找! 1.程序开启了进程,进程中使用了while(1), ...

  4. Linux中influx数据库进程杀不掉,父进程为1

    influx数据库一直杀不掉,父进程为1是个僵尸进程 后来我才发现,influx是运行运行状态 我只需要使用命令,停掉influx即可停止改进程

  5. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  6. wait、waitpid 僵尸进程 孤儿进程

    man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...

  7. linux下的进程(孤儿进程、僵尸进程)

    linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到.这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开文件,占用的内存等.但是仍然为其保留一定的信息 ...

  8. 浅析僵尸进程&孤儿进程

    0x01 前言 此文出自:https://www.cnblogs.com/Anker/p/3271773.html 博文主要用unix/linux举例,但道理没问题的同样有助于在Python中理解僵尸 ...

  9. 8.9 day30 并发编程 进程理论 进程方法 守护进程 互斥锁

    多道技术 1.空间上的复用 多个程序共用一套计算机硬件 多道技术原理 2.时间上的复用 ​ 切换+保存状态 ​ 1.当一个程序遇到IO操作 操作系统会剥夺该程序的CPU执行权限( 提高了CPU的利用率 ...

  10. Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)?在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态 ...

随机推荐

  1. 题解:P10537 [APIO2024] 九月

    题解:P10537 [APIO2024] 九月 题意 在一个树上,在 \(k\) 天内有 \(n-1\) 个节点掉落,会有 \(m\) 个记录者记录掉落的情况,每一天每一个人会以任意的顺序记录当天的掉 ...

  2. keycloak~为微信二维码添加动态kc认可的动态state

    本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的. 动态state 在Keycloak中使用 ...

  3. mysql DCL常用命令

    登录数据库: mysql -u root -p 查看本机MySQL中所有的用户 select user ,host from mysql.user; 查看所有数据库: show databases; ...

  4. 【Vue】代理服务配置

    Springboot 后台接口地址 基础路径配置: server: port: 8080 servlet: context-path: /demo 完整路径: localhost:8080/demo ...

  5. 【Vue】树状节点接口 与 级联选择框组件

    原来有一个组织机构的渲染, 我自己写的我自己看也8太明白了: https://www.cnblogs.com/mindzone/p/14888046.html 现在,有一个位置选择,使用这个级联选择器 ...

  6. 【SVN】属性功能配置

    一.配置SVN提交模板 更改SVN提交信息模板 (参考源博客): https://www.cnblogs.com/fairylyl/p/10505833.html 右键属性配置: 新建一项属性,选择[ ...

  7. 【微信小程序】 分包

    1. 什么是分包 分包指的是把一-个完整的小程序项目,按照需求划分为不同的子包, 在构建时打包成不同的分包,用户在使用时按需进行加载. 2. 分包的好处 对小程序进行分包的好处主要有以下两点: ● 可 ...

  8. 【转载】 Tensorflow学习笔记-模型保存与加载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lovelyaiq/article/det ...

  9. mojo编程语言:编译后的mojo二进制执行文件调用python库报错——设置MOJO_PYTHON_LIBRARY变量

    代码: from python import Python fn f() raises: # This is equivalent to Python's `import numpy as np` l ...

  10. 强化学习游戏仿真环境:torcs的安装——自动驾驶、赛车游戏环境

    Ubuntu系统下可以有两种安装方式: 1. 通过系统软件库进行安装,命令: sudo apt install torcs torcs-data 该种安装方式比较简单,容易成功,缺点就是必须要有sud ...