win32-service 0.8.6 → 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
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