Проверка доступности порта в удаленной системе - PullRequest
0 голосов
/ 03 января 2012

Как узнать, доступен ли данный порт в локальной или удаленной системе на странице NSIS?

1 Ответ

0 голосов
/ 04 января 2012

Abuot COM-порты:

Они не могут быть обнаружены непосредственно из NSIS, поэтому напишите простой модуль в C, который будет определять порт по его номеру.

Это моя основная идея:

void GetListOfLocalPorts(CList<CString, CString>& o_lstPorts)
{
for( int i = 1; i <= 99; i++ )
{
    DCB dcb;
    HANDLE hCom = NULL;
    BYTE byPort = (BYTE)i;

    CString strPort;
    strPort.Format("COM%d", i);

    CString strCom = (CString)"\\\\.\\" + strPort;
    SetErrorMode(SEM_FAILCRITICALERRORS);

    try
    {
        hCom = CreateFile(strCom, 0, 0, NULL, OPEN_EXISTING, 0, NULL);

        if (hCom == INVALID_HANDLE_VALUE) 
            continue;
        BOOL fSuccess = GetCommState(hCom, &dcb);
        CloseHandle(hCom);
        if (!fSuccess) 
            continue;

    // Port exists on this machine
        o_lstPorts.AddTail(strPort);
    }
    catch(...)
    {
    }
}
}
...