From 8da3f11d434d1d9679aea3ec7d03a63f9a147473 Mon Sep 17 00:00:00 2001 From: celeron533 Date: Sat, 14 Dec 2019 22:18:41 +0800 Subject: [PATCH 1/3] Give a more user friendly message when plugin program file does not exist --- shadowsocks-csharp/Controller/Service/Sip003Plugin.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs index ab6f5f254..48512c03d 100644 --- a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs +++ b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs @@ -94,6 +94,11 @@ public bool StartIfNeeded() return false; } + if (!File.Exists(_pluginProcess.StartInfo.FileName)) + { + throw new FileNotFoundException(I18N.GetString("Cannot find the plugin program file"), _pluginProcess.StartInfo.FileName); + } + var localPort = GetNextFreeTcpPort(); LocalEndPoint = new IPEndPoint(IPAddress.Loopback, localPort); From 55fcad8cd7443f6454698ad6f1edf49fee76adf9 Mon Sep 17 00:00:00 2001 From: celeron533 Date: Sat, 14 Dec 2019 23:35:51 +0800 Subject: [PATCH 2/3] Fix issue when plugin program file is in system environment path --- .../Controller/Service/Sip003Plugin.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs index 48512c03d..de6f883e1 100644 --- a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs +++ b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs @@ -94,18 +94,24 @@ public bool StartIfNeeded() return false; } - if (!File.Exists(_pluginProcess.StartInfo.FileName)) - { - throw new FileNotFoundException(I18N.GetString("Cannot find the plugin program file"), _pluginProcess.StartInfo.FileName); - } - var localPort = GetNextFreeTcpPort(); LocalEndPoint = new IPEndPoint(IPAddress.Loopback, localPort); _pluginProcess.StartInfo.Environment["SS_LOCAL_HOST"] = LocalEndPoint.Address.ToString(); _pluginProcess.StartInfo.Environment["SS_LOCAL_PORT"] = LocalEndPoint.Port.ToString(); _pluginProcess.StartInfo.Arguments = ExpandEnvironmentVariables(_pluginProcess.StartInfo.Arguments, _pluginProcess.StartInfo.EnvironmentVariables); - _pluginProcess.Start(); + try + { + _pluginProcess.Start(); + } + catch (System.ComponentModel.Win32Exception ex) + { + // do not use File.Exists(...), it can not handle the scenarios when the plugin file is in system environment path. + if ((uint)ex.ErrorCode == 0x80004005) // file not found + { + throw new FileNotFoundException(I18N.GetString("Cannot find the plugin program file"), _pluginProcess.StartInfo.FileName, ex); + } + } _pluginJob.AddProcess(_pluginProcess.Handle); _started = true; } From e44cc54dbc424ee13e7838f37adc9f98eee05200 Mon Sep 17 00:00:00 2001 From: celeron533 Date: Sat, 21 Dec 2019 16:53:47 +0800 Subject: [PATCH 3/3] Using win32 native error code Also update i18n --- shadowsocks-csharp/Controller/Service/Sip003Plugin.cs | 6 +++++- shadowsocks-csharp/Data/i18n.csv | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs index de6f883e1..e295ae723 100644 --- a/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs +++ b/shadowsocks-csharp/Controller/Service/Sip003Plugin.cs @@ -107,10 +107,14 @@ public bool StartIfNeeded() catch (System.ComponentModel.Win32Exception ex) { // do not use File.Exists(...), it can not handle the scenarios when the plugin file is in system environment path. - if ((uint)ex.ErrorCode == 0x80004005) // file not found + // https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values + //if ((uint)ex.ErrorCode == 0x80004005) + // https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/18d8fbe8-a967-4f1c-ae50-99ca8e491d2d + if (ex.NativeErrorCode == 0x00000002) { throw new FileNotFoundException(I18N.GetString("Cannot find the plugin program file"), _pluginProcess.StartInfo.FileName, ex); } + throw new ApplicationException(I18N.GetString("Plugin Program"), ex); } _pluginJob.AddProcess(_pluginProcess.Handle); _started = true; diff --git a/shadowsocks-csharp/Data/i18n.csv b/shadowsocks-csharp/Data/i18n.csv index e99f8dbbd..4332dcf2e 100644 --- a/shadowsocks-csharp/Data/i18n.csv +++ b/shadowsocks-csharp/Data/i18n.csv @@ -187,6 +187,7 @@ Proxy handshake failed,代理握手失败,Proxy 交握失敗,プロキシ ハン Register hotkey failed,注册快捷键失败,註冊快速鍵失敗,ホットキーの登錄に失敗しました。 Cannot parse hotkey: {0},解析快捷键失败: {0},剖析快速鍵失敗: {0},ホットキーを解析できません: {0} "Timeout is invalid, it should not exceed {0}",超时无效,不应超过 {0},逾時無效,不應超過 {0},タイムアウト値が無効です。{0} 以下の値を指定して下さい。 +Cannot find the plugin program file,找不到插件程序文件,找不到外掛程式文件,, ,,, Operation failure,操作失败,, Auto save failed,自动保存失败,,