Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit Service und ManagementEventWatcher
Caturix
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Problem mit Service und ManagementEventWatcher

beantworten | zitieren | melden

Hallo Leute!

Ich programmiere gerade einen Windows-Dienst mit C#. Dabei bin ich auf folgendes Problem gestossen:

Hier der Code meiner OnStart-Methode:

        protected override void OnStart(string[] args)
        {
            RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Control", false);

            WqlEventQuery eq = new WqlEventQuery(" __instancecreationevent",
            new TimeSpan(0, 0, 1), "targetinstance ISA 'win32_process' and targetinstance.name = '" + rk.GetValue("Process").ToString() + "'  ");
            ManagementEventWatcher watcher = new ManagementEventWatcher(eq);
            watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            
            watcher.Start();
            timer.Enabled = true;
            timer.Start();
        }

Starte ich meinen Service manuell so funktioniert alles. Ich ändere nun den Starttyp auf "Automatisch". Starte ich nun meine Maschine neu, so tritt beim Start des Service ein Fehler auf, welcher im Event Viewer folgendermassen beschrieben ist:
Service cannot be started. System.Runtime.InteropServices.COMException (0x80010002): Call was canceled by the message filter. (Exception from HRESULT: 0x80010002 (RPC_E_CALL_CANCELED))
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Management.ManagementScope.InitializeGuts(Object o)
   at System.Management.ManagementScope.Initialize()
   at System.Management.ManagementEventWatcher.Initialize()
   at System.Management.ManagementEventWatcher.Start()
   at ResControl.ResControl.OnStart(String[] args)
   at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

Ich folgere daraus, dass das Problem etwas mit dem Eventwatcher zu tun hat. Allerdings sehe ich nicht, was ich falsch mache. Könnt ihr mir da weiterhelfen?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Caturix,

hm, sieht so aus, als würde schon beim Starten des Watchers das Problem entstehen und nicht erst, wenn Events kommen. Lass die += Zeile trotzdem mal weg, um zu sehen, ob dein EventHandler was damit zu tun hat.

herbivore
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1.529
Herkunft: Berlin, Germany

beantworten | zitieren | melden

Es ist auch möglich, dass benötigte andere Dienste (wie z.Bsp. das Ereignisprotokoll oder der RPC-Server) noch nicht gestartet wurden. Du müsstest dann in deinem Dienst angeben, dass er von diesen Diensten abhängig ist, damit er erst danach gestartet wird (ServiceInstaller.ServicesDependedOn).
private Nachricht | Beiträge des Benutzers
Caturix
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für eure Tipps!

Das Problem war nun tatsächlich die Abhängigkeit meines Service in Bezug auf andere Dienste (RPC, WMI). Nun läuft alles einwandfrei.
private Nachricht | Beiträge des Benutzers
TSMike
myCSharp.de - Member



Dabei seit:
Beiträge: 55
Herkunft: Schweiz

Sprachabhängigkeit

beantworten | zitieren | melden

ServicesDependedOn ist ja schön und gut aber wie mache ich dass mit den Abhängigkeiten wenn ich den Service auf verschiedene Systeme installiere die Japanisch, Türkisch, Englisch oder Deutsch sein können???

Bin grade bei diesem Problem.

"Workstation" heisst im Deutschen System "Arbeitsstation".

Muss ich da wirklich für jede Sprache andere Abhängigkeiten im String angeben?

Gruss
Mike
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von TSMike am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo TSMike,

ich gehe davon aus, dass die englischen Namen überall funktionieren.

herbivore
private Nachricht | Beiträge des Benutzers
TSMike
myCSharp.de - Member



Dabei seit:
Beiträge: 55
Herkunft: Schweiz

beantworten | zitieren | melden

Hallo Herbievore

Das dachte ich auch aber es geht nicht.

Im Eventlog steht geschrieben dass "Workstation" Service nicht gefunden wrude und daher auch der Service nicht gestartet werden kann. Dass Passiert bei Vista Ultimate wenn es auf Deutsch eingestellt ist.

Bei XP konnte ich dass noch nicht testen.

Gruss
Mike
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1.529
Herkunft: Berlin, Germany

beantworten | zitieren | melden

Du darfst ja auch nicht den angezeigten Namen verwenden, sondern den Dienstnamen. Und der lautet für Workstation bzw. Arbeitsstationsdienst halt "lanmanworkstation"...
private Nachricht | Beiträge des Benutzers
TSMike
myCSharp.de - Member



Dabei seit:
Beiträge: 55
Herkunft: Schweiz

beantworten | zitieren | melden

@Borg genau das war der Fehler. Habe es jetzt korrigiert. Danke.
private Nachricht | Beiträge des Benutzers