srvany_manager 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +3 -2
- data/lib/srvany_manager.rb +51 -39
- data/spec/helper.rb +1 -0
- data/tasks/git.rake +1 -1
- metadata +13 -4
data/Rakefile
CHANGED
@@ -13,14 +13,15 @@ PROJ.name = 'srvany_manager'
|
|
13
13
|
PROJ.authors = 'James Tucker'
|
14
14
|
PROJ.email = 'raggi@rubyforge.org'
|
15
15
|
PROJ.url = 'http://github.com/raggi/srvany_manager'
|
16
|
-
PROJ.rubyforge.name = '
|
16
|
+
PROJ.rubyforge.name = 'raggi'
|
17
17
|
PROJ.version = SrvanyManager.version
|
18
|
+
PROJ.gem.dependencies = %(win32-service) # TODO where does win32/registry come from?
|
18
19
|
|
19
20
|
PROJ.exclude = %w(tmp$ bak$ ~$ CVS \.git \.hg \.svn ^pkg ^doc \.DS_Store
|
20
21
|
\.cvs \.svn \.hgignore \.gitignore \.dotest \.swp$ ~$)
|
21
22
|
|
22
23
|
namespace :gem do
|
23
|
-
file 'srvany_manager.gemspec' => `git ls-files`.split do |t|
|
24
|
+
file 'srvany_manager.gemspec' => (`git ls-files`.split - ['srvany_manager.gemspec']) do |t|
|
24
25
|
open(t.name, 'w') { |f| f.write PROJ.gem._spec.to_ruby }
|
25
26
|
end
|
26
27
|
task :spec => 'srvany_manager.gemspec'
|
data/lib/srvany_manager.rb
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
class SrvanyManager
|
2
2
|
|
3
|
-
Version = VERSION = '0.1.
|
3
|
+
Version = VERSION = '0.1.1'
|
4
4
|
def self.version
|
5
5
|
Version
|
6
6
|
end
|
7
7
|
|
8
|
+
def self.load_dependencies
|
9
|
+
once = false
|
10
|
+
require 'win32/service'
|
11
|
+
require 'win32/registry'
|
12
|
+
rescue LoadError => e
|
13
|
+
raise e if once
|
14
|
+
require 'rubygems'
|
15
|
+
once = true
|
16
|
+
retry
|
17
|
+
end
|
18
|
+
|
8
19
|
# Construct a new service manager, just sets up a name_key, which is used
|
9
20
|
# as a leading string to the name of all services managed by the instance.
|
10
21
|
# srv_any_path must be a full path to srvany.exe.
|
11
22
|
def initialize(name_key = 'SRVANY_', srv_any_path = "#{ENV['ProgramFiles']}\\Windows Resource Kits\\Tools\\srvany.exe")
|
23
|
+
self.class.load_dependencies
|
12
24
|
@name_key = name_key
|
13
25
|
@srv_any_path = srv_any_path
|
14
26
|
end
|
@@ -23,55 +35,55 @@ class SrvanyManager
|
|
23
35
|
:service_type => Win32::Service::WIN32_OWN_PROCESS,
|
24
36
|
:start_type => Win32::Service::DEMAND_START,
|
25
37
|
:error_control => Win32::Service::ERROR_NORMAL
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
}.merge(options)
|
39
|
+
name = @name_key + name.to_s
|
40
|
+
options = defaults.merge(
|
29
41
|
:display_name => name,
|
30
42
|
:description => description || name,
|
31
43
|
:binary_path_name => @srv_any_path
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
44
|
+
)
|
45
|
+
Win32::Service.create(name, nil, options)
|
46
|
+
# `#{@ins_srv_path} #{name} "#{@srv_any_path}"`
|
47
|
+
registry(name) do |reg|
|
48
|
+
reg.create('Parameters') do |params|
|
49
|
+
params.write_i("Start", 3)
|
50
|
+
params.write_s("Application", command)
|
51
|
+
params.write_s("AppParameters", args)
|
52
|
+
end
|
40
53
|
end
|
41
54
|
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Mark a service for deletion (note, does not terminate the service)
|
45
|
-
def delete(name)
|
46
|
-
Win32::Service.delete(@name_key + name.to_s)
|
47
|
-
end
|
48
55
|
|
49
|
-
|
50
|
-
|
51
|
-
|
56
|
+
# Mark a service for deletion (note, does not terminate the service)
|
57
|
+
def delete(name)
|
58
|
+
Win32::Service.delete(@name_key + name.to_s)
|
59
|
+
end
|
52
60
|
|
53
|
-
|
54
|
-
|
55
|
-
|
61
|
+
def start(name)
|
62
|
+
Win32::Service.start(@name_key + name.to_s)
|
63
|
+
end
|
56
64
|
|
57
|
-
|
58
|
-
|
59
|
-
services = Win32::Service.services.select do |svc|
|
60
|
-
# TODO in future, 1.8.7, can use start_with?
|
61
|
-
svc.display_name[0,@name_key.size] == @name_key
|
65
|
+
def stop(name)
|
66
|
+
Win32::Service.stop(@name_key + name.to_s)
|
62
67
|
end
|
63
|
-
|
64
|
-
|
65
|
-
|
68
|
+
|
69
|
+
# Returns an array of tuples of name and description
|
70
|
+
def list
|
71
|
+
services = Win32::Service.services.select do |svc|
|
72
|
+
# TODO in future, 1.8.7, can use start_with?
|
73
|
+
svc.display_name[0,@name_key.size] == @name_key
|
74
|
+
end
|
75
|
+
services.map do |svc_info|
|
76
|
+
name = svc_info.display_name
|
77
|
+
[name.slice(@name_key.size, name.size), svc_info.description]
|
78
|
+
end
|
66
79
|
end
|
67
|
-
end
|
68
80
|
|
69
|
-
|
70
|
-
|
71
|
-
|
81
|
+
private
|
82
|
+
def registry(name, &block)
|
83
|
+
Win32::Registry::HKEY_LOCAL_MACHINE.open(
|
72
84
|
"SYSTEM\\CurrentControlSet\\Services",
|
73
85
|
Win32::Registry::KEY_WRITE | Win32::Registry::KEY_READ
|
74
|
-
|
75
|
-
|
86
|
+
).open(name, &block)
|
87
|
+
end
|
76
88
|
|
77
|
-
end
|
89
|
+
end
|
data/spec/helper.rb
CHANGED
data/tasks/git.rake
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: srvany_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Tucker
|
@@ -11,8 +11,17 @@ cert_chain: []
|
|
11
11
|
|
12
12
|
date: 2008-12-20 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: win32-service
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
16
25
|
description: A quick and simple manager for running programs as services on win32. Makes use of / requires the SRVANY.exe from the Windows Resource Kit.
|
17
26
|
email: raggi@rubyforge.org
|
18
27
|
executables: []
|
@@ -65,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
74
|
version:
|
66
75
|
requirements: []
|
67
76
|
|
68
|
-
rubyforge_project:
|
77
|
+
rubyforge_project: raggi
|
69
78
|
rubygems_version: 1.3.1
|
70
79
|
signing_key:
|
71
80
|
specification_version: 2
|