2016-02-24 29 views
6

私はgolangをバックエンドとして使用しています。 以下のようにscとnssmを使用してサービスを作成できます。 sc create TestService binpath=C:\User\sds\Desktop\test.exe nssm install TestService C:\User\sds\Desktop\test.exegolangアプリケーションexeをWindowsサービスとして起動できません

サービスは正常に作成されますが、起動しません。サービス開始時にの起動タイムアウトエラーが返されます。

私はWindowsサービスからアプリケーションを起動する必要があります。

ありがとうございます。

+0

:あなたは、さらに任意の実行可能ファイルをWindowsサービスは、特殊な方法で呼ばれるようになっていると、処理の多くは、一度始めない複雑な獣であることを理解(とする必要がありますそれはEXEやDLLのようなものですが、何種類かのWindowsサービスをホストするかもしれませんが、多くのOS提供のサービスはそのように実行されます) – kostix

+0

ローテクなソリューションは、 'srvany'または' nssm' (あなたが望むならgoogle) - 基本的に通常の(通常の)WindowsアプリケーションをWindowsサービスに変えます。私はまだ@ GKVのアドバイスに従います。 – kostix

+0

@kostix私はすでにnssmを使ってみましたが、結果は同じです。私は同じ1053エラーが発生します。 –

答えて

8

Goには、Windowsでサービスを作成するためのライブラリがあります。 このライブラリgithub.com/kardianos/serviceを確認してください。 @のGKVの答えに加えて

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

関連する問題