EXE文件安装成windows服务

 srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行。也就是说srvany只是其注册程序的服务外壳,这个特性对于我们来说非常实用,我们可以通过它让我们的程序以SYSTEM账户启动,或者实现随机器启动而自启动,也可以隐藏不必要的窗口,比如说控制台窗口等等。

资源下载

      你可以通过下载并安装Microsoft Windows Resource Kits 获得或者直接在本文下载。

  示例中的控制台程序仅仅是向当前路径不停的写入时间。

  srvany

  测试程序

  测试程序(含控制台项目)

如何使用

      当你获取到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 值为你要作为服务运行的程序启动所需要的参数。

  比如这里是个配置实例,我们这里配置的服务名称是MyService,下面是MyService的安装配置情况: 
   

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

   以上部分来自于 http://mazhihui.iteye.com/blog/1294431 。本文当然不会仅仅是照搬文章,最近在学习批处理,将其中的操作使用批处理来完成。

批处理说明

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

按 Ctrl+C 复制代码

 

按 Ctrl+C 复制代码

  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

总结

  1.按照以上操作即可轻松将程序添加到系统服务中去。

  2.使用场景为,该程序需要开机启动,而且是在Window未登录的情况下。(常规的开机启动应用程序需要输入机器用户名、密码进入到桌面后才启动)

  3.将程序部署成服务后,该程序依然可以双击启动,如果不需要,建议将程序中添加命令行参数判断来禁止双击启动该程序。

  4.在服务的属性中,可以设置其与桌面进行交互,此时Window会提示交互式消息提示,点击后即可显示程序窗体。

   5.如果你的程序是做成安装包,调用安装服务的批处理和调用卸载服务的批处理,则可以放在安装程序和卸载程序的时候去执行,简化用户操作。

 

文件转自https://www.cnblogs.com/codealone/p/3156943.html

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中编写服务程序需要用到Qt的System Services模块。以下是一个简单的示例: ```cpp #include <QtCore/QCoreApplication> #include <QtServiceFramework/QServiceApplication> class MyService : public QObject { Q_OBJECT public: MyService(QObject *parent = nullptr) : QObject(parent) {} public slots: void start() { qDebug() << "MyService started"; } void stop() { qDebug() << "MyService stopped"; } }; int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); MyService myService; QServiceApplication::instance()->setService(&myService); return QServiceApplication::instance()->exec(); } #include "main.moc" ``` 在上面的示例中,我们创建了一个名为MyService的类,继承自QObject。这个类中包含了两个槽函数:start()和stop()。在main()函数中,我们创建了一个MyService的实例,并将其设置为QServiceApplication的服务对象。然后调用QServiceApplication::exec()启动服务。 在使用Qt编写服务程序时,还需要创建一个服务描述文件,用于指定服务的属性和行为。以下是一个简单的服务描述文件示例: ```json { "name": "MyService", "description": "MyService Description", "displayName": "MyService Display Name", "startupType": "auto", "delayedAutoStart": true, "serviceType": "ownProcess", "executable": "MyService.exe", "workingDirectory": "", "serviceArgs": [] } ``` 在上面的示例中,我们指定了服务的名称、描述、显示名称、启动类型、延迟自动启动、服务类型、可执行文件、工作目录和参数等属性。 创建好服务描述文件后,可以使用Qt的命令行工具qtserviceinstall来安装服务,使用qtserviceremove来卸载服务,使用qtservicecontrol来控制服务的运行状态。例如: ```sh qtserviceinstall --service-name MyService --description "MyService Description" MyService.json ``` 安装服务后,可以在服务管理器中启动、停止、暂停、继续或重启服务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值