2016-02-24 2 views
6

У меня есть приложение с golang в качестве бэкэнд. я могу создать услугу, используя СБН и NSSM, как показано ниже: sc create TestService binpath=C:\User\sds\Desktop\test.exe nssm install TestService C:\User\sds\Desktop\test.exeНе удается запустить приложение golang exe в качестве служб Windows

услуги созданы успешно, но это Безразлично не начала. Он дает ошибка таймаута запуска при запуске службы.

Мне нужно запустить приложение из служб Windows.

Заранее спасибо.

+0

В дополнение к ответу на @ GKV: вы должны понимать, что служба Windows, это сложный зверь, который должен быть вызван особым образом и сделать много обработки, как только началась (и, кроме того, любой исполняемый tihing - будь то EXE или DLL - может содержать любое количество служб Windows, и многие службы, предоставляемые ОС, выполняются так.) – kostix

+0

Решение с низким уровнем техники будет обертывать ваше приложение через 'srvany' или' nssm' (если хотите, google), которые в основном превращают обычное (обычное) приложение Windows в службу Windows. Я все равно буду следовать советам @ GKV. – kostix

+0

@kostix Я уже пробовал использовать nssm, но результат такой же. Я получаю такую ​​же ошибку 1053. –

ответ

8

Go имеет библиотеку для создания сервисов в окнах. Пожалуйста, проверьте эту библиотеку 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) 
    } 
} 
+0

Благодарим вас за ответ. Я прочитал о пакете [kardianos/service] (https://github.com/kardianos/service) и аналогичный пакет «[svc] (https://godoc.org/golang.org/x/sys/windows/svc) ». Но я сомневаюсь, что« какой будет поток кода, так как мне нужно связать exe в моем установщике? Мне нужно запустить exe, а затем создать службу для одного и того же exe? ». –

+0

вы должны сохранить вышеуказанный код (в вашем main.go), когда вы устанавливаете .exe, используя установщик, он автоматически запустит вашу службу , – GKV

Смежные вопросы