2016-02-24 14 views
6

Ho un'applicazione con golang come back-end. posso creare un servizio utilizzando la SC e NSSM come di seguito: sc create TestService binpath=C:\User\sds\Desktop\test.exe nssm install TestService C:\User\sds\Desktop\test.exeImpossibile avviare golan application exe come servizi Windows

I servizi sono creati con successo, ma non doesn iniziare. Dà errore di timeout di avvio all'avvio del servizio.

Ho bisogno di avviare l'applicazione da Windows Services.

Grazie in anticipo.

+0

Oltre alla risposta di @ GKV: bisogna capire che un servizio di Windows è una bestia complicata che dovrebbe essere chiamato in un modo speciale e fare un sacco di elaborazione una volta avviato (e per di più, qualsiasi eseguibile tihing - sia esso un EXE o una DLL - potrebbe ospitare un numero qualsiasi di servizi Windows, e molti servizi forniti dal sistema operativo vengono eseguiti in questo modo. – kostix

+0

Una soluzione a bassa tecnologia potrebbe avvolgere l'applicazione tramite 'srvany' o' nssm' (google loro, se lo desideri) - che sostanzialmente trasforma una normale applicazione Windows (normale) in un servizio di Windows. Seguirò comunque il consiglio di @ GKV. – kostix

+0

@kostix Ho già provato a usare nssm ma il risultato è lo stesso. Ottengo lo stesso errore 1053. –

risposta

8

Go dispone di una libreria per la creazione di servizi in Windows. Controllare questa libreria 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

Grazie per aver risposto alla domanda. Ho letto del pacchetto [kardianos/service] (https://github.com/kardianos/service) "e anche un pacchetto simile" [svc] (https://godoc.org/golang.org/x/sys)/windows/svc) ". Ma il mio dubbio è che" quale sarà il flusso del codice, dal momento che ho bisogno di impacchettare l'exe nel mio programma di installazione ?? Ho bisogno di avviare l'exe e quindi creare un servizio per lo stesso exe ?? ". –

+0

si dovrebbe mantenere il codice di cui sopra (nel main.go), quando si installa il file .exe, utilizzando il programma di installazione si avvierà automaticamente il servizio . – GKV

Problemi correlati