Skip to content
This repository was archived by the owner on Jun 25, 2025. It is now read-only.

Commit f8675c4

Browse files
committed
Merge branch 'develop'
2 parents 9e7ebef + dccae94 commit f8675c4

36 files changed

+1202
-1109
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ ShadowsocksR for Windows
1818
* 文件小
1919

2020
* `ShadowsocksR-netcore-win32.zip`
21-
* 无需任何运行时
21+
* 无需额外安装任何运行时(会在 `%temp%\.net\ShadowsocksR\` 释放运行库)
2222
* 文件大
2323

2424
* `ShadowsocksR-netcore-win64.zip`
25-
* 无需任何运行时
25+
* 无需额外安装任何运行时(会在 `%temp%\.net\ShadowsocksR\` 释放运行库)
2626
* 文件大
2727

2828
#### Donate

appveyor.yml

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,9 @@ before_build:
99
build_script:
1010
- cmd: build.cmd
1111
after_build:
12-
- cmd: >-
12+
- cmd: >-
1313
7z a ShadowsocksR-netcore.zip %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.exe %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.dll %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.runtimeconfig.json
14-
15-
7z a ShadowsocksR-netcore-win32.zip %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x86\publish\ShadowsocksR.exe
16-
17-
7z a ShadowsocksR-net48.zip %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\net48\ShadowsocksR.exe
18-
19-
7z a ShadowsocksR-netcore-win64.zip %APPVEYOR_BUILD_FOLDER%\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x64\publish\ShadowsocksR.exe
2014
test: off
2115
artifacts:
2216
- path: ShadowsocksR-netcore.zip
23-
name: ShadowsocksR-netcore.zip
24-
- path: ShadowsocksR-net48.zip
25-
name: ShadowsocksR-net48.zip
26-
- path: ShadowsocksR-netcore-win32.zip
27-
name: ShadowsocksR-netcore-win32.zip
28-
- path: ShadowsocksR-netcore-win64.zip
29-
name: ShadowsocksR-netcore-win64.zip
17+
name: ShadowsocksR-netcore.zip

build.cmd

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ echo Building .NET Core
1313
msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 || goto :error
1414
msbuild -v:m -t:Publish -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 || goto :error
1515

16-
echo Building .NET Framework x86 and x64
17-
msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=net48 || goto :error
18-
msbuild -v:m -t:Build -p:Configuration=Release -p:TargetFramework=net48 || goto :error
16+
REM echo Building .NET Framework x86 and x64
17+
REM msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=net48 || goto :error
18+
REM msbuild -v:m -t:Build -p:Configuration=Release -p:TargetFramework=net48 || goto :error
1919

20-
echo Building .NET Core SelfContained x86
21-
msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x86 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
22-
msbuild -v:m -t:Publish -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x86 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
20+
REM echo Building .NET Core SelfContained x86
21+
REM msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x86 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
22+
REM msbuild -v:m -t:Publish -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x86 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
2323

24-
echo Building .NET Core SelfContained x64
25-
msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x64 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
26-
msbuild -v:m -t:Publish -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x64 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
24+
REM echo Building .NET Core SelfContained x64
25+
REM msbuild -v:m -t:Restore -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x64 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
26+
REM msbuild -v:m -t:Publish -p:Configuration=Release -p:TargetFramework=netcoreapp3.0 -p:RuntimeIdentifier=win-x64 -p:SelfContained=True -p:PublishSingleFile=true|| goto :error
2727

2828
cd..
2929
goto :EOF

publish.cmd

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
echo package .NET Core
44
7z a ShadowsocksR-netcore.zip %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.exe %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.dll %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\publish\ShadowsocksR.runtimeconfig.json
55

6-
echo package .NET Framework
7-
7z a ShadowsocksR-net48.zip %~dp0\shadowsocks-csharp\bin\Release\net48\ShadowsocksR.exe
6+
REM echo package .NET Framework
7+
REM 7z a ShadowsocksR-net48.zip %~dp0\shadowsocks-csharp\bin\Release\net48\ShadowsocksR.exe
88

9-
echo package .NET Core SelfContained x86
10-
7z a ShadowsocksR-netcore-win32.zip %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x86\publish\ShadowsocksR.exe
9+
REM echo package .NET Core SelfContained x86
10+
REM 7z a ShadowsocksR-netcore-win32.zip %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x86\publish\ShadowsocksR.exe
1111

12-
echo package .NET Core SelfContained x64
13-
7z a ShadowsocksR-netcore-win64.zip %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x64\publish\ShadowsocksR.exe
12+
REM echo package .NET Core SelfContained x64
13+
REM 7z a ShadowsocksR-netcore-win64.zip %~dp0\shadowsocks-csharp\bin\Release\netcoreapp3.0\win-x64\publish\ShadowsocksR.exe

shadowsocks-csharp/Controller/ShadowsocksController.cs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections.Generic;
77
using System.IO;
8+
using System.Linq;
89
using System.Net.Sockets;
910
using System.Threading.Tasks;
1011
using System.Windows;
@@ -123,19 +124,21 @@ public void AppendConfiguration(Configuration mergeConfig, IReadOnlyList<Server>
123124
{
124125
if (servers != null)
125126
{
126-
for (var j = 0; j < servers.Count; ++j)
127+
Application.Current.Dispatcher?.Invoke(() =>
127128
{
128-
if (FindFirstMatchServer(servers[j], mergeConfig.configs) == -1)
129+
foreach (var server in servers)
129130
{
130-
mergeConfig.configs.Add(servers[j]);
131+
if (FindFirstMatchServer(server, mergeConfig.configs) == -1)
132+
{
133+
mergeConfig.configs.Add(server);
134+
}
131135
}
132-
}
136+
});
133137
}
134138
}
135139

136-
public List<Server> MergeConfiguration(Configuration mergeConfig, IReadOnlyList<Server> servers)
140+
public IEnumerable<Server> MergeConfiguration(Configuration mergeConfig, IReadOnlyList<Server> servers)
137141
{
138-
var missingServers = new List<Server>();
139142
if (servers != null)
140143
{
141144
foreach (var server in servers)
@@ -149,15 +152,8 @@ public List<Server> MergeConfiguration(Configuration mergeConfig, IReadOnlyList<
149152
}
150153
}
151154
}
152-
for (var i = 0; i < mergeConfig.configs.Count; ++i)
153-
{
154-
var j = FindFirstMatchServer(mergeConfig.configs[i], servers);
155-
if (j == -1)
156-
{
157-
missingServers.Add(mergeConfig.configs[i]);
158-
}
159-
}
160-
return missingServers;
155+
156+
return from t in mergeConfig.configs let j = FindFirstMatchServer(t, servers) where j == -1 select t;
161157
}
162158

163159
public Configuration MergeGetConfiguration(Configuration mergeConfig)
@@ -240,14 +236,14 @@ public void ToggleMode(ProxyMode mode)
240236
{
241237
_config.sysProxyMode = (int)mode;
242238
Save();
243-
ToggleModeChanged?.Invoke(this, new EventArgs());
239+
Application.Current.Dispatcher?.Invoke(() => { ToggleModeChanged?.Invoke(this, new EventArgs()); });
244240
}
245241

246242
public void ToggleRuleMode(int mode)
247243
{
248244
_config.proxyRuleMode = mode;
249245
Save();
250-
ToggleRuleModeChanged?.Invoke(this, new EventArgs());
246+
Application.Current.Dispatcher?.Invoke(() => { ToggleRuleModeChanged?.Invoke(this, new EventArgs()); });
251247
}
252248

253249
public void ToggleSelectRandom(bool enabled)
@@ -459,7 +455,7 @@ private void Reload()
459455
}
460456
}
461457

462-
ConfigChanged?.Invoke(this, new EventArgs());
458+
Application.Current.Dispatcher?.Invoke(() => { ConfigChanged?.Invoke(this, new EventArgs()); });
463459

464460
UpdateSystemProxy();
465461
Utils.ReleaseMemory();

shadowsocks-csharp/Data/cn.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,6 @@ Empty Response=空连
167167
Error Percent=出错比例
168168
Continuous=连错
169169
Version=版本
170-
Experimental=实验性功能
171-
Test selected server=测试选定的服务器
172170

173171
# Global Log Form
174172

shadowsocks-csharp/Data/zh-tw.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,6 @@ Empty Response=空連
167167
Error Percent=出錯比例
168168
Continuous=連錯
169169
Version=版本
170-
Experimental=實驗性功能
171-
Test selected server=測試選定的伺服器
172170

173171
# Global Log Form
174172

shadowsocks-csharp/Model/Server.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,8 @@ public bool IsMatchServer(Server serverObject)
607607
&& obfs == serverObject.obfs
608608
&& ObfsParam == serverObject.ObfsParam
609609
&& Password == serverObject.Password
610-
&& UdpOverTcp == serverObject.UdpOverTcp;
610+
&& UdpOverTcp == serverObject.UdpOverTcp
611+
&& Remarks == serverObject.Remarks;
611612
}
612613

613614
private string GetSsLink()

shadowsocks-csharp/Program.cs

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
using System;
1+
using Microsoft.Win32;
2+
using Shadowsocks.Controller;
3+
using Shadowsocks.Model;
4+
using Shadowsocks.Util;
5+
using Shadowsocks.Util.SingleInstance;
6+
using Shadowsocks.View;
7+
using System;
28
using System.IO;
39
using System.Linq;
410
using System.Net;
511
using System.Threading;
612
using System.Windows;
7-
using Microsoft.Win32;
8-
using Shadowsocks.Controller;
9-
using Shadowsocks.Model;
10-
using Shadowsocks.Util;
11-
using Shadowsocks.View;
1213

1314
namespace Shadowsocks
1415
{
@@ -21,7 +22,7 @@ internal static class Program
2122
private static void Main(string[] args)
2223
{
2324
Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.GetExecutablePath()) ?? throw new InvalidOperationException());
24-
if (args.Any(arg => arg == @"--setautorun"))
25+
if (args.Contains(@"--setautorun"))
2526
{
2627
if (!AutoStartup.Switch())
2728
{
@@ -30,14 +31,15 @@ private static void Main(string[] args)
3031
return;
3132
}
3233

33-
using var mutex = new Mutex(false, $@"Global\ShadowsocksR_{Directory.GetCurrentDirectory().GetDeterministicHashCode()}");
34-
if (!mutex.WaitOne(0, false))
34+
var identifier = $@"Global\{UpdateChecker.Name}_{Directory.GetCurrentDirectory().GetDeterministicHashCode()}";
35+
using var singleInstance = new SingleInstance(identifier);
36+
if (!singleInstance.IsFirstInstance)
3537
{
36-
MessageBox.Show(I18N.GetString("Find Shadowsocks icon in your notify tray.") + Environment.NewLine +
37-
I18N.GetString("If you want to start multiple Shadowsocks, make a copy in another directory."),
38-
I18N.GetString("ShadowsocksR is already running."));
38+
singleInstance.PassArgumentsToFirstInstance(args.Append(@"--show"));
3939
return;
4040
}
41+
singleInstance.ArgumentsReceived += SingleInstance_ArgumentsReceived;
42+
singleInstance.ListenForArgumentsFromSuccessiveInstances();
4143

4244
var app = new Application
4345
{
@@ -73,8 +75,7 @@ private static void Main(string[] args)
7375
Logging.DefaultOut = Console.Out;
7476
Logging.DefaultError = Console.Error;
7577

76-
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 |
77-
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
78+
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
7879

7980
_viewController = new MenuViewController(_controller);
8081
SystemEvents.SessionEnding += _viewController.Quit_Click;
@@ -147,5 +148,15 @@ private static void CurrentDomain_UnhandledException(object sender, UnhandledExc
147148
Application.Current.Shutdown();
148149
}
149150
}
151+
152+
private static void SingleInstance_ArgumentsReceived(object sender, ArgumentsReceivedEventArgs e)
153+
{
154+
if (e.Args.Contains(@"--show"))
155+
{
156+
MessageBox.Show(I18N.GetString("Find Shadowsocks icon in your notify tray.") + Environment.NewLine +
157+
I18N.GetString("If you want to start multiple Shadowsocks, make a copy in another directory."),
158+
I18N.GetString("ShadowsocksR is already running."), MessageBoxButton.OK, MessageBoxImage.Information);
159+
}
160+
}
150161
}
151162
}

shadowsocks-csharp/Properties/Resources.Designer.cs

Lines changed: 3 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)