Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.82.21] |
|
Сообщ.
#1
,
|
|
|
Проблема следующая: При попытке получать асинхронно события с удаленного компьютера в сети происходит ошибка 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", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Process\""); // 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; } } } то на этапе: watcher.Start(); Вылетает ошибка: UnauthorizedAccessExeption не обработано. Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) Непойму почему... может кто-нибудь подсказать? |