远程系统上的端口可用性检查

时间:2012-01-03 05:16:26

标签: port nsis

如何在NSIS页面中判断本地或远程系统上的给定端口是否可用?

1 个答案:

答案 0 :(得分:0)

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(...)
    {
    }
}
}