code: func serviceMain() (bool, error) {
  	// Don't run as a service if we're running interactively (or that can't
  	// be determined due to an error).
  	isInteractive, err := svc.IsAnInteractiveSession()
  	if err != nil {
  		return false, err
  	}
  	if isInteractive {
  		return false, nil
  	}
  
  	elog, err = eventlog.Open(svcName)
  	if err != nil {
  		return false, err
  	}
  	defer elog.Close()
  
  	err = svc.Run(svcName, &btcdService{})
  	if err != nil {
  		elog.Error(1, fmt.Sprintf("Service start failed: %v", err))
  		return true, err
  	}
  
  	return true, nil
  }
docs: // serviceMain checks whether we're being invoked as a service, and if so uses
  // the service control manager to start the long-running server.  A flag is
  // returned to the caller so the application can determine whether to exit (when
  // running as a service) or launch in normal interactive mode.