将应用程序注册成后台服务程序

2024-03-07 18:58

本文主要是介绍将应用程序注册成后台服务程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

将任何应用程序注册成后台服务程序,即:系统启动后该程序可以自动启动,并且在前台不要出现运行窗口。
解决办法:需要使用Windows提供的两个工具instsrv.exe和srvany.exe。(Windows 2003资源工具包带有)
  • instsrv:把win32程序变成系统服务。
  • srvany:将一个应用程序注册为一个服务。即注册一个系统服务,来启动要运行的应用程序。
基本用法:
  • instsrv  [服务名]  [应用程序绝对路径]  (增加服务)
  • instsrv  [服务名]  REMOVE  (删除服务)
  • instsrv  [服务名]  [srvany的绝对路径]
一、应用程序具有服务功能(能响应服务控制台的查询请求)
使用instsrv.exe,指令格式:instsrv [服务名] [应用程序路径]
执行完成后,在注册表项“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”中自动增加项[服务名],并在其下成功添加各个键值:
“DisplayName”   =服务显示名     (字符串值)
“Description”   =服务描述       (字符串值)
“ImagePath”     =应用程序路径   (可扩充字符串值)
“ObjectName”    =”LocalSystem”  (字符串值)
“Type”          =10(16进制)     (dword值)
“Start”         =2(16进制)      (dword值)
“ErrorControl”  =1(16进制)      (dword值)
如果不使用instsrv.exe,同样可以在注册表中手工添加实现:在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\”下新建一个项,项名为要显示的服务名,并在其下新建以上各个键,填入键值。
这样,一个服务就增加成功了,运行services.msc在服务管理器中可以看到,重启电脑就会自动启动服务。
二、应用程序不具有服务功能(不能响应服务控制台的查询请求)
并不是所有程序都适合做系统服务,即便注册成系统服务后也是无法启动,这时就需要用到srvany.exe。
具体步骤如下:
  1. 注册服务:  path\instsrv  [服务名]  path\srvany.exe (同样第一种情况,把[应用程序路径]换为[srvany路径]。)
  2. 运行regedit打开注册表,进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服务名]
  3. 新建一个项,项名为Parameters,在项Parameters下新建如下建值:
  4. 右键-新建-字符串值Application,值数据填入[应用程序绝对路径],如:D:\RuijieSupport\MentoHUST\MentoHUST.exe
  5. 右键-新建-字符串值AppDirectory,值数据填入[应用程序工作目录],如:  D:\RuijieSupport\MentoHUST\
  6. 运行services.msc打开服务管理,找到刚添加的服务,在属性-登录中,勾选“允许服务与桌面交互”。
  7. 启动服务。
说明:
  1. 执行instsrv命令如果出现出错提示:- The fully qualified path to the .EXE must be given。则说明需要写完整的路径,并最好用引号包含。如:C:\Program Files\Windows Resource Kits\Tools> instsrv MentoHUST “C:\Program Files\Windows Resource Kits\Tools\srvany.exe”
  2. 在Parameters里还可以添加很多键值:
    AppDirectory  工作目录
    AppParameters  你的应用程序的参数。
    AppEnvironment  运行环境变量。
三、以上方法同样可以采用inf文件实现。
inf文件格式:
增加一个服务:
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
AddService=MentoHUST,,My_AddService_Name
[My_AddService_Name]
DisplayName=MentoHUST Replace Ruijie
Description=锐捷替代
ServiceType=0×10
StartType=2
ErrorControl=0
ServiceBinary=%11%\MentoHUST.exe
删除一个服务:
[Version]
Signature=”$WINDOWS NT$”
[DefaultInstall.Services]
DelService=MentoHUST
增加服务的inf文件创建后,保存,并执行命令:
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 path\inf文件名
执行完成后,同样会看到:在注册表中看到新增的服务项MentoHUST和键值,在服务管理器会看到新增的服务MentoHUST。
遇到不具有服务功能的应用程序,还是要打开注册表,接着上述操作,在创建的服务项下新建项Parameters,并添加键值。
说明:
  1. ServiceType 服务类型:0×10为独立进程服务,0×20为共享进程服务(比如svchost);
  2. StartType 启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启动,3 手动启动,4 禁用。(注意,0和1只能用于驱动程序)
  3. ErrorControl 错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。
  4. ServiceBinary 服务程序位置:%11%表示system32目录,%10%表示系统目录(WINNT或Windows),%12%为驱动目录system32\drivers。也可以不用变量,直接使用全路径。
  5. 服务名MentoHUST后面有两个逗号,因为中间省略了一个不常用的参数flags。
  6. Description、ServiceType、StartType、ErrorControl四项是必须要有的,还有LoadOrderGroup、Dependencies等就不做详述了。
使用inf文件的优势:
  1. 和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。
  2. 导出一个系统自带服务的注册表项,如果数据类型是REG_EXPAND_SZ,会看到一堆16进制代码,可读性很差。手动导入注册表以增加服务时,这样定义ImagePath显然很不方便,而用REG_SZ代替又会有些问题,比如不能用环境变量。用inf文件完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。
  3. inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。
  4. AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。
四、通过修改注册表来添加服务: 
在注册表编辑器,展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" ,在右侧窗格中显示的就是本机安装的服务项。如果要新建服务,只须点击"编辑→新建→项" ,然后为此项命名,如"test";然后右击该项,选择"新建→字符串值"或"新建→Dword值"即可。添加一个服务项目具体需要添加的键值如下: 
"DisplayName",字符串值,对应服务名称; 
"Description",字符串值,对应服务描述; 
"ImagePath",字符串值,对应该服务程序所在的路径;
"ObjectName",字符串值,值为"LocalSystem",表示本地登录;
"ErrorControl",Dword值,值为"1"; 
"Start",Dword值,值为2表示自动运行,值为3表示手动运行,值为4表示禁止; 
"Type",Dword值,应用程序对应10,其它对应20。 
   另外,还要在"test"项下新建一个"Enum"项。如果有些必须通过srvany来加载的还必须添加另外的Parameters子项在该项中提供详细的要加为服务的程序所在的路径。而上面的那个路径就需要指到srvany所在的路径。 

这篇关于将应用程序注册成后台服务程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784496

相关文章

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

c++11工厂子类实现自注册的两种方法

文章目录 一、产品类构建1. 猫基类与各品种猫子类2.狗基类与各品种狗子类 二、工厂类构建三、客户端使用switch-case实现调用不同工厂子类四、自注册方法一:公开注册函数显式注册五、自注册方法二:构造函数隐形注册总结 一、产品类构建 1. 猫基类与各品种猫子类 class Cat {public:virtual void Printer() = 0;};class

Java Web应用程序的推荐目录结构

以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。 找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个: ├── pom.xml└── src├── main│ ├── java│ │ └── myg

adb shell 执行后台程序后断开adb后台进程被结束的解决办法

环境:Android 版本 Android8 通常让程序后台执行就是在命令 最后加上 &即可,但是在Android 8上实验发现,程序的确后台了,但是拔掉USB线再连接上发现进程已结束。不确定Android早期版本是否存在此问题。 参考网上一些Linux方法,如加nohup 仍然无效,还是会结束。看来Android adb shell 与 Linux shell 还是有一定区别。 后来在网上

用ajax json给后台action传数据要注意的问题

必须要有get和set方法   1 action中定义bean变量,注意写get和set方法 2 js中写ajax方法,传json类型数据 3 配置action在struts2中

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

Marsview这么好用?快速搭建后台不是梦

Marsview竟然这么好用?快速搭建后台不是梦! 还在为项目开发而焦头烂额吗?别再纠结了,Marsview来了!这个面向后台管理系统的低代码平台,不仅让你轻松搭建项目,还能让你成为团队中的“流量担当”。本文将带你了解 Marsview 的核心功能、技术架构,以及如何快速上手。 软件简介 Marsview 是一款专为中后台管理系统设计的低代码可视化平台,能够帮助开发者快速完成项目搭建和

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc