Add description field.
This commit is contained in:
+2
-1
@@ -8,7 +8,8 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var displayName = "Go Service Test2"
|
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 {
|
if len(os.Args) > 1 {
|
||||||
var err error
|
var err error
|
||||||
|
|||||||
+36
-6
@@ -6,15 +6,16 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewService(name, displayName string) Service {
|
func NewService(name, displayName, description string) Service {
|
||||||
return &windowsService{
|
return &windowsService{
|
||||||
name: name,
|
name: name,
|
||||||
displayName: displayName,
|
displayName: displayName,
|
||||||
|
description: description,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type windowsService struct {
|
type windowsService struct {
|
||||||
name, displayName string
|
name, displayName, description string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *windowsService) Install() error {
|
func (ws *windowsService) Install() error {
|
||||||
@@ -34,6 +35,12 @@ func (ws *windowsService) Install() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer closeServiceHandle(serviceHandle)
|
defer closeServiceHandle(serviceHandle)
|
||||||
|
|
||||||
|
err = changeServiceDescription(serviceHandle, ws.description)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +81,9 @@ func (ws *windowsService) LogInfo(text string) error {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
advapi = syscall.MustLoadDLL("advapi32.dll")
|
advapi = syscall.MustLoadDLL("advapi32.dll")
|
||||||
|
kernel = syscall.MustLoadDLL("kernel32.dll")
|
||||||
|
|
||||||
|
//advapi32.dll
|
||||||
createServiceProc = advapi.MustFindProc("CreateServiceW")
|
createServiceProc = advapi.MustFindProc("CreateServiceW")
|
||||||
openServiceProc = advapi.MustFindProc("OpenServiceW")
|
openServiceProc = advapi.MustFindProc("OpenServiceW")
|
||||||
deleteServiceProc = advapi.MustFindProc("DeleteService")
|
deleteServiceProc = advapi.MustFindProc("DeleteService")
|
||||||
@@ -85,10 +94,10 @@ var (
|
|||||||
deregisterEventSourceProc = advapi.MustFindProc("DeregisterEventSource")
|
deregisterEventSourceProc = advapi.MustFindProc("DeregisterEventSource")
|
||||||
reportEventProc = advapi.MustFindProc("ReportEventW")
|
reportEventProc = advapi.MustFindProc("ReportEventW")
|
||||||
|
|
||||||
openSCManagerProc = advapi.MustFindProc("OpenSCManagerW")
|
openSCManagerProc = advapi.MustFindProc("OpenSCManagerW")
|
||||||
|
changeServiceConfig2Proc = advapi.MustFindProc("ChangeServiceConfig2W")
|
||||||
kernel = syscall.MustLoadDLL("kernel32.dll")
|
|
||||||
|
|
||||||
|
// kernel32.dll
|
||||||
getModuleFileNameProc = kernel.MustFindProc("GetModuleFileNameW")
|
getModuleFileNameProc = kernel.MustFindProc("GetModuleFileNameW")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -195,7 +204,7 @@ func reportEvent(eventSource syscall.Handle, title, text string, level eventLeve
|
|||||||
uintptr(eventSource),
|
uintptr(eventSource),
|
||||||
uintptr(level), //type
|
uintptr(level), //type
|
||||||
uintptr(0), //category
|
uintptr(0), //category
|
||||||
uintptr(3), //eventID
|
uintptr(1), //eventID
|
||||||
uintptr(0),
|
uintptr(0),
|
||||||
uintptr(2),
|
uintptr(2),
|
||||||
uintptr(0),
|
uintptr(0),
|
||||||
@@ -264,3 +273,24 @@ func openSCManager() (syscall.Handle, error) {
|
|||||||
}
|
}
|
||||||
return syscall.Handle(r0), nil
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user