# Win32-service-0.6.1 using a Rails Model

**URL:** <https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243>\
**Category:** Ruby\
**Created:** [April 19, 2008, 6:30pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243 "2008-04-19T18:30:34Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 19, 2008, 6:30pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/1 "2008-04-19T18:30:34Z")

</div>

Windows 2000 SP4  
Ruby 1.8.6  
Rail 1.2.6

I’m trying to create a Rail application for our internal use to  
provide a one stop access to services. I’m currently trying to get the  
Server.status, Service.stop and Service.start to work through a model  
in Rails. The Service.\* functions work well through Ruby itself, but  
seems to have problem through a Rails Model. I’ve been trying to  
display the status of the MySQL service.

\*\*\* Model

require “win32/service”

class Servicectl

```
    include Win32

    attr_reader :state

def servicestatus(service_name, host_name)
    @state = Service.status(service_name, host_name)
end

def servicestart(service_name, host_name)
    Service.start(service_name, host_name)
end

def servicestop(service_name, host_name)
    Service.stop(service_name, host_name)
end

```

end

\*\*\* Controller

class ServicectlController \< ApplicationController

```
    def show
            service_state = Servicectl.new
            service_state.servicestatus("MySQL",nil)
            @status = service_state.state
    end

```

end

\*\*\* Show View

\<%= @status %\>

The following error is posted to the development.log.

Processing ServicectlController#show (for 127.0.0.1 at 2008-04-19  
11:53:46) [GET]  
Session ID: d446bf0a6cad825dbf5d1a78e6853706  
Parameters: {“action”=\>“show”, “controller”=\>“servicectl”}

Win32::Service::Error (T):  
c:/ruby/lib/ruby/gems/1.8/gems/win32-service-0.6.1-x86-mswin32-60/  
lib/win32/service.rb:920:in `status' C:/Shared/SourceCode/Rails/sandbox/app/models/servicectl.rb:14:in`servicestatus’  
C:/Shared/SourceCode/Rails/sandbox/app/controllers/  
servicectl\_controller.rb:9:in `show' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/base.rb:1101:in`send’  
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
action\_controller/base.rb:1101:in `perform_action_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/filters.rb:696:in`call\_filters’  
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
action\_controller/filters.rb:688:in `perform_action_without_benchmark' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/benchmarking.rb:66:in`perform\_action\_without\_rescue’  
c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/benchmarking.rb:66:in`perform\_action\_without\_rescue’  
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
action\_controller/rescue.rb:83:in `perform_action' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/base.rb:435:in`send’  
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
action\_controller/base.rb:435:in `process_without_filters' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/filters.rb:684:in`process\_without\_session\_management\_support’  
c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
action\_controller/session\_management.rb:114:in `process' c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/ action_controller/base.rb:334:in`process’  
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/dispatcher.rb:41:in  
`dispatch' c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb: 113:in`handle\_dispatch’  
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick\_server.rb:  
79:in `service' c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in`service’  
c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run' c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in`start\_thread’  
c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start' c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in`start\_thread’  
c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start' c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in`each’  
c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start' c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in`start’  
c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start' c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick_server.rb: 63:in`dispatch’  
c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/servers/  
webrick.rb:59  
c:/ruby/lib/ruby/site\_ruby/1.8/rubygems/custom\_require.rb:27:in  
`gem_original_require' c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in`require’  
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/  
active\_support/dependencies.rb:495:in `require' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/ active_support/dependencies.rb:342:in`new\_constants\_in’  
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/  
active\_support/dependencies.rb:495:in `require' c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/commands/server.rb: 39 c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in`gem\_original\_require’  
c:/ruby/lib/ruby/site\_ruby/1.8/rubygems/custom\_require.rb:27:in  
`require’  
script/server:3

I have no idea why it is failing, I’m hoping someone might have a clue  
for me.

For reference this is the working code which works well though Ruby  
itself.

\*\*\* service.rb

require “win32/service”

class ServiceController

```
    include Win32

    attr_accessor :state

def status(service_name, host_name)
    @state = Service.status(service_name, host_name)
end

def start(service_name, host_name)
    Service.start(service_name, host_name)
end

def stop(service_name, host_name)
    Service.stop(service_name, host_name)
end

```

end

\*\*\* Output:

C:\Shared\SourceCode\Ruby\>ruby service.rb  
running

Thanks for all your time,  
Dave

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 19, 2008, 8:19pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/2 "2008-04-19T20:19:57Z")

</div>

david wrote:

> Windows 2000 SP4  
> Ruby 1.8.6  
> Rail 1.2.6
> 
> I’m trying to create a Rail application for our internal use to  
> provide a one stop access to services. I’m currently trying to get the  
> Server.status, Service.stop and Service.start to work through a model  
> in Rails. The Service.\* functions work well through Ruby itself, but  
> seems to have problem through a Rails Model. I’ve been trying to  
> display the status of the MySQL service.

> lib/win32/service.rb:920:in `status' C:/Shared/SourceCode/Rails/sandbox/app/models/servicectl.rb:14:in`servicestatus’

The line number indicates that OpenService() function call failed, but  
I’m not sure why. I’ve forwarded this to the win32utils-devel list. I  
can only speculate at this point that it’s something to do with the way  
it’s interacting with WEBrick, but I’m not sure.

We’ll keep you posted.

Regards,

Dan

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 20, 2008, 5:43am UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/3 "2008-04-20T05:43:23Z")

</div>

> Win32::Service::Error (T):  
> c:/ruby/lib/ruby/gems/1.8/gems/win32-service-0.6.1-x86-mswin32-60/  
> lib/win32/service.rb:920:in `status’  
> It is running as the same user with enough privileges, I’d imagine?

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 23, 2008, 9:18pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/4 "2008-04-23T21:18:03Z")

</div>

On Apr 19, 11:42 pm, Roger P. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Win32::Service::Error (T):  
> > c:/ruby/lib/ruby/gems/1.8/gems/win32-service-0.6.1-x86-mswin32-60/  
> > lib/win32/service.rb:920:in `status’
> 
> It is running as the same user with enough privileges, I’d imagine?

Roger, yes I’m a local Administrator on the box.

Dave

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 19, 2008, 10:28pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/5 "2008-04-19T22:28:34Z")

</div>

On Sat, Apr 19, 2008 at 11:30 AM, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> def servicestatus(service_name, host_name)
> 
> end
> 
> ```
> 
> 11:53:46) [GET]  
> c:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.6/lib/  
> c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' action_controller/filters.rb:684:in 79:in `service’  
> c:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/webrick\_server.rb:  
> active\_support/dependencies.rb:342:in `new\_constants\_in’  
> I have no idea why it is failing, I’m hoping someone might have a clue
> 
> ```
> end
> 
> ```
> 
> running
> 
> Thanks for all your time,  
> Dave

I can’t offer help with win32-service, but I could suggest an  
alternative. You could do what you’re wanting to do with Windows  
services via WMI, and I’ve written a ruby-wmi gem that has a syntax  
similar to Activerecord. My rails is rusty, but here’s an idea.

\*\*\* Model

#nothing in here. 😉

\*\*\* Controller

require ‘ruby-wmi’

class ServicesController \< ApplicationController

# GET /services

# GET /services.xml

def index  
@services = WMI::Win32\_Service.find(:all)

```
respond_to do |format|
  format.html # index.html.erb
  format.xml { render :xml => @services }
end

```

end

# GET /services/1

# GET /services/1.xml

def show  
puts params  
service = WMI::Win32\_Service.find(:first, :conditions =\> {:name =\>  
params[‘id’]})  
@status = service.state  
end

def stop  
service = WMI::Win32\_Service.find(:first, :conditions =\> {:name =\>  
params[‘id’]})  
service.stopservice  
end

def start  
service = WMI::Win32\_Service.find(:first, :conditions =\> {:name =\>  
params[‘id’]})  
service.startservice  
end

end

\*\*\* Index view

\<% for service in @services %\>

\<% end %\>

|
| |
| \<%= link\_to service.name, service.name %\> | \<%= service.state %\> | \<%= service.startmode %\> |

\*\*\* Show view

\<%= @status %\>

---

<div class="post-metadata">

**Author:** ![david](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/aeb1de/32.png) [@david](https://www.ruby-forum.com/u/david)\
**Post date:** [April 23, 2008, 10:21pm UTC](https://www.ruby-forum.com/t/win32-service-0-6-1-using-a-rails-model/135243/6 "2008-04-23T22:21:29Z")

</div>

On Wed, Apr 23, 2008 at 2:15 PM, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Dave

Also, I’ll probably be releasing a new version soon (this weekend?)  
which will have a WMI::Base#set\_wmi\_class\_name method, similar to  
ActiveRecord’s set\_table\_name for legacy tables.

Then you could write your model like this:

class Service \<\< WMI::Base  
set\_wmi\_class\_name ‘Win32\_Service’  
end

and in your controller:

def index  
@services = Service.find(:all)  
end

I like the looks of this better, I just never really had a need for it  
before now.

Gordon
