質問
このクライアントがオープンであるかどうかを確認することができ、C#を使用してサービスを作成する方法はありますか?
私はそのチェックを自動化するように動作する必要があります。
解決
あなたは、ウィンドウ上で確認することuser32.dllのからのFindWindowウィンドウの呼び出しを使用することができます。正しい場所に以下のコードと場所まで切断(使用するために、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インターフェイス(または任意の他のウィンドウベースのオプション)を使用して、ネットワーク・インタフェースを無効にして、GUIを殺すことができ、次に何をすべきかを決めることができます。その後、あなたはCLIコマンドの引数として与えアカウント/ログイン/ PCFに自動的に接続するVPNクライアントの新しいインスタンスを起動する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;
}
}
次のコードは、それが「NOTFOUND」を返した場合、インターフェイスがオフで、CISCOが使用しているネットワークインタフェースの名前が返されます。
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;
これら二つのスニペットを使用すると、あなたの問題へのソリューションを構築することもできるはずです。