Проблема следующая: При попытке получать асинхронно события с удаленного компьютера в сети происходит ошибка 0x80070005 (E_ACCESSDENIED), т.е. отказано в доступе. Хотя если просто пытаюсь получить единоразово событие, к примеру запуск notepad.exe на удаленном компьютере то все нормально. Пример кода получения события запуска процесса: Код | using System; using System.Management;
// This example shows synchronous consumption of events. // The client is blocked while waiting for events.
public class EventWatcherPolling { public static int Main(string[] args)
{ ConnectionOptions options = new ConnectionOptions(); options.Username = "test"; options.Password = "test123";
ManagementScope scope = new ManagementScope( "\\\\192.168.0.102\\root\\cimv2", options); scope.Connect();
// Create event query to be notified within 1 second of // a new process being created WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\"");
// Initialize an event watcher and subscribe to events // that match this query ManagementEventWatcher watcher = new ManagementEventWatcher(scope,query); // times out watcher.WaitForNextEvent in 5 seconds //watcher.Options.Timeout = new TimeSpan(0, 0, 5);
// Block until the next event occurs // Note: this can be done in a loop if waiting for // more than one occurrence Console.WriteLine( "Open an application (notepad.exe) to trigger an event."); ManagementBaseObject e = watcher.WaitForNextEvent();
//Display information from the event Console.WriteLine( "Process {0} has been created, path is: {1}", ((ManagementBaseObject)e ["TargetInstance"])["Name"], ((ManagementBaseObject)e ["TargetInstance"])["Caption"]); Console.ReadLine(); //Cancel the subscription watcher.Stop(); return 0; } }
|
Тут все нормально, запускаю на компьютере с ip=192.168.0.102 notepad.exe и получаю об этом событии в консоли уведомление. А если пытаюсь получать асинхронно: Код | using System; using System.Management; //using System.Windows.Forms;
namespace WMISample { public class WMIReceiveEvent { public WMIReceiveEvent() { try { ConnectionOptions options = new ConnectionOptions(); options.Username = "test"; options.Password = "test123";
ManagementScope scope = new ManagementScope( "\\\\192.168.0.102\\root\\cimv2", options); scope.Connect();
// Create event query to be notified within 1 second of // a new process being created // WqlEventQuery query = // new WqlEventQuery("__InstanceCreationEvent", //"TargetInstance isa \"Win32_Process\""); WqlEventQuery query = new WqlEventQuery( "SELECT * FROM __InstanceCreationEvent WITHIN 10");
// WqlEventQuery query = new WqlEventQuery( // "SELECT * FROM __InstanceCreationEvent WITHIN 10");
ManagementEventWatcher watcher = new ManagementEventWatcher(scope,query); Console.WriteLine("Waiting for an event...");
watcher.EventArrived += new EventArrivedEventHandler( HandleEvent);
// Start listening for events watcher.Start();
// Do something while waiting for events System.Threading.Thread.Sleep(10000);
// Stop listening for events watcher.Stop(); return; } catch (ManagementException err) { Console.Write("An error occurred while trying to receive an event: " + err.Message); } }
private void HandleEvent(object sender, EventArrivedEventArgs e) { Console.WriteLine("__InstanceCreationEvent event occurred."); }
public static void Main() { WMIReceiveEvent receiveEvent = new WMIReceiveEvent(); return; }
} }
|
то на этапе: Вылетает ошибка: Код | UnauthorizedAccessExeption не обработано. Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))
|
Непойму почему... может кто-нибудь подсказать?
|