Domanda

C'è un modo per creare un servizio utilizzando C # in grado di verificare se questo client è Open?

ho bisogno di lavorare un modo per automatizzare che il controllo.

È stato utile?

Soluzione

Se la finestra è aperta (non ha bisogno di essere a fuoco) Si potrebbe utilizzare chiamata finestra FindWindow dal user32.dll per controllare sulla finestra. Tagliare il codice posto sotto e nei posti corretti (per l'uso, definire il dllimport, e il codice effettivo). Questo vi dirà se la finestra è aperta, c'è molto di più si può fare con le chiamate di Windows.

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");
}

Altri suggerimenti

Il problema di questo client è che la sua componente GUI "vpngui.exe" può essere terminata (non elencati nella lista dei processi), ma l'interfaccia di rete che aveva stabilito rimarrà aperto.

Quindi, il servizio non può semplicemente verificare se un processo chiamato vpngui.exe è vivo e vegeto, in primo luogo si deve rilevare se l'interfaccia di rete è in su. È possibile raggiungere questo obiettivo sia il controllo per una voce di registro che rivela se il tunnel è attivo (vedere uno dei miei altri post per i dettagli), o verificando l'esistenza della detta interfaccia (ancora una volta, vedere il mio altro post).

Quindi, che cosa dovete fare è quello di 1) verificare se il tunnel è attivo 2) (opzionale) verificare se GUI è attiva

È possibile poi decidere cosa fare dopo, per esempio, si potrebbe disabilitare l'interfaccia di rete utilizzando l'interfaccia di Cisco VPN client CLI (o tutte le altre finestre opzione based) e poi uccidere la gui. Dopo di che è possibile utilizzare l'interfaccia CLI per avviare una nuova istanza del client VPN che si collegherà automaticamente sul conto / login / PCF che fornite come argomento per il comando CLI.

Ecco un po 'di codice: questo sarà verificare se la parte grafica della storia è viva:

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

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

Il seguente codice restituirà il nome dell'interfaccia di rete che Cisco sta usando, se restituisce "NotFound", allora l'interfaccia è spento.

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 questi due frammenti si dovrebbe essere in grado di costruire una soluzione al vostro problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top