用 Go 语言 编写 Windows服务

使用 Go 编写 Windows 服务

  • 直接贴代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    package main

    import (
    "fmt"
    "io"
    "net"
    "net/http"
    "os"
    "strings"

    "github.com/kardianos/service"
    )

    var logger = service.ConsoleLogger

    type program struct{}

    func (p *program) Start(s service.Service) error {
    go p.run()
    return nil
    }

    func (p *program) run() {
    // 运行逻辑
    }

    func (p *program) Stop(s service.Service) error {
    return nil
    }

    func main() {
    svcConfig := &service.Config{
    Name: "SixiServiceGo", //服务显示名称
    DisplayName: "SixiService - Go Sixi Service", //服务名称
    Description: "四喜OA登录插件 Go语言版本.", //服务描述
    }

    prg := &program{}
    s, err := service.New(prg, svcConfig)
    if err != nil {
    logger.Error(err)
    }

    if err != nil {
    logger.Error(err)
    }

    if len(os.Args) > 1 {
    switch os.Args[1] {
    case "install":
    s.Install()
    logger.Info("服务安装成功!")
    s.Start()
    logger.Info("服务启动成功!")
    break
    case "start":
    s.Start()
    logger.Info("服务启动成功!")
    break
    case "stop":
    s.Stop()
    logger.Info("服务关闭成功!")
    break
    case "restart":
    s.Stop()
    logger.Info("服务关闭成功!")
    s.Start()
    logger.Info("服务启动成功!")
    break
    case "remove":
    s.Stop()
    logger.Info("服务关闭成功!")
    s.Uninstall()
    logger.Info("服务卸载成功!")
    break
    }
    return
    }
    err = s.Run()
    if err != nil {
    logger.Error(err)
    }
    }
  • 安装服务 xx.exe install

  • 启动服务 xx.exe start
  • 停止服务 xx.exe stop
  • 重启服务 xx.exe restart
  • 删除服务 xx.exe remove