【熊说银企FAQ】银企平台如何设置为服务并且开机自启(Windows系统-WinSW)原创
金蝶云社区-福分小熊
福分小熊
0人赞赏了该文章 627次浏览 未经作者许可,禁止转载编辑于2022年11月13日 10:26:50

关键词:银企平台、开机自启、自启动、服务、WinSW(Windows Service Wrapper)


更新日志:

20221107初稿

20221112新增关于补丁更新场景注意事项,支持电子回单代理程序设置为服务(但是还需要手动到回单代理程序网页端启动)


支持:银企平台服务(OSGI服务、TOMCAT服务、前置机代理程序服务)Windows安装设置为服务,并设置为开机自启

注意:电子回单代理程序如果设置为服务,每次更新到需要重装下WinSW


1.问题描述

问题现象、报错信息

银企实施与运维过程中,银企平台支持部署在Linux和Windows操作系统中。但在选择Windows操作系统作为银企平台服务器操作系统时,对于银企平台、电子回单代理程序、前置机代理程序,都是通过命令行方式运行。如何开机自启动呢?


针对一些图形/GUI界面的应用程序一样,比如QQ、火绒等,可以添加为开机启动项。


但是如果是运行命令行方式的程序时,有个笨的方法就是把程序的快捷方式添加到开机启动项中(如:【熊说银企】银企平台程序如何开机自启(Windows系统)-需要登录系统才会启动),但是有两点不方便的地方:

  • 需要登录操作系统才会启动

  • 开机启动后,你会发现,会一直显示CMD窗口(如下图所示),如果银企运维人员误关了CMD窗口,程序关了就会停了

image.png


2.原因分析

分析问题出现的可能原因(视情况而定)

其实Windows系统自带后台程序管理的功能,也就是我们经常用到的服务


但是Windows的服务只有程序的开发者(pick下银企平台开发团队老师)写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。


对于一般的命令行程序来说,没办法利用服务。目前银企平台及相关程序暂不支持设置为服务的方式。


希望银企平台团队老师可以吸收到这边帖子的内容,后续银企平台迭代,可以提供服务启动的方式(针对进阶版用户使用)


3.解决方法

解决思路/操作步骤

我们如何把银企平台程序设置为服务呢?

针对bat、exe等文件设置为服务,我们可以使用bat、nssm等工具将此类文件设置为Windows服务,此处我们介绍使用WinSW这个工具。


WinSW,它就是一个可以将Windows上的任何一个程序注册为服务的工具。同样也可以支持卸载该服务。

支持开源免费使用。

官方介绍:Windows Service Wrapper

WinSW is an executable binary, which can be used to wrap and manage a custom process as a Windows service.


3.1工具下载

下载地址(来源于github):https://github.com/winsw/winsw/releases

image.png


上图中涉及到的文件下载地址:

https://github.com/winsw/winsw/releases/download/v3.0.0-alpha.10/WinSW-x64.exe

相关程序源码:

https://github.com/kohsuke/winsw


下载完之后最好把文件改成一个比较短小的名字,例如:WinSW.exe 方便后面输入命令时使用。

image.png



3.2修改配置文件

银企平台相关服务的配置文件已存放到本文附件可供自取修改使用

我们需要编写一个和程序同名的XML文件作为WinSW的配置文件。

具体配置文件模板可以参考附件提供的XML配置文件

配置文件说明

image.png

*XML配置文件中的绿色字体,主要为解释说明,具体配置时可删除。

具体如何配置详细截止可以参考:

【WinSW】工具介绍 - 腾讯云开发者社区-腾讯云 (tencent.com) 中的

WinSW配置说明(翻译xmlConfigFile.md)


具体配置参数简介

<service>  
--设置服务id
<id>myapp</id>  
--设置服务名称 一般和id一样
<name>MyApp Service (powered by WinSW)</name>  
--类似于服务说明、备注>
<description>This service is a service created from a sample configuration</description> 
--这里输入软件的路径,此处建议可以设置执行文件的绝对路径。
<executable>%BASE%\myExecutable.exe</executable>  
--设置优先事项
<priority></priority>  
--stoptimeout:停止超时时间,默认“15 sec”  
<stoptimeout>15 sec</stoptimeout>  
--是否在停止子进程之前终止父进程,默认true  
<stopparentprocessfirst>true</stopparentprocessfirst>  
--Boot:设备驱动程序由操作系统加载程序启动。此值仅对驱动程序服务有效。
--System:设备驱动程序由操作系统初始化过程启动。此值仅对驱动程序服务有效。
--Automatic:自动,服务控制管理器将在系统启动期间自动启动服务。
--Manual:手动,当进程调用StartService方法时,由服务控制管理器启动的服务。
--Disabled:禁用,无法再启动的服务。
--默认值为Automatic  
<startmode>Automatic</startmode>  
--指定多长时间内服务应该对SetServiceStatus函数进行下一次调用,否则会被标记为无响应,默认“15 sec”  
<waithint>15 sec</waithint>  
--服务两次调用SetServiceStatus函数的间隔时间,默认“1 sec”  
<sleeptime>1 sec</sleeptime>  
<log mode=""></log>
</service>



比如我设置银企平台服务(ebservice750\ebservice\windows_startup_in_console.bat

<service>
    <id>ebg</id>
    <name>ebg</name>
    <description>金蝶银企平台osgi</description>
    <executable>E:\06_ERP\ebservice750\ebservice\windows_startup_in_console.bat</executable>
    <priority>Normal</priority>
    <stoptimeout>15 sec</stoptimeout>
    <stopparentprocessfirst>true</stopparentprocessfirst>
    <startmode>Automatic</startmode>
    <waithint>15 sec</waithint>
    <sleeptime>1 sec</sleeptime>
    <log mode="append">
        <!--
    <setting1/><setting2/>
  -->
    </log>
</service>


设置银企平台对应TOMCAT(ebservice750\apache-tomcat-6.0.20\bin\startup.bat

<service>
  <id>ebgtomcat</id>
  <name>ebgtomcat</name>
  <description>金蝶银企平台tomcat</description>
  <executable>E:\06_ERP\ebservice750\apache-tomcat-6.0.20\bin\startup.bat</executable>
  <priority>Normal</priority>
  <stoptimeout>15 sec</stoptimeout>
  <stopparentprocessfirst>true</stopparentprocessfirst>
    <startmode>Automatic</startmode>
    <waithint>15 sec</waithint>
    <sleeptime>1 sec</sleeptime>
  <log mode="append">
    <!--
    <setting1/>
    <setting2/>
  -->
  </log>
</service>


3.3注册服务

配置文件编写完之后,将配置文件与WinSW.exe放在同一目录中。注意对应WinSW.exe的配置文件名称应该是WinSW.xml。此时,WinSW.exe、WinSW.xml以及你的应用程序应该都是在同一目录中。然后用管理员权限打开一个命令提示符窗口,cd进入到应用程序所在目录,可以通过输入下面的命令来进行控制应用程序对应的服务:


winsw install 安装服务
winsw uninstall 卸载服务
winsw start 开启服务
winsw stop 停止服务
winsw restart 重新启动服务
winsw status 检查服务的当前状态
winsw refresh 刷新服务属性而不是重新安装

此处的winsw要结合自己把下载到的WinSW重命名成什么了来定,比如命名成别的,就是要写被的开头。

image.png


此处做下演示示例,比如我把银企平台OSGI和TOMCAT设置为服务自启动

银企平台OSGI

image.png


管理员模式打开CMD

image.png


银企平台Tomcat

image.png

image.pngimage.png


3.4启动服务

此时进入服务界面(WIN+R运行输入services.msc)

image.png

image.png


浏览器中输入127.0.0.1:5389

即可正常访问,如下图所示

image.png




3.5常见问题(待进一步解决)

启动TOMCAT服务时提示:

本地计算机上的 ebgtomcat服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。

image.png

不太懂为啥会出现这个,但是TOMCAT时正常



3.6后续相关(待补充)

涉及到银企平台升级补丁、私包时如何处理解决?

银企平台升级时需要手动把此处的服务停止,补丁安装后再手动启动

image.png


回单代理程序还需要多一步,上网页端启动

image.png


4.应用小结

注意事项;补充说明(视情况而定)

下载WinSW-设置配置文件-CMD安装服务



参考文档

Windows中使用WinSW工具进行服务的安装_qubernet的博客-CSDN博客

【WinSW】工具介绍 - 腾讯云开发者社区

WinSW把Windows程序变成服务并且开机自启动!! - 知乎




赞 0