문제

C#을 사용하여 서비스를 만들 수있는 방법이 있습니까?이 클라이언트가 열려 있는지 확인할 수 있습니까?

해당 점검을 자동화하는 방법을 작업해야합니다.

도움이 되었습니까?

해결책

창이 열려있는 경우 (초점을 맞출 필요가 없음) user32.dll에서 FindWindow 창을 사용하여 창을 확인할 수 있습니다. 아래 코드를 잘라 내고 올바른 장소에 배치하십시오 (Dllimport의 사용, 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");
}

다른 팁

이 클라이언트의 문제점은 GUI 구성 요소 "vpngui.exe"를 종료 할 수 있지만 (프로세스 목록에 나열되지 않음) 설정된 네트워킹 인터페이스는 열려 있다는 것입니다.

따라서 서비스는 vpngui.exe라는 프로세스가 살아 있고 발 차기인지 확인하기 위해 단순히 확인할 수 없습니다. 터널이 활성화되어 있는지 (자세한 내용은 내 다른 게시물 중 하나 참조), 상기 인터페이스의 존재를 확인하여 (다시, 다른 게시물 참조) 레지스트리 항목을 확인하여이를 달성 할 수 있습니다.

따라서, 당신이해야 할 일은 1) 터널이 활성인지 확인 2) (선택 사항) GUI가 활성화되어 있는지 확인하십시오.

그런 다음 다음에 수행 할 작업을 결정할 수 있습니다. 예를 들어 Cisco VPN Clients CLI 인터페이스 (또는 기타 Windows 기반 옵션)를 사용하여 네트워킹 인터페이스를 비활성화 한 다음 GUI를 죽일 수 있습니다. 그런 다음 CLI 인터페이스를 사용하여 CLI 명령에 대한 인수로 제공하는 계정/로그인/PCF에 자동으로 연결되는 VPN 클라이언트의 새 인스턴스를 시작할 수 있습니다.

그녀는 약간의 코드 : 이것은 이야기의 GUI 부분이 살아 있는지 확인할 것입니다.

 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;

이 두 스 니펫을 사용하면 문제에 대한 해결책을 구성 할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top