Add description field.

This commit is contained in:
Daniel Theophanes
2012-03-09 21:56:50 -08:00
parent b8df907e33
commit 3c947a228d
2 changed files with 38 additions and 7 deletions
+2 -1
View File
@@ -8,7 +8,8 @@ import (
func main() {
var displayName = "Go Service Test2"
var ws = service.NewService("GoServiceTest2", displayName)
var desc = "This is a test Go service. It is designed to run well."
var ws = service.NewService("GoServiceTest2", displayName, desc)
if len(os.Args) > 1 {
var err error
+36 -6
View File
@@ -6,15 +6,16 @@ import (
"unsafe"
)
func NewService(name, displayName string) Service {
func NewService(name, displayName, description string) Service {
return &windowsService{
name: name,
displayName: displayName,
description: description,
}
}
type windowsService struct {
name, displayName string
name, displayName, description string
}
func (ws *windowsService) Install() error {
@@ -34,6 +35,12 @@ func (ws *windowsService) Install() error {
return err
}
defer closeServiceHandle(serviceHandle)
err = changeServiceDescription(serviceHandle, ws.description)
if err != nil {
return err
}
return nil
}
@@ -74,7 +81,9 @@ func (ws *windowsService) LogInfo(text string) error {
var (
advapi = syscall.MustLoadDLL("advapi32.dll")
kernel = syscall.MustLoadDLL("kernel32.dll")
//advapi32.dll
createServiceProc = advapi.MustFindProc("CreateServiceW")
openServiceProc = advapi.MustFindProc("OpenServiceW")
deleteServiceProc = advapi.MustFindProc("DeleteService")
@@ -85,10 +94,10 @@ var (
deregisterEventSourceProc = advapi.MustFindProc("DeregisterEventSource")
reportEventProc = advapi.MustFindProc("ReportEventW")
openSCManagerProc = advapi.MustFindProc("OpenSCManagerW")
kernel = syscall.MustLoadDLL("kernel32.dll")
openSCManagerProc = advapi.MustFindProc("OpenSCManagerW")
changeServiceConfig2Proc = advapi.MustFindProc("ChangeServiceConfig2W")
// kernel32.dll
getModuleFileNameProc = kernel.MustFindProc("GetModuleFileNameW")
)
@@ -195,7 +204,7 @@ func reportEvent(eventSource syscall.Handle, title, text string, level eventLeve
uintptr(eventSource),
uintptr(level), //type
uintptr(0), //category
uintptr(3), //eventID
uintptr(1), //eventID
uintptr(0),
uintptr(2),
uintptr(0),
@@ -264,3 +273,24 @@ func openSCManager() (syscall.Handle, error) {
}
return syscall.Handle(r0), nil
}
const (
_SERVICE_CONFIG_DESCRIPTION = 1
)
func changeServiceDescription(h syscall.Handle, desc string) error {
msg := &struct {
desc uintptr
}{
desc: uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(desc))),
}
r0, _, e1 := changeServiceConfig2Proc.Call(
uintptr(h),
uintptr(_SERVICE_CONFIG_DESCRIPTION),
uintptr(unsafe.Pointer(msg)),
)
if r0 == 0 {
return e1
}
return nil
}