Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WMI: проблема с асинхронным мониторингом событий, ошибка 0x80070005 (E_ACCESSDENIED) 
:(
    Опции темы
arsenium
Дата 1.5.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Проблема следующая: При попытке получать асинхронно события с удаленного компьютера в сети происходит ошибка 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;
        }

    }
}

то на этапе: 
Код

        watcher.Start();


Вылетает ошибка: 
Код

UnauthorizedAccessExeption не обработано.
Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) 


Непойму почему... может кто-нибудь подсказать?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0754 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.