windows系统将bat脚本配置为系统服务使其在开机用户登录前启动

2018年09月30日 11985点热度 3人点赞

说明:
  有个监控代理软件的bat启动脚本需要配置为windows系统服务使其在服务器开机后用户登录之前自动启动,经过一天研究测试已成功实现。这里记录下配置过程。

  本文演示将一个关闭windows防火墙的bat脚本配置为系统服务,使其能在服务器开机后用户登录之前启动,关闭掉防火墙。这样我们能在服务器开机后ping通服务器IP,即算实验成功!


实现方法:
首先使用BatToExeConverter软件将bat脚本转换成exe程序,然后再使用instsrv.exe和srvany.exe将exe程序注册为系统服务即可。


参考文章:


所需软件下载地址:




一、首先确定bat脚本能正常运行

为了方便测试,这里创建一个只包含关闭windows防火墙的bat脚本,并确认右键以管理员身份运行能正常关闭防火墙






二、安装BatToExeConverter软件,并将bat转换为exe程序

2.1、安装Bat_To_Exe_Converter软件(安装过程就不细说了,下一步就行)




2.2、安装完后打开Bat To Exe Converter软件,界面如下图所示




2.3、点击左上角[Open]按钮,找到我们创建的bat脚本,点击打开




2.4、然后点击上方 [Convert] 按钮,选择转换后exe程序保存位置及名称,点击保存开始转换




2.5、找到我们转换好的exe程序,测试右键以管理员身份运行能正常关闭windows防火墙





三、使用instsrv.exe程序将srvany.exe程序注册为系统服务,并在注册表中对应服务名下创建应用启动项

3.1、在C盘下面新建一个文件夹zcy,将转换好的imzcy.exe程序及下载的instsrv.exe和srvany.exe都复制进去




3.2、打开C:\Windows\System32目录,找到cmd.exe程序,右键以管理员身份运行




3.3、输入cd c:\zcy 进入程序放置的目录;然后使用instsrv.exe程序将srvany.exe程序添加为系统服务

上面添加服务的命令中:StopFirewall为创建的服务名(在本地服务和注册表对应位置显示的名称),srvany.exe需要填写绝对路径并且创建完服务后不能移动和改名。




3.4、然后依次输入下面两条命令在注册表编辑器中创建相应的项和值,以指定开机启动启动程序路径

在注册表中刚才创建的StopFirewall服务下面新建子项名为:Parameters

在刚才新建的Parameters项下面新建值,名称为Application,类型为字符串,值为c:\\zcy\\imzcy.exe即要开机启动的程序路径(路径中\要写两个)




3.5、测试使用net命令启动刚才创建的服务能正常停止Windows防火墙




3.6、启动防火墙并重启服务器






四、验证刚才添加的服务能够在服务器开机后用户登录之前能正常启动

服务器重启过程中ping不通,启动完成显示用户登录界面后大概3秒左右能ping通。说明刚新增的自定义服务已能开机自启动。实验成功!





五、常见问题

5.1、启动创建的服务时报错:服务没有响应控制功能。


windows使用net命令启动刚才创建的服务时报错:服务没有响应控制功能 或者: 错误1053: 服务没有及时响应启动或控制请求 一般是因为创建服务时没有指定后面程序为srvany.exe造成的

解决方法:
创建服务时,后面程序一定要是srvany.exe,并且创建好服务后就不能移动位置。可以重新创建下服务




5.2、启动服务时报错:服务无法启动、服务没有报告任何错误

出现上面的错误,一般是创建服务时没有指定好启动程序的位置或者创建好服务后移动了启动程序的位置造成的。

解决方法:
1、检查创建启动程序的配置路径及该目录下是否存在相应文件,如果有问题修改注册表中启动程序路径即可。




5.3、服务重启后不能自动启动

设置开机自启动的程序不能存放在以下目录,不然会因为windows权限问题导致启动不了。

建议就在C盘根目录下新建一个文件夹放进去即可。




Chen

健康 · 开心 · 做自己