ServiceBase.Run(), but no OnStart()?

ServiceBase.Run(), but no OnStart()?

am 21.01.2008 22:47:28 von Jeff Dege

I have a service, written in C# and .NET V2.0.50727, that works fine on
some machines, but hangs on start on others.

In MyService.Main(), I read the registry for a few initialization
settings, most important of which for our purposes is the name of the
logfile.

I then create a new MyService object, and pass it to ServiceBase.Run().
(MyService is, of course, derived from ServiceBase).

I write a log message immediately before ServiceBase.Run(myServiceObject).

MyService.OnStart(args) writes a log message immediately on being called.

On the machines where this works, I see, in the logfile, the two messages
one immediately following the other.

On the machines where it does not, when I try to start the service, the
progress bar seems to stop, half-way, then after a long wait, I get a
failed to start dialog. In the Services Manager, the service displays a
"Starting" status, with the start, restart, and stop buttons greyed out.

If I try to remove the service, the Startup Type in the Services Manager
changes to "Disabled", but MyServicee stays in the list. Nothing short
of a reboot seems to work to get rid of it.

Meanwhile, the logfile shows nothing after ServiceBase.Run(). Either
MyService.OnStart() is not being called, or it's failing to write to the
logfile.

The event viewer shows only an uninformative message: "The MyService
service terminated unexpectedly".

I'm catching and logging all exceptions - none seem to be thrown.

I have no idea what is going on, and have no idea at all as how to figure
out what the problem is.

Since it shows up on one machine, but not on another, my guess would be
that it might be some sort of security or permissions issue. But guesses
aren't of much help. Is there anyway of tracking what is going on? SCM
is running into some sort of problem, where do I look to find out what it
is?

--
Freedom is not empowerment. Empowerment is what the Serbs have in
Bosnia. Anybody can grab a gun and be empowered. It's not entitlement. An
entitlement is what people on welfare get, and how free are they? It's
not an endlessly expanding list of rights - the 'right' to education,
the 'right' to health care, the 'right' to food and housing. That's not
freedom, that's dependency. Those aren't rights, those are the rations
of slavery - hay and a barn for human cattle.
-- P.J. O'Rourke

Re: ServiceBase.Run(), but no OnStart()?

am 22.01.2008 18:29:36 von DFS

when a service is started a message is sent with a timeout by the
service manager. if the timeout happens the service is disabled (unknown
state). similarly on shutdown, a message is sent, and the service manger
awaits a response.

the messages are just global flags and polled, not ast routines, so
unless your service is multithreaded (a controller thread and an action
thread) any long running action (say a network access) can cause these
problems

-- bruce (sqlwork.com)



Jeff Dege wrote:
> I have a service, written in C# and .NET V2.0.50727, that works fine on
> some machines, but hangs on start on others.
>
> In MyService.Main(), I read the registry for a few initialization
> settings, most important of which for our purposes is the name of the
> logfile.
>
> I then create a new MyService object, and pass it to ServiceBase.Run().
> (MyService is, of course, derived from ServiceBase).
>
> I write a log message immediately before ServiceBase.Run(myServiceObject).
>
> MyService.OnStart(args) writes a log message immediately on being called.
>
> On the machines where this works, I see, in the logfile, the two messages
> one immediately following the other.
>
> On the machines where it does not, when I try to start the service, the
> progress bar seems to stop, half-way, then after a long wait, I get a
> failed to start dialog. In the Services Manager, the service displays a
> "Starting" status, with the start, restart, and stop buttons greyed out.
>
> If I try to remove the service, the Startup Type in the Services Manager
> changes to "Disabled", but MyServicee stays in the list. Nothing short
> of a reboot seems to work to get rid of it.
>
> Meanwhile, the logfile shows nothing after ServiceBase.Run(). Either
> MyService.OnStart() is not being called, or it's failing to write to the
> logfile.
>
> The event viewer shows only an uninformative message: "The MyService
> service terminated unexpectedly".
>
> I'm catching and logging all exceptions - none seem to be thrown.
>
> I have no idea what is going on, and have no idea at all as how to figure
> out what the problem is.
>
> Since it shows up on one machine, but not on another, my guess would be
> that it might be some sort of security or permissions issue. But guesses
> aren't of much help. Is there anyway of tracking what is going on? SCM
> is running into some sort of problem, where do I look to find out what it
> is?
>

Re: ServiceBase.Run(), but no OnStart()?

am 22.01.2008 19:19:08 von Jeff Dege

On Tue, 22 Jan 2008 09:29:36 -0800, bruce barker wrote:

> when a service is started a message is sent with a timeout by the
> service manager. if the timeout happens the service is disabled (unknown
> state). similarly on shutdown, a message is sent, and the service manger
> awaits a response.
>
> the messages are just global flags and polled, not ast routines, so
> unless your service is multithreaded (a controller thread and an action
> thread) any long running action (say a network access) can cause these
> problems
>

In my case, there's no long-running action. There's no action at all. I
spawn a working thread in the OnStart() event handler function, but I do
so after I've written the log message indicating that OnStart() has been
called.

And I can't see how it could be a problem with accessing the log file
itself, because the write to the log file immediately prior to the call
to ServiceBase.Run() succeeded without problems.

> Jeff Dege wrote:
>> I have a service, written in C# and .NET V2.0.50727, that works fine on
>> some machines, but hangs on start on others.
>>
>> In MyService.Main(), I read the registry for a few initialization
>> settings, most important of which for our purposes is the name of the
>> logfile.
>>
>> I then create a new MyService object, and pass it to ServiceBase.Run().
>> (MyService is, of course, derived from ServiceBase).
>>
>> I write a log message immediately before
>> ServiceBase.Run(myServiceObject).
>>
>> MyService.OnStart(args) writes a log message immediately on being
>> called.
>>
>> On the machines where this works, I see, in the logfile, the two
>> messages one immediately following the other.
>>
>> On the machines where it does not, when I try to start the service, the
>> progress bar seems to stop, half-way, then after a long wait, I get a
>> failed to start dialog. In the Services Manager, the service displays
>> a "Starting" status, with the start, restart, and stop buttons greyed
>> out.
>>
>> If I try to remove the service, the Startup Type in the Services
>> Manager changes to "Disabled", but MyServicee stays in the list.
>> Nothing short of a reboot seems to work to get rid of it.
>>
>> Meanwhile, the logfile shows nothing after ServiceBase.Run(). Either
>> MyService.OnStart() is not being called, or it's failing to write to
>> the logfile.
>>
>> The event viewer shows only an uninformative message: "The MyService
>> service terminated unexpectedly".
>>
>> I'm catching and logging all exceptions - none seem to be thrown.
>>
>> I have no idea what is going on, and have no idea at all as how to
>> figure out what the problem is.
>>
>> Since it shows up on one machine, but not on another, my guess would be
>> that it might be some sort of security or permissions issue. But
>> guesses aren't of much help. Is there anyway of tracking what is going
>> on? SCM is running into some sort of problem, where do I look to find
>> out what it is?
>>

--
He was a conservative in the sense that he believed civilization to be
something laboriously achieved which was only precariously defended. He
wanted to see the defences fully manned and he hated the liberals because
he thought them gullible and feeble, believing in the easy perfectibility
of man and ready to abandon the work of centuries for sentimental qualms.
- Evelyn Waugh on Rudyard Kipling