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  }