[每周一更]-(第28期):Windows服务自启动设置
需求:有时候有些软件,想在开机后自启动,但是由于屏幕需要录入密码,但是普通开机启动的应用,需要在录入密码进去Windows界面才能启动,但是
不用解锁屏幕但需要运行的应用还是有的,比如一些软件远程服务软件,那么这篇文章就能解决此类问题;
解决:通过将软件注册为Windows的服务,那么在开机后即可跟操作系统一样一起启动,具体细节如下:
一、Windows自带的sc命令
0、进去windows的cmd,windows+R-》cmd 使用管理员账户打开
1、注册bat服务或exe服务(bat针对内容语言强规则要求)
sc create Frpc binpath= "C:/frp/startfrpc.bat" start= demand displayname= "frpc" //手动
sc create Frpc binpath= C:/frp/startfrpc.bat start= auto displayname= "frpc" //自动
sc create frpc binpath= D:/frps/frp/frpc.exe start= auto displayname= "frpc"
2、net start frpc
3、任务管理器->服务->找到frpc
4、命令行进入服务列表:windows+R -> services.msc
5、列出所有服务: sc queryex type=service state=all
6、删除具体的服务: sc delete frpc
由于有些权限限制,该操作为报错:错误1053:服务没有及时形影启动或控制请求,暂未解决,遂采用如下nssm来封装服务
二、使用NSSM将exe封装为服务
NSSM 是一个Windows的服务管理器,以安装客户端frpc为例子
NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。它的特点如下:
- 支持普通exe程序(控制台程序或者带界面的Windows程序都可以)
- 安装简单,修改方便
- 可以重定向输出(并且支持Rotation)
- 可以自动守护封装了的服务,程序挂掉了后可以自动重启
- 可以自定义环境变量
这里面的每一个功能都非常实用,使用NSSM来封装服务可以大大简化我们的开发流程了。
- 开发的时候是一个普通程序,降低了开发难度,调试起来非常方便
- 安装简单,并且可以随时修改服务属性,更新也更加方便
- 可以利用控制台输出直接实现一个简单的日志系统
- 不用考虑再加一个服务实现服务守护功能
我觉得它还可以需要增加的一个功能是将输入输出重定向为一个tcp连接,这样可以通过telnet的方式实现程序的交互了,那样就更加好用了。
下载地址:https://nssm.cc/download
教程:https://clear-jackrabbit-ac2.notion.site/Windows-Service-9a7e939012dd4f04a0998090e3e58b04
服务管理:
服务管理主要有启动、停止和重启,其命令如下:
启动服务:nssm start <servicename>
停止服务:nssm stop <servicename>
重启服务: nssm restart <servicename>
当然,也可以使用系统自带的服务管理器操作和使用系统的命令。
修改参数:
NSSM安装的服务修改起来非常方便,命令如下:
nssm edit <servicename>
会自动启动操作界面,直接更改即可。
服务删除:
服务删除可以使用如下命令之一:
nssm remove <servicename>
nssm remove <servicename> confirm
功能没有大的区别,后面的命令是自动确认的,没有交互界面。
1、安装,名称frpc
nssm install frpc
2、卸载
nssm remove frpc
3、查询状态
nssm status frpc
4、重启
nssm restart frpc
问题汇总
1、nssm 启动frpc ,在开机自启动服务失败
如果您使用了 NSSM 来创建 Windows 服务并将其设置为开机自启动,但服务无法在系统启动时自动启动,则可能是以下原因导致:
- 用户权限问题:如果您在创建服务时使用了受限制的用户帐户,例如本地用户帐户,服务可能无法在系统启动时以该用户身份启动。尝试在创建服务时使用管理员权限运行 NSSM 并将服务设置为 LocalSystem 帐户,这样它将以系统权限运行并在系统启动时自动启动。
- 依赖项问题:如果您的服务依赖于其他服务或程序,但这些依赖项无法在系统启动时可用,则您的服务可能无法启动。尝试将服务的启动类型设置为“自动(延迟启动)”,这将在系统启动后一段时间后启动服务,以便它可以等待所需的依赖项可用。
- NSSM 配置问题:您的 NSSM 配置可能有误。尝试检查 NSSM 配置文件中的参数和路径是否正确,并确保它们指向正确的可执行文件和服务路径。
- 系统问题:在某些情况下,系统问题可能会导致服务无法在启动时启动。尝试重启系统并检查系统日志以查看是否有与服务启动相关的错误信息。
如果您仍然无法解决问题,请尝试使用其他工具来创建和管理 Windows 服务,例如 Windows 自带的 sc.exe 命令行工具或第三方工具。
2、怎么将服务设置为 LocalSystem 帐户
您可以按照以下步骤将 NSSM 创建的服务设置为 LocalSystem 帐户:
- 打开命令提示符或 PowerShell,并使用管理员权限运行。
- 使用 nssm.exe install 命令安装您的服务。例如,nssm.exe install MyService。
- 打开服务管理器,找到您刚刚创建的服务,并右键单击它。
- 选择“属性”,然后切换到“登录”选项卡。
- 选择“此账户”,并输入“NT AUTHORITY\LocalSystem”作为帐户名称。
- 留空密码和确认密码字段。
- 单击“应用”并关闭服务属性窗口。
现在,您的服务将使用 LocalSystem 帐户身份运行,并且应该在系统启动时自动启动。请注意,LocalSystem 帐户是具有最高权限的帐户之一,因此请确保您的服务不会以危险的方式使用这些权限。
三、任务计划
在 Windows 电脑中,有一个【计划任务程序】,很少被用到,然而,对于高效人士来说,它具有很多的妙用,比如自动清理回收站、自动开关软件、自动批量处理文件等等。
四、winsw
类似于nssm的注册服务的工具
https://github.com/winsw/winsw/releases
直接到想要注册为服务的软件根目录下运行如下:
//注册服务
winsw.exe install
//卸载服务
winsw.exe uninstall
//启动服务
winsw.exe start
//停止服务
winsw.exe stop
//重启服务
winsw.exe restart
//查看状态
winsw.exe status
五、其他一些关机的操作
windows 批处理bat,设置定时关机:
https://segmentfault.com/a/1190000017189422?utm_source=sf-similar-article
意外断电后重新来电时自动开机
在主板BIOS中有一个“Power Management Setup(电源管理设置)”中,有个“POWER ON AFTER PWFAIL”或“pwron after pw-fail”设置项,
其选项有三,分别为“On(开机)”、“Off(关机)”和“Former-Sts(恢复到到断电前状态)”,将此选项设置为 “On”,当你的电脑意外断电后重新接通电源时电脑就会自动开机。
根据BIOS版本和主板的不同,此项设置也会有所不同,具体请参见主板说明书。但建议大家最好还是将此选项设置为“Off”,不要用此功能自动开机。
因为这种功能极其不稳定,所以它很可能导致在正常断电情况下,一接通电源电脑就自动开机;或是打开插线板开关时,也有可能会使电脑自动开机。因此对主板会有所损害。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!