Что минимальные полномочия состоят в том, чтобы считать класс WMI 'MSSerial_PortName'?

Вы говорите, что попробовали Nagios, но по-видимому не получили результаты, которыми Вы были после. Nagios сделает то, что Вы хотите, как будет много альтернатив, но необходимо вставить немного усилия изучить, как настроить его. Если Вы хотите что-то, что "просто работает", Вы находитесь в для некоторых плохих новостей. Все системы контроля требуют конфигурации. Усилие, потраченное в изучении хорошей системы, такой как Nagios, будет больше, чем возмещено результатами, которые это может дать.

Я предлагаю иметь другой взгляд на то, что Вы уже попробовали, но на этот раз медленно берете его. Не пытайтесь создать все пение всей системы танца с нуля. Создайте что-то для контроля нескольких простых вещей сначала. Затем когда Вы понимаете, как получить то, что Вы хотите из него, остальных будет намного легче настроить, и система вырастет. После того как Вы получаете хорошее начало, Вы можете быть удивлены, сколько можно сделать с хорошей системой контроля и сколько из времени это освободит.

7
задан 23 May 2017 в 15:41
2 ответа

Сегодня я попал в ту же стену. У меня это временно работает ...

catch (ManagementException ex)
{
    Debug.WriteLine( string.Format( "##DBG An error occurred while querying for WMI data to find available COM ports:\n Message: {0}\n Stacktrace: {1}",  ex.Message, ex.StackTrace) );

    bool bSucceed = true;

    // TODO Q&D solutions. As it does not work as expected (on windows 7 ) we create our ow default list here and check if we can open the ports
    for (int x = 1; x <= 9; x++)
    {
        bSucceed = true;
        cComportName = string.Format("COM{0}", x);

        /////////////////////
        // Check if we can open it here

        // Set the port's settings
        m_comport.BaudRate = 9600; 
        m_comport.DataBits = 8; // int.Parse(cmbDataBits.Text);
        m_comport.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1" );
        m_comport.Parity = (Parity)Enum.Parse(typeof(Parity), "None" );
        m_comport.PortName = cComportName;
        try
        {
            // Open the port
            m_comport.Open();
        }
        catch (UnauthorizedAccessException) { bSucceed = false; }
        catch (IOException) { bSucceed = false; }
        catch (ArgumentException) { bSucceed = false; }

        if (bSucceed) 
        {
            m_comport.Close();
            m_listComPorts.Add(new string[ConstComPortAttr.COMPORT_MAX_COLUMNS] { cComportName, cInstanceName });
        }

    }
1
ответ дан 2 December 2019 в 23:52

Я нашел другой способ в PowerShell, и он не требует прав администратора:

PS> Get-WmiObject -Namespace root/cimv2 -Class Win32_PnPEntity -Filter "ClassGuid='{4d36e978-e325-11ce-bfc1-08002be10318}'"

К сожалению, он не дает вам имя порта в форме COMx, но с помощью простого анализа текста вы сможете для извлечения имени порта из имени устройства.

0
ответ дан 2 December 2019 в 23:52

Теги

Похожие вопросы