github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/osext/winsvc/eventlog/install.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package eventlog 6 7 import ( 8 "chai2010.gopkg/osext/winsvc/registry" 9 "chai2010.gopkg/osext/winsvc/winapi" 10 "errors" 11 "syscall" 12 ) 13 14 const ( 15 // Log levels. 16 Info = winapi.EVENTLOG_INFORMATION_TYPE 17 Warning = winapi.EVENTLOG_WARNING_TYPE 18 Error = winapi.EVENTLOG_ERROR_TYPE 19 ) 20 21 const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` 22 23 // Install modifies PC registry to allow logging with event source src. 24 // It adds all required keys/values to event log key. Install uses msgFile 25 // as event message file. Use bitwise of log.Error, log.Warning and log.Info 26 // to specify events supported. 27 func Install(src, msgFile string, eventsSupported uint32) error { 28 appkey, err := registry.OpenKey(syscall.HKEY_LOCAL_MACHINE, addKeyName) 29 if err != nil { 30 return err 31 } 32 defer appkey.Close() 33 sk, alreadyExist, err := appkey.CreateSubKey(src) 34 if err != nil { 35 return err 36 } 37 defer sk.Close() 38 if alreadyExist { 39 return errors.New(addKeyName + `\` + src + " registry key already exists") 40 } 41 err = sk.SetUInt32("CustomSource", 1) 42 if err != nil { 43 return err 44 } 45 err = sk.SetString("EventMessageFile", msgFile) 46 if err != nil { 47 return err 48 } 49 err = sk.SetUInt32("TypesSupported", eventsSupported) 50 if err != nil { 51 return err 52 } 53 return nil 54 } 55 56 // InstallAsEventCreate is the same as Install, but uses 57 // %SystemRoot%\System32\EventCreate.exe as event message file. 58 func InstallAsEventCreate(src string, eventsSupported uint32) error { 59 return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", eventsSupported) 60 } 61 62 // Remove deletes all registry elements installed by correspondent Install. 63 func Remove(src string) error { 64 appkey, err := registry.OpenKey(syscall.HKEY_LOCAL_MACHINE, addKeyName) 65 if err != nil { 66 return err 67 } 68 defer appkey.Close() 69 return appkey.DeleteSubKey(src) 70 }