我正在尝试使用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然后如何给出信号来关闭openvpn。在new cmd中,我尝试了: openvpn --management-signal SIGTERM,但事情不起作用。
服务不会作为服务安装,所以我猜不能使用-- OpenVpn属性。
有谁能告诉我在断开连接时我哪里错了?如何处理managemetn-signal代码。这是从openvpn服务器断开连接的最佳方式。我也可以退出openvpn本身吗?
请帮帮我。我在网上搜索了很多,找到了一些帮助,但还没有成功。卡在这个问题上了。
谢谢
发布于 2011-02-17 21:11:53
感谢所有人,
我找到了解决方案,我就是这样成功的:
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.StartsWith("openvpn"))
{
p.Kill();
Console.WriteLine("Killed Process");
break;
}
}上面的代码帮助解决了这个问题,而不是使用它的线程和所有东西。
我希望这对其他人也有帮助。
https://stackoverflow.com/questions/4932306
复制相似问题