Question

Y at-il un moyen de créer un service utilisant C # en mesure de vérifier si le client est ouvert?

Je dois travailler un moyen d'automatiser que la vérification.

Était-ce utile?

La solution

Si la fenêtre est ouverte (n'a pas besoin d'être mise au point) Vous pouvez utiliser l'appel de la fenêtre FindWindow du user32.dll pour vérifier la fenêtre. Coupez le code ci-dessous et dans les bons endroits (pour l'utilisation de, définir des dllimport et le code réel). Cela vous dira si la fenêtre est ouverte, il y a beaucoup plus que vous pouvez faire des appels 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");
}

Autres conseils

Le problème avec ce client est que sa composante GUI « vpngui.exe » peut être mis fin (ne figurant pas dans la liste des processus), mais l'interface de réseau qu'il avait créé reste ouvert.

Par conséquent, votre service ne peut pas vérifier simplement de voir si un processus nommé vpngui.exe est vivant et coups de pied, vous devez d'abord détecter si l'interface de gestion du réseau est. Vous pouvez y parvenir en soit la vérification d'une entrée de registre qui indique si le tunnel est actif (voir un de mes autres postes pour plus de détails), ou en vérifiant l'existence de ladite interface (encore une fois, voir mon autre post).

Alors, ce que vous devez faire est de 1) vérifier si le tunnel est actif 2) (en option) vérifier si GUI est active

Vous pouvez alors décider quoi faire, par exemple, vous pouvez désactiver l'interface réseau à l'aide des clients VPN cisco interface CLI (ou toute autre fenêtre option basée), puis tuer le IUG. Après cela, vous pouvez utiliser l'interface CLI pour démarrer une nouvelle instance du client VPN qui se connecte automatiquement au compte / login / pcf que vous fournissez comme argument à la commande CLI.

Heres un peu de code: il vérifiera si la partie graphique de l'histoire est vivante:

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

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

Le code suivant retourne le nom de l'interface réseau CISCO utilise, si elle retourne « NotFound », puis l'interface est désactivée.

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;

Avec ces deux extraits, vous devriez être en mesure de bien construire une solution à votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top