注册 登录

清河洛

使用winsw让任何Windows程序都能运行为服务

qingheluo2020-12-02清河洛500
很多时候我们需要在windows下开机运行某些服务程序:我们可以使用自带的服务功能,但是只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。我们还可以使用bat脚本,把脚本添加开机启动,缺点是开机后会显示一个命令行窗口且这个窗口不能关闭。而winsw就是一个可以将Windows上的任何一个程序注册为服务的开源软件。软件下载地址:https://github.com/winsw/winsw下载对应.NET版本的程序,然后创建一个对应的xml格式的配置文件,使用命令行进行安装:安装服务winsw install [<path-to-config>...

很多时候我们需要在windows下开机运行某些服务程序:我们可以使用自带的服务功能,但是只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。我们还可以使用bat脚本,把脚本添加开机启动,缺点是开机后会显示一个命令行窗口且这个窗口不能关闭。

而winsw就是一个可以将Windows上的任何一个程序注册为服务的开源软件。软件下载地址:https://github.com/winsw/winsw下载对应.NET版本的程序,然后创建一个对应的xml格式的配置文件,使用命令行进行安装:

安装服务

winsw install [<path-to-config>] [--no-elevate] [--user|--username <username>] [--pass|--password <password>]
    path-to-config:配置文件的路径。如未指定,会在可执行目录中搜索具有相同文件名的.xml文件
    --no-elevate:不会自动触发UAC提示
    --user|--username <username>:指定服务帐户的用户名
    --pass|--password <password>:指定服务帐户的密码
卸载服务
winsw uninstall [<path-to-config>] [--no-elevate]
启动服务
winsw start [<path-to-config>] [--no-elevate]
停止服务
winsw stop [<path-to-config>] [--no-elevate] [--no-wait] [--force]
    --no-wait:不等待服务实际停止
    --force:即使已启动相关服务也停止该服务
停止,然后启动服务
winsw restart [<path-to-config>] [--no-elevate] [--force]
检查服务状态
winsw status [<path-to-config>]
测试服务
winsw test [<path-to-config>] [--no-elevate] [--timeout <timeout>] [--no-break]
    检查服务是否可以在不安装的情况下启动然后停止。
    --timeout <timeout>:指定停止服务之前要等待的秒数。如果未指定或指定为-1,则WinSW会无限期地等待按键。
    --no-break:忽略击键。如果指定,WinSW将等待Ctrl + C。
刷新服务属性,而无需重新安装
winsw refresh [<path-to-config>] [--no-elevate]
自定义包装可执行文件
winsw customize -o|--output <output> --manufacturer <manufacturer>
    -o|--output <output>:指定输出文件的路径。
    --manufacturer <manufacturer>:指定自定义可执行文件的制造商名称。
绘制与服务关联的流程树
winsw dev ps [<path-to-config>] [-a|--all]
    -a|--all:绘制与所有服务关联的流程树。
如果服务已停止响应,则终止该服务
winsw dev kill [<path-to-config>] [--no-elevate]
列出由当前可执行文件管理的服务
winsw dev list

NSSM

NSSM是一个轻量级的工具,专门用于在Windows上运行用户程序作为服务

相比于winsw,NSSM无需额外配置文件,通过GUI或命令行创建和管理服务,操作更加简单

NSSM开源网址:https://github.com/kirillkovalenko/nssm/

NSSM官方网址:https://nssm.cc/

在官网上点击左侧第三个菜单"All builds",点击下载最新版本,在"2017-04-26"时间之前的版本不支持WIN10等更新的系统

NSSM是一个单文件程序,解压缩下载的文件在解压缩的目录中找到win64目录中的nssm.exe文件复制到已经添加至环境变量的目录中

NSSM命令格式:nssm command flags

服务安装: nssm install [serverName [AppPath [startArgs...]]]
    如果提供了运行程序,那么不会弹出GUI界面,否则会弹出一个用于详细设置的GUI界面

服务编辑: 
    GUI界面 :nssm edit serverName
    命令行  :nssm set serverName option value
    常用option有
    Application     运行文件
    AppParameters   运行参数
    AppDirectory    工作目录
    Start           启动模式,可选
        SERVICE_AUTO_START          自动启动
        SERVICE_DELAYED_AUTO_START  延迟启动
        SERVICE_DEMAND_START        手动
        SERVICE_DISABLED            禁用
    ObjectName      指定运行服务的账户和密码
        默认情况下NSSM以LocalSystem账户运行服务
        以<name> <pwd>格式
        其中name前要加域,本地使用".\"代替,如".\Administrator"
    AppExit Default Restart  固定用法,设置应用崩溃时自动重启
    AppRestartDelay  应用崩溃时自动重启的延迟,单位毫秒
    AppStdout        标准输出写入文件
    AppStderr        错误输出写入文件
    AppRotateFiles   是否启用日志分割,为1表示启用
    AppRotateOnline  是否启用在线分割,即不关闭或重启服务就完成日志分割
    AppRotateSeconds 每隔指定秒数进行日志分割
    AppRotateBytes   每当日志文件超过指定大小(字节)进行日志分割
    DependOnService  该程序依赖的服务名,在依赖服务启动后才启动

配置查看: nssm get serverName option   查看某个配置项的值
    当option错误时会打印出所有支持的option项

配置重置: nssm reset serverName option 重置某个配置项为默认值

服务备份: nssm dump serverName  打印达成指定服务当前状态要执行的命令

服务启动: nssm start serverName

服务停止: nssm stop serverName

服务重启: nssm restart serverName

服务状态: nssm status serverName

服务删除: nssm remove [serverName [confirm]]
    提供了confirm参数会直接删除而不弹出GUI提示


网址导航