consultar-servidor-de-licencias-flexlm-desde-c

Consultar servidor de licencias FlexLM desde C#

FlexLM es un software de supervisión de licencias ampliamente extendido en el mundo corporativo. FlexLM es empleado por importantes empresas de software para gestionar el uso de sus licencias flotantes, especialmente en el caso de programas de CAD.

En ocasiones resulta útil poder ejecutar consultas a un servidor FlexLM para obtener información sobre las licencias en uso y disponibles en el servidor, para un software específico. Por ejemplo, podemos usarlo para balancear la carga de usuarios entre servidores de licencias, hacer estadísticas de uso de software, o analizar pautas de comportamiento en usuarios.

En esta entrada compartimos un código en C# para realizar consultas sobre a un servidor FlexLM. La información obtenida puede ser tratada para obtener los datos que necesite vuestra aplicación.

Para hacer la consulta tenemos esta función.

private string queryFLEXLMLicense(string flexLMPath, string port, string host, string license)
{
    string rdo = "";
    string args = String.Format("lmstat -c {0}@{1} -f {2}", port, host, license);

    ProcessStartInfo info = new ProcessStartInfo(flexLMPath, args);
    info.WindowStyle = ProcessWindowStyle.Hidden;
    info.UseShellExecute = false;
    info.RedirectStandardOutput = true;

    using (Process p = Process.Start(info))
    {
        string output = p.StandardOutput.ReadToEnd();

        // standard output must be read first; wait max 5 minutes
        if (p.WaitForExit(300000))
        {
            p.WaitForExit();
        }
        else
        {
            // kill the lmstat instance and move on
            p.Kill();
            p.WaitForExit();
        }
        rdo += output;
    }
}

Aquí tenemos un ejemplo de su uso, donde tendréis que sustituir los valores empleados por los de vuestra instalación.

public void main()
{

    string flexLMPath = @"C:\Program Files\flexLM\lmutil.exe";   //sustituir con la ruta de lmutil.exe en vuestro PC
    string port = "27001";
    string host = "XXX.YYY.com";    //sustituir con la dirección del servidor de licencias
    string license = "ZZZ";        //sustituir con el nombre de la licencia a consultar
    
    string license = queryLicenses(flexLMPath, port, host, license);
}