84 lines
2.5 KiB
C#
84 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Shadowsocks.Controller;
|
|
using Shadowsocks.Properties;
|
|
|
|
namespace Shadowsocks.Util.SystemProxy
|
|
{
|
|
public static class Sysproxy
|
|
{
|
|
|
|
enum RET_ERRORS : int
|
|
{
|
|
RET_NO_ERROR = 0,
|
|
INVALID_FORMAT = 1,
|
|
NO_PERMISSION = 2,
|
|
SYSCALL_FAILED = 3,
|
|
NO_MEMORY = 4,
|
|
INVAILD_OPTION_COUNT = 5,
|
|
};
|
|
|
|
static Sysproxy()
|
|
{
|
|
try
|
|
{
|
|
FileManager.UncompressFile(Utils.GetTempPath("sysproxy.exe"),
|
|
Environment.Is64BitOperatingSystem ? Resources.sysproxy64_exe : Resources.sysproxy_exe);
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
Logging.LogUsefulException(e);
|
|
}
|
|
}
|
|
|
|
public static void SetIEProxy(bool enable, bool global, string proxyServer, string pacURL)
|
|
{
|
|
string arguments;
|
|
|
|
if (enable)
|
|
{
|
|
if (global)
|
|
{
|
|
arguments = $"global {proxyServer} <local>localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;172.32.*;192.168.*";
|
|
}
|
|
else
|
|
{
|
|
arguments = $"pac {pacURL}";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
arguments = "off";
|
|
}
|
|
|
|
using (var process = new Process())
|
|
{
|
|
// Configure the process using the StartInfo properties.
|
|
process.StartInfo.FileName = Utils.GetTempPath("sysproxy.exe");
|
|
process.StartInfo.Arguments = arguments;
|
|
process.StartInfo.WorkingDirectory = Utils.GetTempPath();
|
|
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
process.StartInfo.UseShellExecute = false;
|
|
process.StartInfo.RedirectStandardError = true;
|
|
process.StartInfo.CreateNoWindow = true;
|
|
process.Start();
|
|
|
|
var error = process.StandardError.ReadToEnd();
|
|
|
|
process.WaitForExit();
|
|
|
|
var exitCode = process.ExitCode;
|
|
if (exitCode != (int) RET_ERRORS.RET_NO_ERROR)
|
|
{
|
|
throw new ProxyException(error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|