Frage

Gibt es eine Möglichkeit, einen Dienst mit C # der Lage zu überprüfen, zu erstellen, wenn dieser Client öffnen ist?

Ich brauche eine Art und Weise zu arbeiten, dass die Überprüfung zu automatisieren.

War es hilfreich?

Lösung

Wenn das Fenster geöffnet ist (muss nicht scharf gestellt ist) Sie können Find Fenster Anruf von der user32.dll verwenden, um auf das Fenster zu überprüfen. Schneiden Sie den Code unten und in den richtigen Stellen (für die Verwendung definiert den Dllimport, und der eigentliche Code). Dies wird Ihnen sagen, wenn das Fenster geöffnet ist, gibt es viel mehr ist, dass Sie mit Windows Anrufe tun können.

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

Andere Tipps

Das Problem mit diesem Client ist, dass seine GUI-Komponente „vpngui.exe“ beendet werden kann (nicht in der Liste der Prozesse aufgeführt), aber die Netzwerkschnittstelle, die es eingerichtet hatte bleiben offen.

Damit Ihr Dienst kann nicht einfach überprüfen, um zu sehen, ob ein Prozess namens vpngui.exe gesund und munter ist, müssen Sie zunächst feststellen, ob die Netzwerk-Schnittstelle aktiviert ist. Sie können dies für einen Registrierungseintrag, indem entweder die Überprüfung erreichen, die zeigt, ob der Tunnel aktiv ist (einer meiner anderen Beiträge für Details), oder durch das Vorhandensein der genannten Schnittstelle überprüft (siehe wiederum meine anderen post).

Also, was Sie tun müssen, ist zu 1) prüfen, ob der Tunnel aktiv ist 2) (optional) prüfen, ob GUI aktiv

Sie können dann entscheiden, was zum Beispiel als nächstes tun Sie die Netzwerkschnittstelle mithilfe von Cisco-VPN-Clients CLI-Schnittstelle (oder andere Windows-basierte Option) und dann töten sie die gui deaktivieren könnten. Danach könnten Sie die CLI-Schnittstelle verwenden, um eine neue Instanz der VPN-Clients zu starten, die automatisch auf das Konto / Login / PCF verbinden, die Sie als Argument Befehl an der CLI geben.

Hier ist ein Stück Code: dies überprüft, um zu sehen, ob der GUI-Teil der Geschichte ist lebendig:

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

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

Der folgende Code wird den Namen der Netzwerkschnittstelle zurück, die CISCO verwendet, wenn er zurückgeht „NotFound“, dann die Schnittstelle ausgeschaltet ist.

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;

Mit diesen beiden Schnipseln sollten Sie auch in der Lage sein, eine Lösung für Ihr Problem zu konstruieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top