win32-service 0.8.6 → 0.8.7

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/MANIFEST CHANGED
@@ -1,18 +1,18 @@
1
- * MANIFEST
2
- * CHANGES
3
- * README
4
- * Rakefile
5
- * win32-service.gemspec
6
- * doc/daemon.txt
7
- * doc/service.txt
8
- * examples/demo_daemon.rb
9
- * examples/demo_daemon_ctl.rb
10
- * examples/demo_services.rb
11
- * lib/win32/service.rb
12
- * lib/win32/daemon.rb
13
- * test/test_win32_daemon.rb
14
- * test/test_win32_service_configure.rb
15
- * test/test_win32_service_create.rb
16
- * test/test_win32_service_info.rb
17
- * test/test_win32_service_status.rb
18
- * test/test_win32_service.rb
1
+ * MANIFEST
2
+ * CHANGES
3
+ * README
4
+ * Rakefile
5
+ * win32-service.gemspec
6
+ * doc/daemon.txt
7
+ * doc/service.txt
8
+ * examples/demo_daemon.rb
9
+ * examples/demo_daemon_ctl.rb
10
+ * examples/demo_services.rb
11
+ * lib/win32/service.rb
12
+ * lib/win32/daemon.rb
13
+ * test/test_win32_daemon.rb
14
+ * test/test_win32_service_configure.rb
15
+ * test/test_win32_service_create.rb
16
+ * test/test_win32_service_info.rb
17
+ * test/test_win32_service_status.rb
18
+ * test/test_win32_service.rb
data/README CHANGED
@@ -1,77 +1,77 @@
1
- == Description
2
- The win32-service library allows you to control or create MS Windows services.
3
-
4
- == Installation
5
- gem install win32-service
6
-
7
- == Synopsis
8
- require 'win32/service'
9
-
10
- # Iterate over the available services
11
- Service.services do |service|
12
- p service
13
- end
14
-
15
- == More Documentation
16
- Please see the documentation in the 'doc' directory, or the gem documentation
17
- that was installed when you installed this library as a gem.
18
-
19
- == Known Issues
20
- === Problem:
21
- Service.delete causes "Unable to delete: The specified service has been
22
- marked for deletion."
23
-
24
- === Troubleshooting:
25
- This can be caused by one of two things. Either you attempted to delete a
26
- running service without stopping it first, or you have the Services
27
- Administrative Tool (GUI) open. In the former case, the solution is to first
28
- stop the service if it's running. In the latter, close the Services GUI
29
- admin tool before deleting.
30
-
31
- === Problem:
32
- Service.start causes, "The service did not respond to the start or control
33
- request in a timely fashion."
34
-
35
- === Troubleshooting:
36
- The best way to debug your services is to wrap your entire Daemon subclass
37
- in a begin/end block and send error messages to a file. That should give a
38
- good clue as to the nature of the problem. The most probable culprits are:
39
-
40
- * You forgot to require 'win32/daemon' in your Daemon code.
41
-
42
- * You've tried to require a library that's not in your $LOAD_PATH. Make sure
43
- that your require statements are inside the begin/rescue block so that you can
44
- easily find those mistakes.
45
-
46
- * Your have a bad binary path name. Be sure to use an absolute path name for
47
- the binary path name, including the full path to the Ruby interpreter, e.g.
48
- 'c:\ruby\bin\ruby' instead of just 'ruby'.
49
-
50
- * You've got a syntax error in your code somewhere.
51
-
52
- == See Also
53
- ruby-wmi
54
-
55
- == Future Plans
56
- Add service_session_change hook
57
-
58
- == Copyright
59
- (C) 2003-2014, Daniel J. Berger, All Rights Reserved
60
-
61
- == License
62
- Artistic 2.0
63
-
64
- == Contributions
65
- Although this library is free, please consider having your company
66
- setup a gittip if used by your company professionally.
67
-
68
- http://www.gittip.com/djberg96/
69
-
70
- == Warranty
71
- This package is provided "as is" and without any express or
72
- implied warranties, including, without limitation, the implied
73
- warranties of merchantability and fitness for a particular purpose.
74
-
75
- == Authors
76
- Daniel J. Berger
77
- Park Heesob
1
+ == Description
2
+ The win32-service library allows you to control or create MS Windows services.
3
+
4
+ == Installation
5
+ gem install win32-service
6
+
7
+ == Synopsis
8
+ require 'win32/service'
9
+
10
+ # Iterate over the available services
11
+ Win32::Service.services do |service|
12
+ p service
13
+ end
14
+
15
+ == More Documentation
16
+ Please see the documentation in the 'doc' directory, or the gem documentation
17
+ that was installed when you installed this library as a gem.
18
+
19
+ == Known Issues
20
+ === Problem:
21
+ Service.delete causes "Unable to delete: The specified service has been
22
+ marked for deletion."
23
+
24
+ === Troubleshooting:
25
+ This can be caused by one of two things. Either you attempted to delete a
26
+ running service without stopping it first, or you have the Services
27
+ Administrative Tool (GUI) open. In the former case, the solution is to first
28
+ stop the service if it's running. In the latter, close the Services GUI
29
+ admin tool before deleting.
30
+
31
+ === Problem:
32
+ Service.start causes, "The service did not respond to the start or control
33
+ request in a timely fashion."
34
+
35
+ === Troubleshooting:
36
+ The best way to debug your services is to wrap your entire Daemon subclass
37
+ in a begin/end block and send error messages to a file. That should give a
38
+ good clue as to the nature of the problem. The most probable culprits are:
39
+
40
+ * You forgot to require 'win32/daemon' in your Daemon code.
41
+
42
+ * You've tried to require a library that's not in your $LOAD_PATH. Make sure
43
+ that your require statements are inside the begin/rescue block so that you can
44
+ easily find those mistakes.
45
+
46
+ * Your have a bad binary path name. Be sure to use an absolute path name for
47
+ the binary path name, including the full path to the Ruby interpreter, e.g.
48
+ 'c:\ruby\bin\ruby' instead of just 'ruby'.
49
+
50
+ * You've got a syntax error in your code somewhere.
51
+
52
+ == See Also
53
+ ruby-wmi
54
+
55
+ == Future Plans
56
+ Add service_session_change hook
57
+
58
+ == Copyright
59
+ (C) 2003-2014, Daniel J. Berger, All Rights Reserved
60
+
61
+ == License
62
+ Artistic 2.0
63
+
64
+ == Contributions
65
+ Although this library is free, please consider having your company
66
+ setup a gittip if used by your company professionally.
67
+
68
+ http://www.gittip.com/djberg96/
69
+
70
+ == Warranty
71
+ This package is provided "as is" and without any express or
72
+ implied warranties, including, without limitation, the implied
73
+ warranties of merchantability and fitness for a particular purpose.
74
+
75
+ == Authors
76
+ Daniel J. Berger
77
+ Park Heesob
data/Rakefile CHANGED
@@ -1,101 +1,101 @@
1
- require 'rake'
2
- require 'rake/clean'
3
- require 'rake/testtask'
4
- require 'rbconfig'
5
- include RbConfig
6
-
7
- CLEAN.include(
8
- '**/*.gem', # Gem files
9
- '**/*.rbc' # Rubinius
10
- )
11
-
12
- namespace 'gem' do
13
- desc "Create the win32-service gem"
14
- task :create => [:clean] do
15
- spec = eval(IO.read('win32-service.gemspec'))
16
- if Gem::VERSION.to_f < 2.0
17
- Gem::Builder.new(spec).build
18
- else
19
- require 'rubygems/package'
20
- Gem::Package.build(spec)
21
- end
22
- end
23
-
24
- desc "Install the win32-service gem"
25
- task :install => [:create] do
26
- file = Dir['*.gem'].first
27
- sh "gem install -l #{file}"
28
- end
29
- end
30
-
31
- namespace :example do
32
- desc "Run the services example program."
33
- task :services do
34
- sh "ruby -Ilib examples/demo_services.rb"
35
- end
36
- end
37
-
38
- namespace 'test' do
39
- desc 'Run all tests for the win32-service library'
40
- Rake::TestTask.new('all') do |t|
41
- t.verbose = true
42
- t.warning = true
43
- end
44
-
45
- desc 'Run the tests for the Win32::Daemon class'
46
- Rake::TestTask.new('daemon') do |t|
47
- task :daemon
48
- t.verbose = true
49
- t.warning = true
50
- t.test_files = FileList['test/test_win32_daemon.rb']
51
- end
52
-
53
- namespace 'service' do
54
- desc 'Run the tests for the Win32::Service class'
55
- Rake::TestTask.new('all') do |t|
56
- t.verbose = true
57
- t.warning = true
58
- t.test_files = FileList['test/test_win32_service*.rb']
59
- end
60
-
61
- Rake::TestTask.new('configure') do |t|
62
- t.verbose = true
63
- t.warning = true
64
- t.test_files = FileList['test/test_win32_service_configure.rb']
65
- end
66
-
67
- Rake::TestTask.new('control') do |t|
68
- t.verbose = true
69
- t.warning = true
70
- t.test_files = FileList['test/test_win32_service.rb']
71
- end
72
-
73
- Rake::TestTask.new('create') do |t|
74
- t.verbose = true
75
- t.warning = true
76
- t.test_files = FileList['test/test_win32_service_create.rb']
77
- end
78
-
79
- Rake::TestTask.new('info') do |t|
80
- t.verbose = true
81
- t.warning = true
82
- t.test_files = FileList['test/test_win32_service_info.rb']
83
- end
84
-
85
- Rake::TestTask.new('status') do |t|
86
- t.verbose = true
87
- t.warning = true
88
- t.test_files = FileList['test/test_win32_service_status.rb']
89
- end
90
- end
91
-
92
- task :all do
93
- Rake.application[:clean].execute
94
- end
95
-
96
- task :daemon do
97
- Rake.application[:clean].execute
98
- end
99
- end
100
-
101
- task :default => 'test:all'
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/testtask'
4
+ require 'rbconfig'
5
+ include RbConfig
6
+
7
+ CLEAN.include(
8
+ '**/*.gem', # Gem files
9
+ '**/*.rbc' # Rubinius
10
+ )
11
+
12
+ namespace 'gem' do
13
+ desc "Create the win32-service gem"
14
+ task :create => [:clean] do
15
+ spec = eval(IO.read('win32-service.gemspec'))
16
+ if Gem::VERSION.to_f < 2.0
17
+ Gem::Builder.new(spec).build
18
+ else
19
+ require 'rubygems/package'
20
+ Gem::Package.build(spec)
21
+ end
22
+ end
23
+
24
+ desc "Install the win32-service gem"
25
+ task :install => [:create] do
26
+ file = Dir['*.gem'].first
27
+ sh "gem install -l #{file}"
28
+ end
29
+ end
30
+
31
+ namespace :example do
32
+ desc "Run the services example program."
33
+ task :services do
34
+ sh "ruby -Ilib examples/demo_services.rb"
35
+ end
36
+ end
37
+
38
+ namespace 'test' do
39
+ desc 'Run all tests for the win32-service library'
40
+ Rake::TestTask.new('all') do |t|
41
+ t.verbose = true
42
+ t.warning = true
43
+ end
44
+
45
+ desc 'Run the tests for the Win32::Daemon class'
46
+ Rake::TestTask.new('daemon') do |t|
47
+ task :daemon
48
+ t.verbose = true
49
+ t.warning = true
50
+ t.test_files = FileList['test/test_win32_daemon.rb']
51
+ end
52
+
53
+ namespace 'service' do
54
+ desc 'Run the tests for the Win32::Service class'
55
+ Rake::TestTask.new('all') do |t|
56
+ t.verbose = true
57
+ t.warning = true
58
+ t.test_files = FileList['test/test_win32_service*.rb']
59
+ end
60
+
61
+ Rake::TestTask.new('configure') do |t|
62
+ t.verbose = true
63
+ t.warning = true
64
+ t.test_files = FileList['test/test_win32_service_configure.rb']
65
+ end
66
+
67
+ Rake::TestTask.new('control') do |t|
68
+ t.verbose = true
69
+ t.warning = true
70
+ t.test_files = FileList['test/test_win32_service.rb']
71
+ end
72
+
73
+ Rake::TestTask.new('create') do |t|
74
+ t.verbose = true
75
+ t.warning = true
76
+ t.test_files = FileList['test/test_win32_service_create.rb']
77
+ end
78
+
79
+ Rake::TestTask.new('info') do |t|
80
+ t.verbose = true
81
+ t.warning = true
82
+ t.test_files = FileList['test/test_win32_service_info.rb']
83
+ end
84
+
85
+ Rake::TestTask.new('status') do |t|
86
+ t.verbose = true
87
+ t.warning = true
88
+ t.test_files = FileList['test/test_win32_service_status.rb']
89
+ end
90
+ end
91
+
92
+ task :all do
93
+ Rake.application[:clean].execute
94
+ end
95
+
96
+ task :daemon do
97
+ Rake.application[:clean].execute
98
+ end
99
+ end
100
+
101
+ task :default => 'test:all'
@@ -1,157 +1,157 @@
1
- = Description
2
- The Daemon class is a wrapper class that allows you to run your code as a
3
- Windows service.
4
-
5
- = Synopsis
6
- class Daemon
7
- def service_main
8
- while running?
9
- sleep 3
10
- File.open("c:\\test.log", "a"){ |f| f.puts "service is running" }
11
- end
12
- end
13
- end
14
-
15
- Daemon.mainloop
16
-
17
- = Singleton Methods
18
- Daemon.mainloop
19
- This is the method that actually puts your code into a loop and allows it
20
- to run as a service. The code that is actually run while in the mainloop
21
- is what you defined in the Daemon#service_main method.
22
-
23
- = Instance Methods
24
- Daemon#running?
25
- Returns whether or not the daemon is running. This is just a shortcut
26
- for checking if the state is RUNNING, PAUSED or IDLE.
27
-
28
- This is typically used within your service_main method. See the
29
- demo_daemon.rb file in the 'examples' directory for an example of how it's
30
- used in practice.
31
-
32
- Daemon#service_init
33
- Any code defined defined within this method occurs before service_main is
34
- reached. Any initialization code that takes more than two seconds to
35
- execute should be placed here. Otherwise, your service may timeout when
36
- you try to start it.
37
-
38
- Daemon#service_main(*args)
39
- You are expected to define your own service_main() method. The code
40
- defined in this method is the code that will run while running as a
41
- service.
42
-
43
- Any +args+ passed to Service.start are passed to this method.
44
-
45
- Daemon#state
46
- Returns the current state of the Daemon. For a list of valid states, see
47
- the Constants section below.
48
-
49
- = Signal Event Hooks
50
- These methods are called if defined within your Daemon class, and the
51
- appropriate signal is received by your service.
52
-
53
- Daemon#service_stop
54
- Called if the service receives a SERVICE_CONTROL_STOP signal. This is
55
- what the Service.stop() method sends.
56
-
57
- Daemon#service_pause
58
- Called if the service receives a SERVICE_CONTROL_PAUSE signal. This is
59
- what the Service.pause() method sends.
60
-
61
- Daemon#service_resume
62
- Called if the service receives a SERVICE_CONTROL_CONTINUE signal. This
63
- is what the Service.resume() method sends.
64
-
65
- Daemon#service_interrogate
66
- Called if the service receives a SERVICE_CONTROL_INTERROGATE signal. This
67
- notifies a service that it should report its current status information to
68
- the service control manager.
69
-
70
- Daemon#service_shutdown
71
- Called if the service receives a SERVICE_CONTROL_SHUTDOWN signal.
72
-
73
- Daemon#service_netbindadd
74
- Called if the service receives a SERVICE_CONTROL_NETBINDADD signal. This
75
- notifies a network service that there is a new component for binding.
76
-
77
- Daemon#service_netbinddisable
78
- Called if the service receives a SERVICE_CONTROL_NETBINDDISABLE signal.
79
- This notifies a network service that one of its bindings has been
80
- disabled.
81
-
82
- Daemon#service_netbindenable
83
- Called if the service receives a SERVICE_CONTROL_NETBINDENABLE signal.
84
- This Notifies a network service that a disabled binding has been enabled.
85
-
86
- Daemon#service_netbindremove
87
- Called if the service receives a SERVICE_CONTROL_NETBINDREMOVE signal.
88
- This notifies a network service that that a component for binding has
89
- been removed.
90
-
91
- Daemon#service_paramchange
92
- Called if the service receives a SERVICE_CONTROL_PARAMCHANGE signal.
93
- This notifies a service that its startup parameters have changed.
94
-
95
- = Constants
96
-
97
- === Service state constants
98
- Daemon::CONTINUE_PENDING
99
- The service continue is pending.
100
-
101
- Daemon::PAUSE_PENDING
102
- The service pause is pending.
103
-
104
- Daemon::PAUSED
105
- The service is paused (but not STOPPED).
106
-
107
- Daemon::RUNNING
108
- The service is running.
109
-
110
- Daemon::START_PENDING
111
- The service is starting (but is not yet in a RUNNING state).
112
-
113
- Daemon::STOP_PENDING
114
- The service is stopping (but is not yet in a STOPPED state).
115
-
116
- Daemon::STOPPED
117
- The service is not running.
118
-
119
- Daemon::IDLE
120
- The service is running, in an idle state. This is a custom state that
121
- we added that gets around a thread blocking issue.
122
-
123
- = Notes
124
- You must create a service before you can actually run it. Look in the
125
- examples directory for the files 'demo_daemon.rb' and 'demodaemon_ctl.rb'.
126
- They're small and straightforward examples of how to control, install and
127
- setup your own Daemon.
128
-
129
- = Known Bugs
130
- None known. Please report any bugs you find on the Bug tracker at
131
- https//github.com/djberg96/win32-service
132
-
133
- = Future Plans
134
- None at this time.
135
-
136
- Suggestions welcome. Please post them on the github project page at
137
- https//github.com/djberg96/win32-service
138
-
139
- = Acknowledgements
140
- Many thanks go to Patrick Hurley for providing the fix for the thread
141
- blocking issue for the original C code. Thanks also go to Kevin Burge for
142
- his patch that solved service responsiveness issues.
143
-
144
- = Copyright
145
- (C) 2003-2013 Daniel J. Berger, All Rights Reserved
146
-
147
- = License
148
- Artistic 2.0
149
-
150
- = Warranty
151
- This package is provided "as is" and without any express or
152
- implied warranties, including, without limitation, the implied
153
- warranties of merchantability and fitness for a particular purpose.
154
-
155
- = Author(s)
156
- * Daniel J. Berger
157
- * Park Heesob
1
+ = Description
2
+ The Daemon class is a wrapper class that allows you to run your code as a
3
+ Windows service.
4
+
5
+ = Synopsis
6
+ class Daemon
7
+ def service_main
8
+ while running?
9
+ sleep 3
10
+ File.open("c:\\test.log", "a"){ |f| f.puts "service is running" }
11
+ end
12
+ end
13
+ end
14
+
15
+ Daemon.mainloop
16
+
17
+ = Singleton Methods
18
+ Daemon.mainloop
19
+ This is the method that actually puts your code into a loop and allows it
20
+ to run as a service. The code that is actually run while in the mainloop
21
+ is what you defined in the Daemon#service_main method.
22
+
23
+ = Instance Methods
24
+ Daemon#running?
25
+ Returns whether or not the daemon is running. This is just a shortcut
26
+ for checking if the state is RUNNING, PAUSED or IDLE.
27
+
28
+ This is typically used within your service_main method. See the
29
+ demo_daemon.rb file in the 'examples' directory for an example of how it's
30
+ used in practice.
31
+
32
+ Daemon#service_init
33
+ Any code defined defined within this method occurs before service_main is
34
+ reached. Any initialization code that takes more than two seconds to
35
+ execute should be placed here. Otherwise, your service may timeout when
36
+ you try to start it.
37
+
38
+ Daemon#service_main(*args)
39
+ You are expected to define your own service_main() method. The code
40
+ defined in this method is the code that will run while running as a
41
+ service.
42
+
43
+ Any +args+ passed to Service.start are passed to this method.
44
+
45
+ Daemon#state
46
+ Returns the current state of the Daemon. For a list of valid states, see
47
+ the Constants section below.
48
+
49
+ = Signal Event Hooks
50
+ These methods are called if defined within your Daemon class, and the
51
+ appropriate signal is received by your service.
52
+
53
+ Daemon#service_stop
54
+ Called if the service receives a SERVICE_CONTROL_STOP signal. This is
55
+ what the Service.stop() method sends.
56
+
57
+ Daemon#service_pause
58
+ Called if the service receives a SERVICE_CONTROL_PAUSE signal. This is
59
+ what the Service.pause() method sends.
60
+
61
+ Daemon#service_resume
62
+ Called if the service receives a SERVICE_CONTROL_CONTINUE signal. This
63
+ is what the Service.resume() method sends.
64
+
65
+ Daemon#service_interrogate
66
+ Called if the service receives a SERVICE_CONTROL_INTERROGATE signal. This
67
+ notifies a service that it should report its current status information to
68
+ the service control manager.
69
+
70
+ Daemon#service_shutdown
71
+ Called if the service receives a SERVICE_CONTROL_SHUTDOWN signal.
72
+
73
+ Daemon#service_netbindadd
74
+ Called if the service receives a SERVICE_CONTROL_NETBINDADD signal. This
75
+ notifies a network service that there is a new component for binding.
76
+
77
+ Daemon#service_netbinddisable
78
+ Called if the service receives a SERVICE_CONTROL_NETBINDDISABLE signal.
79
+ This notifies a network service that one of its bindings has been
80
+ disabled.
81
+
82
+ Daemon#service_netbindenable
83
+ Called if the service receives a SERVICE_CONTROL_NETBINDENABLE signal.
84
+ This Notifies a network service that a disabled binding has been enabled.
85
+
86
+ Daemon#service_netbindremove
87
+ Called if the service receives a SERVICE_CONTROL_NETBINDREMOVE signal.
88
+ This notifies a network service that that a component for binding has
89
+ been removed.
90
+
91
+ Daemon#service_paramchange
92
+ Called if the service receives a SERVICE_CONTROL_PARAMCHANGE signal.
93
+ This notifies a service that its startup parameters have changed.
94
+
95
+ = Constants
96
+
97
+ === Service state constants
98
+ Daemon::CONTINUE_PENDING
99
+ The service continue is pending.
100
+
101
+ Daemon::PAUSE_PENDING
102
+ The service pause is pending.
103
+
104
+ Daemon::PAUSED
105
+ The service is paused (but not STOPPED).
106
+
107
+ Daemon::RUNNING
108
+ The service is running.
109
+
110
+ Daemon::START_PENDING
111
+ The service is starting (but is not yet in a RUNNING state).
112
+
113
+ Daemon::STOP_PENDING
114
+ The service is stopping (but is not yet in a STOPPED state).
115
+
116
+ Daemon::STOPPED
117
+ The service is not running.
118
+
119
+ Daemon::IDLE
120
+ The service is running, in an idle state. This is a custom state that
121
+ we added that gets around a thread blocking issue.
122
+
123
+ = Notes
124
+ You must create a service before you can actually run it. Look in the
125
+ examples directory for the files 'demo_daemon.rb' and 'demodaemon_ctl.rb'.
126
+ They're small and straightforward examples of how to control, install and
127
+ setup your own Daemon.
128
+
129
+ = Known Bugs
130
+ None known. Please report any bugs you find on the Bug tracker at
131
+ https//github.com/djberg96/win32-service
132
+
133
+ = Future Plans
134
+ None at this time.
135
+
136
+ Suggestions welcome. Please post them on the github project page at
137
+ https//github.com/djberg96/win32-service
138
+
139
+ = Acknowledgements
140
+ Many thanks go to Patrick Hurley for providing the fix for the thread
141
+ blocking issue for the original C code. Thanks also go to Kevin Burge for
142
+ his patch that solved service responsiveness issues.
143
+
144
+ = Copyright
145
+ (C) 2003-2013 Daniel J. Berger, All Rights Reserved
146
+
147
+ = License
148
+ Artistic 2.0
149
+
150
+ = Warranty
151
+ This package is provided "as is" and without any express or
152
+ implied warranties, including, without limitation, the implied
153
+ warranties of merchantability and fitness for a particular purpose.
154
+
155
+ = Author(s)
156
+ * Daniel J. Berger
157
+ * Park Heesob