[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Win32-service: error 5: access denied

Michael Dichtl

7/11/2007 8:21:00 AM

hello altogether!

I have written an win32 service like explained in O'Reilys "Ruby
Cookbook" on page 750.

when i try to start the service is get the following error:
Zugriff verweigert (Win32::ServiceError)
or when i try to start the service manually:
Fehler 5: Zugriff verweigert
(in english: error 5: access denied)

does anyone know how to fix this?

thnx! have a nice day!
Michael

--
Posted via http://www.ruby-....

4 Answers

Michael Dichtl

7/12/2007 2:43:00 PM

0

does nobody have any information?

thnx!


--
Posted via http://www.ruby-....

Jano Svitok

7/12/2007 2:54:00 PM

0

On 7/11/07, Michael Dichtl <mdi@meta-1.com> wrote:
> hello altogether!
>
> I have written an win32 service like explained in O'Reilys "Ruby
> Cookbook" on page 750.
>
> when i try to start the service is get the following error:
> Zugriff verweigert (Win32::ServiceError)
> or when i try to start the service manually:
> Fehler 5: Zugriff verweigert
> (in english: error 5: access denied)
>
> does anyone know how to fix this?

What system do you have? XP/W2k/vista?

Is the service already registered? (Can you see it in services?)
Can you start it with net start <name>?
Are you admin? Uberadmin in vista?
Can you start/stop other services?

Could you post the code you are trying to start?
Could you post the actual command (what did you do when you tried to
start the service)?

What do you do in your service?
You cannot use stdin, stdout, stderr; You don't see mapped/subst-ed
disks, You might not have rights to some files - you are most probably
running under SYSTEM user.

(Now I see this looks like a confession recipe ;-)

J.

Michael Dichtl

7/12/2007 3:00:00 PM

0

Hi Jano!

thnx for post!!

I use winXP, sp2.
Yeah service is registered. in "services" the status is "manual"
Yes im Admin an yes i can start other Services.

so here is my code:
******************************************************
require 'rubygems'
require 'win32/service'
include Win32

SERVICE_NAME = "cProjectsOutlookEventsListener3"
SERVICE_DISPLAYNAME = "cProjectsOutlookEventsListener3"

if ARGV[0] == "register"
#startet den service
svc = Service.new
svc.create_service{ |s|
s.service_name = SERVICE_NAME
s.display_name = SERVICE_DISPLAYNAME
s.binary_path_name = 'c:\ruby\bin ' + File.expand_path($0)
s.dependencies = []
}
svc.close
puts "Service registriert: "+SERVICE_DISPLAYNAME

elsif ARGV[0] == "start"
Service.start(SERVICE_NAME)
puts "Service gestartet"

elsif ARGV[0] == "delete"
#stop service
if Service.status(SERVICE_NAME).current_state == "running"
Service.stop(SERVICE_NAME)
end
Service.delete(SERVICE_NAME)
puts "Service gelöscht: " + SERVICE_NAME

else
# schreibe parameterinfo
puts "Use: ruby outlook_rubysvc.rb [option]"
puts " options:"
puts " register - Registriert und starte den Service"
puts " delete - Stoppt und löscht den Service"
exit
end

# hier ist der eigentliche Service-code
class Daemon
def service_init
# Wartezeit bis der Service richtig initialisiert worden ist
sleep 10
end

def service_main
fileCount = 0
watchForFile = "C:\findme.txt"
while state == RUNNING
sleep 5
if File.exists? watchForFile
fileCount += 1
File.rename watchForFile, watchForFile + "." + fileCount.to_s
end
end
end

d = Daemon.new
d.mainloop
end


******************************************************
thnx! Michael
Jano Svitok wrote:
> On 7/11/07, Michael Dichtl <mdi@meta-1.com> wrote:
>>
>> does anyone know how to fix this?
>
> What system do you have? XP/W2k/vista?
>
> Is the service already registered? (Can you see it in services?)
> Can you start it with net start <name>?
> Are you admin? Uberadmin in vista?
> Can you start/stop other services?
>
> Could you post the code you are trying to start?
> Could you post the actual command (what did you do when you tried to
> start the service)?
>
> What do you do in your service?
> You cannot use stdin, stdout, stderr; You don't see mapped/subst-ed
> disks, You might not have rights to some files - you are most probably
> running under SYSTEM user.
>
> (Now I see this looks like a confession recipe ;-)
>
> J.


--
Posted via http://www.ruby-....

Jano Svitok

7/12/2007 4:01:00 PM

0

On 7/12/07, Michael Dichtl <mdi@meta-1.com> wrote:
> require 'rubygems'
> require 'win32/service'
> include Win32
>
> SERVICE_NAME = "cProjectsOutlookEventsListener3"
> SERVICE_DISPLAYNAME = "cProjectsOutlookEventsListener3"

Offtopic: You can write the following as

case ARGV[0]
when "register"
...
when "start"
...
else
...
end

> if ARGV[0] == "register"
> #startet den service
> svc = Service.new
...
> # hier ist der eigentliche Service-code
> class Daemon
> def service_init
> # Wartezeit bis der Service richtig initialisiert worden ist
> sleep 10
> end

Try this: (the only possible place where it can raise "access denied"
exception is when you rename the file (I suppose you can't do that
while it's open). If it does not help, create a log file and store the
exception stack trace to it (i.e. enclose everything in begin /
rescue.

> def service_main
- fileCount = 0
+ fileCount = 0
> watchForFile = "C:\findme.txt"
> while state == RUNNING
> sleep 5
> if File.exists? watchForFile
- fileCount += 1
- File.rename watchForFile, watchForFile + "." + fileCount.to_s
+ begin
+ File.rename watchForFile, watchForFile + "." + fileCount.to_s
+ fileCount += 1
+ rescue
+ end
> end
> end
> end

Of course, I assume the program works when run standalone, from the cmd.exe.

Access permissions of NTFS might be in the game as well. You may try
playing with runas /user:SYSTEM, too.

J.