doumi2106
2016-02-24 14:44
采纳率: 100%
浏览 903
已采纳

无法将Golang应用程序exe作为Windows服务启动

我有一个以golang为后端的应用程序。 我可以使用sc和nssm创建服务,如下所示: sc create TestService binpath=C:\User\sds\Desktop\test.exe nssm install TestService C:\User\sds\Desktop\test.exe

服务创建成功,但是无法启动。 启动服务时,它会给出启动超时错误。 我需要从Windows服务启动应用程序。 先提前感谢帮助!

图片转代码服务由CSDN问答提供 功能建议

我有一个使用golang作为后端的应用程序。 我可以使用sc和nssm来创建服务,如下所示: sc创建TestService binpath = C:\ User \ sds \ Desktop \ test.exe nssm安装TestService C:\ User \ sds \ Desktop \ test .exe

服务已成功创建,但无法启动。 启动服务时,它会给出启动超时错误

我需要从Windows服务启动应用程序。

谢谢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongmou1964 2016-02-24 16:33
    已采纳

    Go has a library for creating services in windows. Please check this library github.com/kardianos/service.

    package main
    
    import (
        "log"
    
        "github.com/kardianos/service"
    )
    
    var logger service.Logger
    
    type program struct{}
    
    func (p *program) Start(s service.Service) error {
        // Start should not block. Do the actual work async.
        go p.run()
        return nil
    }
    func (p *program) run() {
        // Do work here
    }
    func (p *program) Stop(s service.Service) error {
        // Stop should not block. Return with a few seconds.
        return nil
    }
    
    func main() {
        svcConfig := &service.Config{
            Name:        "GoServiceExampleSimple",
            DisplayName: "Go Service Example",
            Description: "This is an example Go service.",
        }
    
        prg := &program{}
        s, err := service.New(prg, svcConfig)
        if err != nil {
            log.Fatal(err)
        }
        logger, err = s.Logger(nil)
        if err != nil {
            log.Fatal(err)
        }
        err = s.Run()
        if err != nil {
            logger.Error(err)
        }
    }
    
    打赏 评论

相关推荐 更多相似问题