从应用程序断开OpenVpn的问题

时间:2011-02-08 11:10:21

标签: c# connection openvpn disconnect

我想使用C#通过openvpn连接远程服务器。我能够成功连接它。但断开连接似乎无法正常工作。 关闭我的应用后,我无法访问互联网。我必须手动禁用TAP适配器,然后再次启用应用程序。 我检查了我的“路线打印”,是的,Tap正在提前上网,因此无法访问网络。

我连接使用: openvpn --config client.ovpn --ca certificate.cer --auth-user-pass user.txt

我的断开代码是:

    public void DisconnectServer()
    {
        // Write the logs
        if (sb != null)
            IOUtility.WriteToFile(sb.ToString(), "ConnectionLogs.log");
        processInfo = null;
        if (process != null)
        {
            //process.Close();
            if (!process.HasExited)
            {
                process.CancelOutputRead();
                ProcessThreadCollection ptc = process.Threads;
                Console.WriteLine("////// PROCESSED THREAD = " + ptc.Count);
                for (int i = 0; i > ptc.Count; i++)
                {
                    ProcessThread pt = ptc[i];
                    pt.Dispose();
                    ptc.Remove(pt);
                    Console.WriteLine("REmoed Thread @ " + i);
                }
                process.CloseMainWindow();
                process.Kill();
            }
        }

        sb = null;
        connected = false;
    }

在网上搜索此问题时,我发现使用管理安全地退出openvpn。但我不知道如何运行managemetn代码。开始时我添加了: openvpn --config ca.ovpn --ca cert.cer --management 127.0.0.1 12345 然后如何给SIGTERM信号关闭openvpn。 在新的cmd中,我尝试过:openvpn --management-signal SIGTERM但事情不起作用。

OpenVpn不会作为服务安装,所以我猜不能使用--service属性。

任何人都可以指导我在断开连接时出错了。如何处理managemetn信号代码。 哪个是从openvpn服务器断开连接的最佳方式。我还可以退出openvpn吗?

请帮助我。在互联网上搜索了很多,发现了一些帮助,但尚未成功。坚持这个问题。

由于

1 个答案:

答案 0 :(得分:0)

感谢所有人,

我找到了解决方案,这就是我的成功:

            foreach (Process p in Process.GetProcesses())
        {
            if (p.ProcessName.StartsWith("openvpn"))
            {
                p.Kill();
                Console.WriteLine("Killed Process");
                break;
            }
        }

上述代码没有使用其主题和所有代码,而是帮助解决了这个问题。

我希望这也有助于其他人。