Forum: PC-Programmierung C# Service startet ohne Startparameter nicht


von Kevin (Gast)


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

von Peter II (Gast)


Lesenswert?

if (!(args == null)

args wird nie NULL sein auch wenn der Array leer ist. Damit knallt es 
hier:

args[0]

von Peter II (Gast)


Lesenswert?

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

von Kevin (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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
1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<dienstname>\Parameters

von Kevin (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.