Pregunta

¿Hay una manera de crear un servicio usando C # capaces de comprobar si este cliente es abierto?

necesito trabajar una forma de automatizar que la comprobación.

¿Fue útil?

Solución

Si la ventana está abierta (no tiene por qué estar en foco) Se puede utilizar la llamada ventana de FindWindow de la user32.dll para comprobar la ventana. Cortar el código de abajo y colocar en los lugares correctos (para el uso, definir de la dllimport, y el código real). Esto le dirá si la ventana está abierta, hay mucho más que puede hacer con Windows llama.

using System.Runtime.InteropServices;

[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)] static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

IntPtr hWnd = FindWindowByCaption(IntPtr.Zero,"Cisco vpn title here");
if(hWnd.ToInt64() == 0){
    Console.WriteLine("ERROR Could not find cisco vpn.");
}else{
    Console.WriteLine("Handle found");
}

Otros consejos

El problema con este cliente es que su componente de interfaz gráfica de usuario "vpngui.exe" puede ser terminado (que no figura en la lista de procesos), pero la interfaz de red que había establecido permanecerá abierta.

Por lo tanto, su servicio no puede simplemente comprobar para ver si un proceso llamado vpngui.exe está vivo y coleando, primero hay que detectar si la interfaz de red está arriba. Esto se puede conseguir por cualquiera de comprobar que existe una entrada del registro que revela si el túnel está activo (ver a uno de mis otros mensajes para más detalles), o mediante la comprobación de la existencia de dicha interfaz (de nuevo, ver mi otro post).

Por lo tanto, lo que hay que hacer es 1) comprobar si el túnel está activo 2) (opcional) comprobar si GUI está activo

A continuación, puede decidir qué hacer a continuación, por ejemplo, podría desactivar la interfaz de red mediante el uso de Cisco VPN interfaz CLI de clientes (o cualquier otra ventana opción basada) y luego matar a la interfaz gráfica de usuario. Después de que se puede utilizar la interfaz CLI para iniciar una nueva instancia del cliente VPN que se conectará automáticamente a la cuenta / login / PCF que usted proporciona como un argumento para el comando CLI.

Aquí está un poco de código: esto va a comprobar para ver si la parte de interfaz gráfica de usuario de la historia está viva:

 Process[] processlist = Process.GetProcesses();
 string theProcessThatISeekIs = "";
                foreach (Process theprocess in processlist)  
                {
                    if (theprocess.ProcessName.ToString().ToLower() == NameOfTheProcessYouSeek.ToLower())
                    {

                        theProcessThatISeekIs = theprocess.ProcessName.ToString();
                        break;
                    }
                }

El siguiente código devolverá el nombre de la interfaz de red que está utilizando CISCO, si devuelve "NotFound" entonces la interfaz está desactivada.

string retVal = "";
        var nic = NetworkInterface
                  .GetAllNetworkInterfaces()
                  .Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback && i.NetworkInterfaceType != NetworkInterfaceType.Tunnel && i.Description == "Cisco Systems VPN Adapter");
        var name = nic.FirstOrDefault();
        if (name != null)
        {
            retVal = name.Name.ToString();

        }
        else
        {
            retVal = "NotFound";
        }
        return retVal;

Con estos dos fragmentos que debe ser así capaz de construir una solución a su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top