mirror of
https://github.com/netchx/netch.git
synced 2026-05-05 22:35:48 +08:00
尝试修复退出错误
修复停止时进程堵塞
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
@@ -67,10 +68,14 @@ namespace Netch.Controllers
|
||||
Instance.Kill();
|
||||
Instance.WaitForExit();
|
||||
}
|
||||
catch (Exception e)
|
||||
catch (Win32Exception e)
|
||||
{
|
||||
Logging.Error($"停止 {MainFile} 错误:\n" + e);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -146,9 +146,14 @@ namespace Netch.Controllers
|
||||
/// </summary>
|
||||
public void Stop()
|
||||
{
|
||||
Task.Run(() => pEncryptedProxyController?.Stop());
|
||||
Task.Run(() => UsingPorts.Clear());
|
||||
pModeController?.Stop();
|
||||
var tasks = new[]
|
||||
{
|
||||
Task.Factory.StartNew(() => pEncryptedProxyController?.Stop()),
|
||||
Task.Factory.StartNew(() => UsingPorts.Clear()),
|
||||
Task.Factory.StartNew(() => pModeController?.Stop()),
|
||||
Task.Factory.StartNew(() => pNTTController.Stop())
|
||||
};
|
||||
Task.WaitAll(tasks);
|
||||
}
|
||||
|
||||
public static void KillProcessByName(string name)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Microsoft.Win32;
|
||||
using Netch.Models;
|
||||
@@ -30,7 +31,8 @@ namespace Netch.Controllers
|
||||
/// <returns>是否启动成功</returns>
|
||||
public override bool Start(Server server, Mode mode)
|
||||
{
|
||||
RecordPrevious();
|
||||
Task.Run(RecordPrevious);
|
||||
|
||||
try
|
||||
{
|
||||
if (server.Type == "Socks5")
|
||||
@@ -79,21 +81,20 @@ namespace Netch.Controllers
|
||||
/// </summary>
|
||||
public override void Stop()
|
||||
{
|
||||
try
|
||||
var tasks = new[]
|
||||
{
|
||||
pPrivoxyController.Stop();
|
||||
|
||||
NativeMethods.SetGlobal(prevHTTP, prevBypass);
|
||||
if (prevPAC != "")
|
||||
NativeMethods.SetURL(prevPAC);
|
||||
if (!prevEnabled)
|
||||
NativeMethods.SetDIRECT();
|
||||
prevEnabled = false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logging.Error("停止HTTP控制器错误:\n" + e);
|
||||
}
|
||||
Task.Factory.StartNew(pPrivoxyController.Stop),
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
NativeMethods.SetGlobal(prevHTTP, prevBypass);
|
||||
if (prevPAC != "")
|
||||
NativeMethods.SetURL(prevPAC);
|
||||
if (!prevEnabled)
|
||||
NativeMethods.SetDIRECT();
|
||||
prevEnabled = false;
|
||||
})
|
||||
};
|
||||
Task.WaitAll(tasks);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Netch.Models;
|
||||
using Netch.Properties;
|
||||
@@ -366,10 +367,11 @@ namespace Netch.Controllers
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
|
||||
if (State == State.Started) return true;
|
||||
|
||||
if (State == State.Stopped)
|
||||
switch (State)
|
||||
{
|
||||
case State.Started:
|
||||
return true;
|
||||
case State.Stopped:
|
||||
Stop();
|
||||
return false;
|
||||
}
|
||||
@@ -383,9 +385,13 @@ namespace Netch.Controllers
|
||||
/// </summary>
|
||||
public override void Stop()
|
||||
{
|
||||
StopInstance();
|
||||
ClearBypass();
|
||||
pDNSController.Stop();
|
||||
var tasks = new[]
|
||||
{
|
||||
Task.Factory.StartNew(StopInstance),
|
||||
Task.Factory.StartNew(ClearBypass),
|
||||
Task.Factory.StartNew(pDNSController.Stop)
|
||||
};
|
||||
Task.WaitAll(tasks);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -43,9 +43,9 @@ namespace Netch.Controllers
|
||||
|
||||
return (true, natType, localEnd, publicEnd);
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
Logging.Error("NTT 进程出错");
|
||||
Logging.Error("NTT 进程出错\n" + e);
|
||||
Stop();
|
||||
return (false, null, null, null);
|
||||
}
|
||||
@@ -57,11 +57,9 @@ namespace Netch.Controllers
|
||||
_lastResult = e.Data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 无用
|
||||
/// </summary>
|
||||
public override void Stop()
|
||||
{
|
||||
StopInstance();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user