有没有一种方法能够使用C#检查,如果这个客户是打开创建一个服务?

我需要工作的方式来自动执行检查。

有帮助吗?

解决方案

如果窗口开启(并不需要成为关注焦点)您可以使用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");
}

其他提示

与该客户的问题是,它的GUI组件“vpngui.exe”可被终止(在进程列表中未列出),但它已建立的联网接口将保持打开。

因此,你的服务不能简单地检查,看看工艺命名vpngui.exe是否是活蹦乱跳的,首先你要检测网络接口是否启动。您可以通过检查,揭示了隧道是否是活动(详情请参阅我的其他职位之一)一个注册表项,或通过检查所述接口的存在(再次看到我的其他职位)实现这一点。

所以,你需要做的是 1)检查隧道是否处于活动状态 2)(任选)检查GUI是否是活动的

您可以再决定下一步做什么,比如你可以通过使用Cisco VPN客户端CLI界面(或任何其他基于Windows的选择)禁用网络接口,然后杀鬼。之后,你可以使用命令行界面来启动VPN客户端的新实例,它会自动连接到该帐户/登录/ PCF您提供作为参数到CLI命令。

下面有一个比特的代码:这将检查故事的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