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?