Bradley, Peter wrote:
I wonder if I might be forgiven for responding to myself in order to ask one
(hopefully final) question about mono-service?
Following the discussion here, I checked out some Windows services I've written and
everything seems fine except for one thing. The services I write are to host remote
objects. As a matter of policy we configure .NET remoting using configuration files.
Therefore host services contain a call to
RemotingConfiguration.Configure("config.file.name").
Under Windows, the config file must be copied to the WINDOWS\System32 (or
WINNT\System32) directory for it to be found by the service. Where should the
config file be located under Mono in order for the daemon to find it?
You don't have to place the config files in System32 for them to be
found, you can give a full path to the call to
RemotingConfiguration.Configure. I find the easiest way is to stick your
remoting config in with any other configuration you might have within an
application configuration file ("$assemblyname.config"). Are you
familiar with these? Just in case...
If using Visual Studio, you can add a new "Application Configuration
file" to your project (app.config), and place all config in there. At
compile time, a built-in build event will take care of copying this file
to your "bin" directory, and re-naming it "$assemblyname.config", for
example, "myservice.exe.config".
If your not using Visual Studio, then you can manage the config file
however you want, however it needs to end up in the same directory as
your executable, named the same as your executable but with ".config" on
the end, e.g. "myservice.exe.config". I tend to have an App.config in
the root of my executables project, and I get NAnt to copy the file over
to my "bin" directory and re-name it at compile time, just like VS.
Either way, once you have your correctly named configuration file
residing within the same directory as your executable, your call to
RemotingConfiguration.Configure becomes nice and easy:
RemotingConfiguration.Configure(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
This grabs the full path of the configuration file from the current app
domain, and should load your remoting configuration without problems.
You can then move the service around without issue, providing that the
config file stays with the executable ;-)
AFAIK this works just as well on Mono as it does on .Net.
Thanks for your patience.
Peter
Hope that helps!
-= El =-
-----Original Message-----
From: Jörg Rosenkranz [mailto:[EMAIL PROTECTED]
Sent: 01 November 2005 12:52
To: Bradley, Peter; Robert Jordan; mono-list@lists.ximian.com
Subject: RE: [Mono-list] Re: mono-service
Hi Peter,
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Bradley, Peter
Sent: Tuesday, November 01, 2005 1:26 PM
My post was not intended as a criticism of the man page, and I'm very
sorry if it appeared to be so. Perhaps I should have been
clearer, but
what I was really saying that what (I think) is needed is a HowTo.
Yes I think this is true. There needs to be something in the Wiki.
To answer some of your questions:
Does the process to be run as a daemon have to inherit from
System.ServiceProcess.ServiceBase? Does it guarantee that the
OnStart(), OnStop(), OnPause(), and OnContinue() methods get called as
appropriate?
The service has to be implemented according to the MS docs:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemserviceprocessservicebaseclasstopic.asp
and
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemserviceprocessservicebaseclassruntopic1.asp
Short: It needs to be inherited from ServiceBase and it needs to call
ServiceBase.Run in it's Main method.
What does one have to do make the service start
up at boot
time and run without a user logged in? (Your script is a
great help in
that regard. Thanks). What user does the service run as?
It runs as the user you are starting mono-service with. You
are responsible for switching the user in the start script.
Examples of start scripts should be in the Wiki/Doc/etc. too.
Maybe that's tootoo distribution specific to put it into SVN?
What changes
(if any) are required to assemblies written as Windows
services to make
sure they can run as daemons?
There are no changes needed if the assemblies are written
with the normal portability rules in mind. Mono-service
should mimic the behaviour of MS' implementation as close
as possible.
The OP obviously has trouble getting the OnStart() method
running. The
reason why might be contained in the answers to the questions I make
above.
Yes :-)
I'm perfectly happy to put my money where my mouth is as far as
producing a HowTo is concerned. Once I've got a daemon
running, I'll be
only too happy to explain how it was done. But I may need my hand
holding a little in the meantime :)
The man page is very basic and contains only information about
handling of services. There should be an article about implementation
of services too. I would be happy if you write a howto down.
Please ask if you have any questions.
Joerg.
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list