C# Service startet ohne Startparameter nicht

Gast #4016407
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.