首页 > 系统相关 >windows把exe设置成服务运行;如何将exe注册为Windows服务,直接从后台运行

windows把exe设置成服务运行;如何将exe注册为Windows服务,直接从后台运行

时间:2022-11-07 23:00:46浏览次数:70  
标签:bat exe 服务 windows echo Windows 名称 rem

解决方案:instsrv+srvany

仅使用instsrv+srvany来实现。(使用window自带命令注册,如果exe文件不符合要求是启动不了)

什么是instsrv+srvany

Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。
这两个软件都包含在Windows NT Resource Kit里,如果你没有,也可以在这里下载
srvany.exe可用于将任何EXE程序作为Windows服务运行。
也就是说srvany只是其注册程序的服务外壳,这个特性对于我们来说非常实用,
我们可以通过它让我们的程序以SYSTEM账户启动,或者实现随机器启动而自启动,也可以隐藏不必要的窗口,比如说控制台窗口等等。

如何使用:

 

当你获取到srvany后并决定将某程序作为服务启动后,

请先将srvany安装为系统服务,具体的安装方法有很多,

这里使用instsrv,语法如下: 

安装 instsrv ServiceName C:\Windows\System32\srvany.exe   
卸载 instsrv ServiceName remove 

(ServiceName 即你自己定义的服务名称,可以是要作为系统服务启动的应用程序的名称。)

二、配置注册表及应用地址 

安装完毕后,我们需要对srvany.exe进行配置,
以便于能够加载我们指定的程序,
配置的方法是,开始 - 运行 - regedit,
打开注册表,定位到下面的路径。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
如果该服务名下没有Parameters项目,
则对服务名称项目右击新建项,
名称为Parameters,
然后定位到Parameters项,
新建以下几个字符串值。
名称 Application 值:你要作为服务运行的程序地址。
名称 AppDirectory 值:你要作为服务运行的程序所在文件夹路径。
名称 AppParameters 值:你要作为服务运行的程序启动所需要的参数。

比如这里是个配置实例,我们这里配置的服务名称是NGINX,其余是nginx的安装配置情况。

 

便捷方法---导入注册表的方法:

当然还有一个比较简单的做法,那就是将下面的文本保存为*.reg文件,然后双击导入注册表。

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\服务名称\Parameters]

"Application"="值为你要作为服务运行的程序地址"
"AppDirectory"="值为你要作为服务运行的程序所在文件夹路径"
"AppParameters"="值为你要作为服务运行的程序启动所需要的参数" 

至此,MyService已经安装成windows服务了,在Window服务项中即可查看。

 ------------------------------------------------------------------------------------------------------------------

批处理自动化方法:

1. run-install.bat 封装了安装服务的操作(上面有提到)。需要传入参数有服务名称,程序名称。

@echo off

rem 参数依次为 服务名称 可执行文件名称
@echo 服务名称:%1
@echo 程序名称:%2

rem 定义需要运行的程序路径
set curExe=%~dp0%2
rem 定义注册表路径
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\
rem 定义srvany.exe文件路径
set sourcePath=%~dp0srvany.exe

rem 进入当前目录
cd /d "%~dp0"
rem 安装引导服务
instsrv %1  "%sourcePath%"
@echo 服务添加完成

rem 添加注册表语法: reg add 注册表路径 /v 项名称 /t 值类型 /d 数据 /f 表示强行修改不提示

rem 名称 Application 值为你要作为服务运行的程序地址 /d对应的参数有斜杠不是为了转义引号,而是路径还有斜杠,默认将引号转义了,额外添加斜杠是为了保留引号
reg add %regpath% /v AppDirectory /t REG_SZ /d "%~dp0\" /f

rem 名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径
reg add %regpath% /v Application /t REG_SZ /d "%curExe%" /f

rem 名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数
reg add %regpath% /v AppParameters /t REG_SZ /f
@echo 注册表添加完成

2.install.bat 命令含义:进入当前目录,调用当前目录下的run-install.bat文件,并传入参数,完成服务安装。服务名:MyService 执行程序:Console.exe
@echo off
cd /d %~dp0
call run-install.bat  MyService Console.exe
pause

3.run-del.bat 简单封装了卸载服务的操作,传入服务名称即可。

@echo off

rem 参数依次为 服务名称
@echo 服务名称:%1

rem 进入当前目录
cd /d %~dp0
rem 卸载引导服务
instsrv %1 remove

4.del.bat 命令含义:进入当前目录,调用当前目录下的run-del.bat文件,并传入参数,完成服务卸载。服务名:MyService
@echo off
cd /d %~dp0
call run-del.bat  MyService
pause

 ------------------------------------------------------------------------------------------------------------------

安装服务批处理文件
install.bat

@echo off
cd /d %~dp0
call run-install.bat  你的服务名称 你要做成服务的可执行文件.exe
pause

run-install.bat

@echo off

rem 参数依次为 服务名称 可执行文件名称
@echo 服务名称:%1
@echo 程序名称:%2

rem 定义需要运行的程序路径
set curExe=%~dp0%2
rem 定义注册表路径
set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服务名称\Parameters\
rem 定义srvany.exe文件路径
set sourcePath=%~dp0srvany.exe

rem 进入当前目录
cd /d "%~dp0"
rem 安装引导服务
instsrv %1  "%sourcePath%"
@echo 服务添加完成

rem 添加注册表语法: reg add 注册表路径 /v 项名称 /t 值类型 /d 数据 /f 表示强行修改不提示

rem 名称 Application 值为你要作为服务运行的程序地址 /d对应的参数有斜杠不是为了转义引号,而是路径还有斜杠,默认将引号转义了,额外添加斜杠是为了保留引号
reg add %regpath% /v AppDirectory /t REG_SZ /d "%~dp0\" /f

rem 名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径
reg add %regpath% /v Application /t REG_SZ /d "%curExe%" /f 

rem 名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数
reg add %regpath% /v AppParameters /t REG_SZ /f
@echo 注册表添加完成

注意* 坑来了,单看install.bat文件,

你可能只注意要改“你的服务名称”和“你要做成服务的可执行文件.exe”,

但是光改这两个地方是不行的,

还要改run-install.bat里面的

set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\你的服务名称\Parameters\ 这一行里面的“你的服务名称”。

删除服务批处理文件
del.bat

@echo off
cd /d %~dp0
call run-del.bat  你的服务名称
pause

run-del.bat

@echo off

rem 参数依次为 你的服务名称
@echo 你的服务名称:%1

rem 进入当前目录
cd /d %~dp0
rem 停止服务
net stop %1
rem 卸载引导服务
instsrv %1 remove

 

 

 

windows把exe设置成服务运行;如何将exe注册为Windows服务,直接从后台运行

https://www.cr173.com/soft/64394.html

https://javaforall.cn/144148.html

https://javaforall.cn/135150.html

https://cloud.tencent.com/developer/article/2095312

https://www.cnblogs.com/zh672903/p/10981931.html

https://blog.csdn.net/lengjunguan/article/details/126645902

https://blog.csdn.net/xuzishe/article/details/126749523

https://blog.csdn.net/oYangYongJie/article/details/125189117

标签:bat,exe,服务,windows,echo,Windows,名称,rem
From: https://www.cnblogs.com/firespeed/p/16867825.html

相关文章

  • 为可执行程序(sys/exe)生成公有调试符号
      自Win10推出以来,Windows的更新频度变为每年2次(赶上隔壁Ubuntu的更新节奏了)。每次更新,MS都会提出一堆新要求。对于2018年RS4的更新,MS要求所有提交到WU(WindowsUpdat......
  • Windows API与MFC的关系
    Windows应用程序编程接口(WindowsApplicationProgrammingInterface),程序员想编写Windows平台上的软件,必须借助WindowsAPI,Win32API也就是MicrosoftWindows32位平台的应......
  • 偷换windows窗口过程
      ​​Windowuser32子动态库控件封装和消息分发浅析​​ 这篇文章提到窗口程序在分发消息时会依次调用:UserCallWinProcCheckWow--->_InternalCallWinProc-->各个窗......
  • Linux 挂载Windows共享文件夹和NAS存储
    summary:[Linux挂载共享存储]概述将Windows共享文件夹和NAS存储挂载至Linux。Linux系统环境:CentOS挂载共享存储查看外部主机共享了哪些目录smbclient-L//10.1......
  • windows防火墙支持FTP服务的设置方法
    2003server用于提供web和ftp服务,通过互联网用flashfxp实现远程上传网页。如果关闭防火墙,ftp上传下载正常,但启用windows防火墙后就不行,即使把web、ftp等服务列为例外也不行......
  • windows设备停用启动杂记
      公司(OEM厂商)的电脑升级到win10RS2RTM后,发现有部分MSinbox驱动在电源事件后会出现黄标的现象(ErrorCode=43--QueryRemove失败)甚至driverlost。MS虽然承认是他们......
  • 在Windows 2000 Server系统光盘中集成SP4更新程序
    Windows2000Server操作系统以其稳定的性能依然服役于很多作为服务器的计算机中,目前其最新版本已经集成了SP4累积更新程序。本教程将介绍在未集成任何ServicePack的Wind......
  • OpenStack的Windows镜像制作
    基础环境安装yumgroupinstallVirtualization"VirtualizationClient"yuminstalllibvirt启动服务systemctlenablelibvirtdsystemctlstartlibvirtdsystemctl......
  • Windows常用快捷键
    Windows常用快捷键01-Ctrl系列快捷键Ctrl+C:复制Ctrl+V:粘贴Ctrl+A:全选Ctrl+X:剪切Ctrl+Z:撤销Ctrl+S:保存Ctrl+N:快速创建同级界面Ctrl+W:关闭当前界面......
  • Windows 环境下 jfinal-undertow 启动脚本
    @echooffrem启动入口类setMAIN_CLASS=com.dsideal.StartremJava命令行参数,根据需要开启下面的配置,改成自己需要的,注意等号前后不能有空格remset"JAVA_OPTS......