Laden...

Problem mit Service und ManagementEventWatcher

Erstellt von Caturix vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.778 Views
C
Caturix Themenstarter:in
2 Beiträge seit 2007
vor 17 Jahren
Problem mit Service und ManagementEventWatcher

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?

49.485 Beiträge seit 2005
vor 17 Jahren

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

B
1.529 Beiträge seit 2006
vor 17 Jahren

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).

C
Caturix Themenstarter:in
2 Beiträge seit 2007
vor 17 Jahren

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.

T
55 Beiträge seit 2005
vor 17 Jahren
Sprachabhängigkeit

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

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo TSMike,

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

herbivore

T
55 Beiträge seit 2005
vor 17 Jahren

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

B
1.529 Beiträge seit 2006
vor 17 Jahren

Du darfst ja auch nicht den angezeigten Namen verwenden, sondern den Dienstnamen. Und der lautet für Workstation bzw. Arbeitsstationsdienst halt "lanmanworkstation"...

T
55 Beiträge seit 2005
vor 17 Jahren

@Borg genau das war der Fehler. Habe es jetzt korrigiert. Danke.