C# 完美实现VPN控制 联系客服

发布时间 : 星期五 文章C# 完美实现VPN控制更新完毕开始阅读a0f70575a417866fb84a8edf

if (allUsersPhoneBook.Entries.Contains(updateVPNname)) {

allUsersPhoneBook.Entries[updateVPNname].PhoneNumber = updateVPNip;

// 不管当前VPN是否连接,服务器地址的更新总能成功,如果正在连接,则需要VPN重启后才能起作用

allUsersPhoneBook.Entries[updateVPNname].Update(); }

// 创建一个新VPN else {

RasEntry entry = RasEntry.CreateVpnEntry(updateVPNname, updateVPNip, RasVpnStrategy.PptpFirst, RasDevice.GetDeviceByName(\, RasDeviceType.Vpn));

allUsersPhoneBook.Entries.Add(entry);

dialer.EntryName = updateVPNname;

dialer.PhoneBookPath =

RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers); } }

///

/// 删除指定名称的VPN

/// 如果VPN正在运行,一样会在电话本里删除,但是不会断开连接,所以,最好是先断开连接,再进行删除操作

///

///

RasDialer dialer = new RasDialer();

RasPhoneBook allUsersPhoneBook = new RasPhoneBook(); allUsersPhoneBook.Open();

if (allUsersPhoneBook.Entries.Contains(delVpnName)) {

allUsersPhoneBook.Entries.Remove(delVpnName); } }

///

/// 获取当前正在连接中的VPN名称 ///

public List GetCurrentConnectingVPNNames() {

List ConnectingVPNList = new List();

Process proIP = new Process();

proIP.StartInfo.FileName = \; proIP.StartInfo.UseShellExecute = false; proIP.StartInfo.RedirectStandardInput = true; proIP.StartInfo.RedirectStandardOutput = true; proIP.StartInfo.RedirectStandardError = true;

proIP.StartInfo.CreateNoWindow = true;//不显示cmd窗口 proIP.Start();

proIP.StandardInput.WriteLine(RasDialFileName); proIP.StandardInput.WriteLine(\);

// 命令行运行结果

string strResult = proIP.StandardOutput.ReadToEnd(); proIP.Close();

Regex regger = new Regex(\已连接\\r\\n)(.*\\n)*(?=命令已完成)\, RegexOptions.Multiline);

// 如果匹配,则说有正在连接的VPN if (regger.IsMatch(strResult)) {

string[] list = regger.Match(strResult).Value.ToString().Split('\\n'); for(int index = 0 ; index < list.Length;index++) {

if (list[index]!=string.Empty)

ConnectingVPNList.Add(list[index].Replace(\,\)); } }

// 没有正在连接的VPN,则直接返回一个空List return ConnectingVPNList; } } }

该类可以方便的对VPN进行【增】,【删】,【改】,【连接】,【断开】操作,在操作前后可以用

GetCurrentConnectingVPNNames方法来得到正在使用中的VPN名称列表,这样一来,可以轻松判断【连接】或【断开】是否成功执行。

当然,鉴于【连接】,【断开】操作有一定的延迟,建议操作执行后等待一定时间,再使用GetCurrentConnectingVPNNames方法来查看执行结果

文章摘自:pettypower’s blog

http://blog.sina.com.cn/s/blog_6221a3490100kpka.html 转载请说明出处