Class: Win32ServiceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/win32_service_manager.rb

Constant Summary collapse

VERSION =
'0.1.0'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name_key = '') ⇒ Win32ServiceManager

Construct a new service manager, just sets up a name_key, which is used as a leading string to the name of all services managed by the instance. srv_any_path must be a full path to srvany.exe.



12
13
14
15
# File 'lib/win32_service_manager.rb', line 12

def initialize(name_key = '')
  self.class.load_dependencies
  @name_key = name_key
end

Class Method Details

.load_dependenciesObject



7
# File 'lib/win32_service_manager.rb', line 7

def self.load_dependencies; require 'win32/service'; end

.versionObject



6
# File 'lib/win32_service_manager.rb', line 6

def self.version; VERSION; end

Instance Method Details

#create(name, command, args = '', description = nil, options = {}) ⇒ Object

Create a new service. The service name will be appended to the name_key and inserted into the registry using Win32::Service. The arguments are then adjusted with win32-registry. One recommended pattern is to store persisence details about the service as yaml in the optional description field.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/win32_service_manager.rb', line 22

def create(name, command, args = '', description = nil, options = {})
  defaults = {
    :service_type       => Win32::Service::WIN32_OWN_PROCESS,
    :start_type         => Win32::Service::AUTO_START,
    :error_control      => Win32::Service::ERROR_NORMAL
  }
  defaults.merge!(options)
  name = n(name)
  options = defaults.merge(
    :display_name       => name,
    :description        => description || name,
    :binary_path_name   => command
  )
  Win32::Service.create(name, nil, options)
end

#delete(name) ⇒ Object

Mark a service for deletion (note, does not terminate the service)



39
40
41
# File 'lib/win32_service_manager.rb', line 39

def delete(name)
  Win32::Service.delete(n(name))
end

#servicesObject



58
59
60
61
62
63
# File 'lib/win32_service_manager.rb', line 58

def services
  Win32::Service.services.select do |svc|
    # TODO in future, 1.8.7, can use start_with?
    svc.display_name[0,@name_key.size] == @name_key
  end
end

#start(name) ⇒ Object



43
44
45
# File 'lib/win32_service_manager.rb', line 43

def start(name)
  Win32::Service.start(n(name))
end

#status(name = nil) ⇒ Object Also known as: list

Returns an array of tuples of name and description



52
53
54
55
# File 'lib/win32_service_manager.rb', line 52

def status(name = nil)
  list = name ? services.select { |s| s.display_name == name } : services
  list.map { |svc_info| svc_info.to_hash }
end

#stop(name) ⇒ Object



47
48
49
# File 'lib/win32_service_manager.rb', line 47

def stop(name)
  Win32::Service.stop(n(name))
end