Cisco VPN Client версии 4.8 - PullRequest
       14

Cisco VPN Client версии 4.8

0 голосов
/ 17 февраля 2009

Есть ли способ создать службу с помощью C #, чтобы проверить, открыт ли этот клиент?

Мне нужно найти способ автоматизировать эту проверку.

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Проблема с этим клиентом заключается в том, что его компонент графического интерфейса «vpngui.exe» может быть прерван (не указан в списке процессов), но созданный им сетевой интерфейс останется открытым.

Следовательно, ваша служба не может просто проверить, запущен ли процесс с именем vpngui.exe, и сначала нужно определить, работает ли сетевой интерфейс. Вы можете достичь этого, либо проверив наличие записи в реестре, которая показывает, активен ли туннель (см. Подробности в одном из моих других постов), либо проверив наличие указанного интерфейса (снова см. Мой другой пост). *

Итак, что вам нужно сделать, это 1) проверьте, активен ли туннель 2) (необязательно) проверить, активен ли GUI

Затем вы можете решить, что делать дальше, например, вы можете отключить сетевой интерфейс, используя интерфейс CLI VPN-клиентов cisco (или любой другой параметр на основе Windows), а затем убить графический интерфейс. После этого вы можете использовать интерфейс CLI для запуска нового экземпляра VPN-клиента, который автоматически подключится к учетной записи / login / pcf, которую вы указали в качестве аргумента для команды CLI.

Вот немного кода: он проверит, жива ли часть истории с графическим интерфейсом:

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

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

Следующий код вернет имя сетевого интерфейса, который использует CISCO, если он возвращает «NotFound», то интерфейс отключен.

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;

С помощью этих двух фрагментов вы сможете найти решение вашей проблемы.

2 голосов
/ 17 февраля 2009

Если окно открыто (не должно быть в фокусе) Вы можете использовать вызов окна FindWindow из user32.dll, чтобы проверить окно. Сократите код ниже и поместите в правильные места (для использования определите dllimport и фактический код). Это скажет вам, если окно открыто, есть намного больше, что вы можете сделать с вызовами 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");
}
...