Ik ben bezig met mijn eerste windows service; tijdens het starten van de service wordt er gecontroleerd of een configuratie file bestaat. Als deze niet bestaat, wordt een entry geschreven naar een specifieke log en de service gestopt met this.Stop(). Dit werkt met een klein schoonheidsfoutje; in de application log wordt eerst geschreven dat de service succesvol beeindigd is en daarna dat de service succesvol gestart is; ik begrijp waarom maar het is verwarrend voor een gebruiker die de log bekijkt.
Zijn er manieren om dit iets netter op te lossen of moet ik hier mee leren leven? Het gooien van een exception is een optie, maar vind ik wat lomp.
Alternatieven die ik ben tegengekomen zijn het starten van een thread (een timer thread zal toch gestart moeten worden voor de functionaliteit, dus niet veel extra werk) en daar de boel de mist in laten gaan en een exception te gooien of de service te stoppen op een of andere manier (nog niet uitgevogeld hoe maar dat doet momenteel niet zo veel terzake). Is dat de betere manier?
Bedankt voor het lezen, meedenken en de mogelijke antwoorden.
PS sorry voor de mix van engels en nederlands.
Zijn er manieren om dit iets netter op te lossen of moet ik hier mee leren leven? Het gooien van een exception is een optie, maar vind ik wat lomp.
Alternatieven die ik ben tegengekomen zijn het starten van een thread (een timer thread zal toch gestart moeten worden voor de functionaliteit, dus niet veel extra werk) en daar de boel de mist in laten gaan en een exception te gooien of de service te stoppen op een of andere manier (nog niet uitgevogeld hoe maar dat doet momenteel niet zo veel terzake). Is dat de betere manier?
Bedankt voor het lezen, meedenken en de mogelijke antwoorden.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| protected override void OnStart(string[] args) { string eventsource = "ccmsgen"; string eventlog = "ccmsgenlog"; eventLog1.WriteEntry("starting ccmsgenerator service"); // configuration directory and filepath // see http://blogs.msdn.com/b/patricka/archive/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions.aspx string appcfgdir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData); if (args.Length == 0) { globals.configurationdirectory = appcfgdir + Path.DirectorySeparatorChar + "ccmsGenerator"; globals.configurationfilepath = globals.configurationdirectory + Path.DirectorySeparatorChar + "ccms.cfg"; } else { globals.configurationfilepath = args[0]; globals.configurationdirectory = Path.GetDirectoryName(globals.configurationfilepath); } if (File.Exists(globals.configurationfilepath) == false) { eventLog1.Source = eventsource; eventLog1.Log = eventlog; eventLog1.WriteEntry("Could not find configuration file '" + globals.configurationfilepath + "'"); this.Stop(); // throw new System.IO.FileNotFoundException("Could not find configuration file '" + globals.configurationfilepath + "'"); } else { eventLog1.Source = eventsource; eventLog1.Log = eventlog; eventLog1.WriteEntry("ccmsgenerator service started"); } } |
PS sorry voor de mix van engels en nederlands.