服务器上部署了像素流服务器,但是有时候因为显卡未及时启动,部分程序卡bug,系统更新等等原因,服务器经常会异常重启,无法随时跟踪到服务器什么时候重启了导致应用程序没起,于是决定搞一个开机启动,自动启动我们的应用程序,这样再也不用手动维护了,说干就干。
核心步骤
具体操作
1.下载环境组件
服务环境文件 Instsrv.exe、Srvany.exe 网盘下载地址,我们可以借助这两个文件吧我们自己开发的应用安装到系统里,然后用开机时拉起我们的程序运行
链接:pan.baidu.com/s/1DFC5q6bT… 提取码:45ca
2.cmd环境配置
找到这两个文件所在地址,我放在E盘下的autoStart文件夹下,命令行格式如下图所示打开命令行CMD,输入“%path%\instsrv ServerName %path%\srvany.exe” 后回车;,UeServer就是我们自己给应用程序起的服务名称,命令行执行后出现下面服务成功添加,说明添加服务名称的操作成功执行
3.注册表配置
win+r ,运行中输入: regedit
在下面路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services找到刚刚起的UeServer服务
- UeServer 右键新建项 Parameters
- Parameters 右键新建字符串值AppDirectory (用来存放应用程序所在文件夹路径)
- Parameters 右键新建字符串值Application (要执行的应用程序exe或者批处理bat地址)
- Parameters 右键新建字符串值AppParameters (启动程序需要的参数,没有可不填值) 配置完的注册表如下图所示
4.服务项配置
win+R打开运行,输入services.msc服务控制面板,找到UeServer(这个名称是上一步新建的服务名称) 右键属性
1.登录,勾上允许服务与桌面交互
2.常规
这里选择自动(延迟启动) ---很重要,
我之前按照上面的步骤做了,但电脑重启后,主服务显示正在运行,但是个别子服务没有起起来,比如nginx。还需要手动重新启动服务,服务才真正运行发送数据,后来找了一圈才找到,需要用延时启动,程序要比网卡晚启动才可以,所以这里的配置改为自动(延迟启动)
然后应用,直接重启电脑,发现没有登录服务器服务也可以正常调用,完美实现
没有UI操作界面
服务虽然正常了,但是登入服务器发现,整个服务界面都没展示出来,打开任务管理器看到主服务和子服务都已经正常启动,应该是运行在不同的session(会话)下的原因,可以用任务管理器看到,服务都是运行在session 0 下面,我们登录用户运行在别的session会话下面,session 0这个会话下的程序由于session隔离,看不到界面的。因为从系统安全机制考虑,没有登入桌面实际用户也是不需要看到界面的,开机自启动的后台应用有很高的系统权限,默认就只会在后台运行,不展示ui防止误操作。
虽然看不到界面,但是服务在跑也解决了99%的问题,再也不用担心服务器重启服务停掉的问题了。如果要关掉应用程序,可以在任务管理器关闭相应服务即可
扩展(登入桌面后自动开启应用程序)
如果不需要服务器重启里面后台启动服务,可以直接把应用程序的批处理bat放到开机启动项即可
运行下面命令,进入开机启动文件夹,放入启动应用程序的bat文件,重启电脑登入桌面,发现可以自动启动应用程序(这种方式是带程序界面的噢)