C# Service startet ohne Startparameter nicht

Gast #4016407
Lesenswert?

Hallo!

Ich habe aktuell ein kleines Problem einen Dienst ohne Startparameter zu 
starten. Leider finde ich den Fehler nicht... Kann mir jemand auf die 
Sprünge helfen?
1
        protected override void OnStart(string[] args)
2
        {
3
           
4
            Logwriter.writetoLog("Der Dienst wird gestartet...");
5
            const string KeyPath = "HKEY_CURRENT_USER\\SOFTWARE\\TestBridge\\";   //KeyPath wird benötigt, um zu schauen ob der Dienst schon einmal einen alten Startparameter gesetzt bekommen hat
6
         
7
            //Startparameter auslesen
8
            if (!(args == null) ) //Wenn Startparameter angegeben wurden ...
9
            {
10
                if (System.IO.Directory.Exists(args[0]))
11
                {
12

13
                    RegistryClass.WriteRegistry(KeyPath, args[0]); //Pfad in Registry speichern                     
14
Process_Bridge.start(args[0]); //Eigentlichen Dienst starten
15
                    
16
                }
17
                else //wenn der Pfad ungültig ist, können wir den Dienst gleich wieder beenden...
18
                {
19
                    OnStop();
20
                }
21
            }
22
            else if (args == null || args.Length == 0) //Wenn keine Startparameter übergeben worden, sollten wir überprüfen, ob der Dienst vielleicht schon einmal gestartet wurde und seinen Path aus der Registry auslesen kann   
23
            {
24

25
                Process_Bridge.start(@"C:\release test\"); //Wurde nur für Testzwecke verwendet und dafür der eigentliche Code auskommentiert...
26

27
                /*if (RegistryClass.ReadRegistry(KeyPath) == "NULL") //Wenn es auch keinen RegistryKey gibt, Dienst beenden
28
                {
29
                    Logwriter.writetoLog("RegistryKey nicht gefunden");
30
                    OnStop(); 
31
                }
32
                else
33
                {
34
                    Logwriter.writetoLog("Registrykey gefunden: " + RegistryClass.ReadRegistry(KeyPath));
35
                    Process_Bridge.start(RegistryClass.ReadRegistry(KeyPath)); //ansonsten nehmen wir den bekannten Wert
36
                }*/
37
            }
38
           
39
        }

Da ich leider keine Fehlermeldung gespuckt bekomme, außer dass der 
Dienst beim starten direkt wieder beendet wird, hatte ich vermutet das 
der Fehler beim Registrylesen auftritt... Dies ist aber nicht der Fall.

Aber wo ist mein Fehler?

Wenn ich den Dienst allerdings mit Startparameter "C:\release test\" 
starte, funktioniert alles wie gewünscht.


Gruß,
Kevin
Gast #4016446
Lesenswert?

Peter II schrieb:
> if (!(args == null)
>
> args wird nie NULL sein auch wenn der Array leer ist. Damit knallt es
> hier:
>
> args[0]

Ich danke dir... Manchmal steht man einfach auf dem Schlauch...

Peter II schrieb:
> du könntest ja mal eine Fehlerbehandlung mit Try catch einbauen,
> dann
> wüsstest du auch was schief läuft.

Werde ich in Zukunft berücksichtigen ;-)



Falls jemand nochmal ein ähnliches Problem haben sollte: Die Lösung ist 
das Array auf die Länge zu überprüfen und nicht auf Null.
Gast #4017882
Lesenswert?

Rufus Τ. Firefly schrieb:
>> HKEY_CURRENT_USER\\SOFTWARE\\TestBridge\\
>
> Bist Du Dir mit diesem Registry-Key sicher? Dienste laufen durchaus
> nicht unbedingt in normalen Benutzerkonten, und der Standard-Key für
> Dienstekonfigurationsparameter ist
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<dienstname>\Parame ters

Danke für diesen Hinweis. Ich werde den Keypfad im Release wohl 
umstellen, hatte den Key nur zum Testen genutzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren