使用 SC 添加服务

sc create YourServiceName binPath="D:\fgap\fgap_server.exe" start=auto DisplayName="Your Service Name"

sc start YourServiceName

sc stop YourServiceName

sc delete YourServiceName

Go 程序直接部署

package main
 
import (
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
 
	"github.com/kardianos/service"
)
 
type myProgram struct{}
var done = make(chan bool, 1)
 
func (p *myProgram) Start(s service.Service) error {
	go p.run()
	return nil
}
 
func (p *myProgram) run() {
	log.Println("Service running...")
	// 在这里添加你的服务逻辑代码
	
	<-done
    comm.Log.Warn("caught signal, stopping...")
}
 
func (p *myProgram) Stop(s service.Service) error {
    log.Println("Service stopped.")
 
    go func() {
        done <- true
    }()
	return nil
}
 
func main() {
	svcConfig := &service.Config{
		Name:        "MyService",
		DisplayName: "My Go Service",
		Description: "This is a Windows service written in Go.",
	}
 
	prg := &myProgram{}
 
	// 检查是否以服务方式运行
	if service.Interactive() {
		fmt.Println("Running in terminal.")
		if len(os.Args) > 1 {
			serviceAction := os.Args[1]
			switch serviceAction {
			case "install":
				err := s.Install()
				if err != nil {
					fmt.Println("安装服务失败: ", err.Error())
				} else {
					fmt.Println("安装服务成功")
				}
				return
			case "uninstall":
				err := s.Uninstall()
				if err != nil {
					fmt.Println("卸载服务失败: ", err.Error())
				} else {
					fmt.Println("卸载服务成功")
				}
				return
			case "start":
				err := s.Start()
				if err != nil {
					fmt.Println("运行服务失败: ", err.Error())
				} else {
					fmt.Println("运行服务成功")
				}
				return
			case "stop":
				err := s.Stop()
				if err != nil {
					fmt.Println("停止服务失败: ", err.Error())
				} else {
					fmt.Println("停止服务成功")
				}
				return
			}
		} else {
			prg.run()
		}
	} else {
		s, err := service.New(prg, svcConfig)
		if err != nil {
			log.Fatal(err)
		}
 
		// 以服务方式运行
		if err = s.Run(); err != nil {
			log.Fatal(err)
		}
	}
 
	// 监听系统信号,捕获退出信号
	sigCh := make(chan os.Signal, 1)
	signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
	<-sigCh
}