func TestLog(t *testing.T) { const name = "mylog" const supports = eventlog.Error | eventlog.Warning | eventlog.Info err := eventlog.InstallAsEventCreate(name, supports) if err != nil { t.Fatalf("Install failed: %s", err) } l, err := eventlog.Open(name) if err != nil { t.Fatalf("Open failed: %s", err) } defer l.Close() err = l.Info(1, "info") if err != nil { t.Fatalf("Info failed: %s", err) } err = l.Warning(2, "warning") if err != nil { t.Fatalf("Warning failed: %s", err) } err = l.Error(3, "error") if err != nil { t.Fatalf("Error failed: %s", err) } err = eventlog.Remove(name) if err != nil { t.Fatalf("Remove failed: %s", err) } }
// installService attempts to install the btcd service. Typically this should // be done by the msi installer, but it is provided here since it can be useful // for development. func installService() error { // Get the path of the current executable. This is needed because // os.Args[0] can vary depending on how the application was launched. // For example, under cmd.exe it will only be the name of the app // without the path or extension, but under mingw it will be the full // path including the extension. exePath, err := filepath.Abs(os.Args[0]) if err != nil { return err } if filepath.Ext(exePath) == "" { exePath += ".exe" } // Connect to the windows service manager. serviceManager, err := mgr.Connect() if err != nil { return err } defer serviceManager.Disconnect() // Ensure the service doesn't already exist. service, err := serviceManager.OpenService(svcName) if err == nil { service.Close() return fmt.Errorf("service %s already exists", svcName) } // Install the service. service, err = serviceManager.CreateService(svcName, exePath, mgr.Config{ DisplayName: svcDisplayName, Description: svcDesc, }) if err != nil { return err } defer service.Close() // Support events to the event log using the standard "standard" Windows // EventCreate.exe message file. This allows easy logging of custom // messges instead of needing to create our own message catalog. eventlog.Remove(svcName) eventsSupported := uint32(eventlog.Error | eventlog.Warning | eventlog.Info) err = eventlog.InstallAsEventCreate(svcName, eventsSupported) if err != nil { return err } return nil }
func removeService(name string) error { m, err := mgr.Connect() if err != nil { return err } defer m.Disconnect() s, err := m.OpenService(name) if err != nil { return fmt.Errorf("service %s is not installed", name) } defer s.Close() err = s.Delete() if err != nil { return err } err = eventlog.Remove(name) if err != nil { return fmt.Errorf("RemoveEventLogSource() failed: %s", err) } return nil }