2016-02-24 11 views
6

मेरे पास गोलांग बैकएंड के रूप में एक आवेदन है। मैं नीचे स्कैन और एनएसएसएम का उपयोग कर एक सेवा बना सकता हूं: sc create TestService binpath=C:\User\sds\Desktop\test.exe nssm install TestService C:\User\sds\Desktop\test.exeविंडोज सेवाओं के रूप में गोलांग एप्लिकेशन एक्सई शुरू नहीं कर सकता

सेवाएं सफलतापूर्वक बनाई गई हैं लेकिन यह शुरू नहीं हुई है। यह सेवा शुरू करते समय स्टार्टअप टाइमआउट त्रुटि देता है।

मुझे विंडोज सेवाओं से एप्लिकेशन शुरू करने की आवश्यकता है।

अग्रिम धन्यवाद।

+0

@ GKV के जवाब के अलावा: आप समझते हैं कि एक Windows सेवा एक जटिल जानवर जो एक विशेष तरीके से कहा जा ले आते है और प्रसंस्करण का एक बहुत एक बार शुरू कर (और इसके अलावा, किसी भी निष्पादन करने के लिए है tihing - यह एक EXE या DLL हो - किसी भी विंडोज़ सेवाओं की मेजबानी कर सकता है, और कई ओएस-प्रदान की गई सेवाएं इस तरह से चलती हैं।) – kostix

+0

एक निम्न तकनीक समाधान आपके आवेदन को 'srvany' या 'nssm' के माध्यम से लपेट देगा। (अगर आप चाहें तो उन्हें Google) - जो मूल रूप से एक सामान्य (नियमित) विंडोज एप्लिकेशन को विंडोज सेवा में बदल देता है। मैं अभी भी @ जीकेवी की सलाह का पालन करता हूं। – kostix

+0

@ कोस्टिक्स मैंने पहले ही एनएसएसएम का उपयोग करने की कोशिश की है लेकिन परिणाम एक जैसा है। मुझे एक ही 1053 त्रुटि मिलती है। –

उत्तर

8

गो में विंडोज़ में सेवाएं बनाने के लिए लाइब्रेरी है। कृपया इस लाइब्रेरी को देखें 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/विंडोज़/एसवीसी) "। लेकिन मेरा संदेह यह है कि" कोड प्रवाह क्या होगा, क्योंकि मुझे अपने इंस्टॉलर में एक्सई बंडल करने की ज़रूरत है ?? क्या मुझे exe शुरू करने की आवश्यकता है और फिर एक ही exe के लिए एक सेवा बनाते हैं ?? " –

+0

आपको उपरोक्त कोड (अपने main.go में) रखना चाहिए, जब आप .exe इंस्टॉल करते हैं, इंस्टॉलर का उपयोग करके यह स्वचालित रूप से आपकी सेवा शुरू कर देगा । – GKV

संबंधित मुद्दे