├── App.ico
├── Debug
├── SyncThingTray.exe
├── SyncThingTray.pdb
├── System.Net.Http.Formatting.dll
└── SyncThingTray.exe.config
├── Releases
├── SyncThingTray.exe
└── System.Net.Http.Formatting.dll
├── App.config
├── packages.config
├── Properties
├── Settings.settings
├── Settings.Designer.cs
├── AssemblyInfo.cs
├── Resources.Designer.cs
└── Resources.resx
├── ProjectInstaller.cs
├── SyncThingTray.csproj.user
├── frmMessage.cs
├── SyngThingService.Designer.cs
├── API.cs
├── ProjectInstaller.Designer.cs
├── frmMessage.Designer.cs
├── frmMain.cs
├── SyngThingService.cs
├── SyngThingService.resx
├── ProjectInstaller.resx
├── SyncThingTray.csproj
├── frmMain.Designer.cs
├── frmInstall.cs
├── Program.cs
├── frmInstall.resx
├── frmMessage.resx
├── frmMain.resx
└── frmInstall.Designer.cs
/App.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/App.ico
--------------------------------------------------------------------------------
/Debug/SyncThingTray.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/Debug/SyncThingTray.exe
--------------------------------------------------------------------------------
/Debug/SyncThingTray.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/Debug/SyncThingTray.pdb
--------------------------------------------------------------------------------
/Releases/SyncThingTray.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/Releases/SyncThingTray.exe
--------------------------------------------------------------------------------
/Debug/System.Net.Http.Formatting.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/Debug/System.Net.Http.Formatting.dll
--------------------------------------------------------------------------------
/Releases/System.Net.Http.Formatting.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bloones/SyncThingWin/HEAD/Releases/System.Net.Http.Formatting.dll
--------------------------------------------------------------------------------
/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Debug/SyncThingTray.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ProjectInstaller.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Configuration.Install;
6 | using System.Linq;
7 |
8 | namespace SyncThingTray
9 | {
10 | [RunInstaller(true)]
11 | public partial class ProjectInstaller : System.Configuration.Install.Installer
12 | {
13 | public ProjectInstaller()
14 | {
15 | InitializeComponent();
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/SyncThingTray.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | configure
5 |
6 |
7 | uninstall
8 |
9 |
--------------------------------------------------------------------------------
/frmMessage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace SyncThingTray
12 | {
13 | public partial class frmMessage : Form
14 | {
15 | public frmMessage()
16 | {
17 | InitializeComponent();
18 | }
19 |
20 | public frmMessage(string Message)
21 | : this()
22 | {
23 | lblMessage.Text = Message;
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/SyngThingService.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SyncThingTray
2 | {
3 | partial class SyngThingService
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | //
32 | // SyngThingService
33 | //
34 | this.ServiceName = "SyncThingService";
35 |
36 | }
37 |
38 | #endregion
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.34014
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SyncThingTray.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SyncThingTray")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SyncThingTray")]
13 | [assembly: AssemblyCopyright("Copyright © 2014")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("3662dc53-7a84-4452-8e72-59781c8c244b")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/API.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Net.Http;
5 | using System.Net.Http.Headers;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace SyncThingTray
10 | {
11 | static class API
12 | {
13 | public static async Task CallAPIPost(string Query)
14 | {
15 | if (string.IsNullOrWhiteSpace(Program.APIUrl)) return "Syncthing address unavailable";
16 | try
17 | {
18 | HttpClient client = new HttpClient();
19 | client.BaseAddress = new Uri(Program.APIUrl);
20 | client.DefaultRequestHeaders.Accept.Clear();
21 | client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
22 | client.DefaultRequestHeaders.Add("X-API-Key", Program.APIKey);
23 | HttpContent cnt = new ByteArrayContent(new byte[0]);
24 | var res = await client.PostAsync("rest/" + Query, cnt);
25 | return res.IsSuccessStatusCode ? null : "Error: " + res.ToString();
26 | }
27 | catch (HttpRequestException x)
28 | {
29 | var i = x.InnerException;
30 | if (i != null) return "Exception: " + i.Message;
31 | return "Exception: " + x.Message;
32 | }
33 | }
34 |
35 | public static string CallAPIPostSync(string Query, int Timeout, string Default)
36 | {
37 | var res = CallAPIPost(Query);
38 | if (res.Wait(Timeout))
39 | return res.Result;
40 | else
41 | return Default;
42 | }
43 |
44 | public static bool IsAvailable
45 | {
46 | get
47 | {
48 | var res = CallAPIPost("ping");
49 | if (!res.Wait(1000)) return false;
50 | return res.Result == null;
51 | }
52 | }
53 |
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/ProjectInstaller.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SyncThingTray
2 | {
3 | partial class ProjectInstaller
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
32 | this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
33 | //
34 | // serviceProcessInstaller1
35 | //
36 | this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
37 | this.serviceProcessInstaller1.Password = null;
38 | this.serviceProcessInstaller1.Username = null;
39 | //
40 | // serviceInstaller1
41 | //
42 | this.serviceInstaller1.Description = "Start the SyncThing executable in the background and allow monitoring";
43 | this.serviceInstaller1.DisplayName = "SyncThing synchronization launcher";
44 | this.serviceInstaller1.ServiceName = "SyncThingService";
45 | this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
46 | //
47 | // ProjectInstaller
48 | //
49 | this.Installers.AddRange(new System.Configuration.Install.Installer[] {
50 | this.serviceProcessInstaller1,
51 | this.serviceInstaller1});
52 |
53 | }
54 |
55 | #endregion
56 |
57 | private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
58 | private System.ServiceProcess.ServiceInstaller serviceInstaller1;
59 | }
60 | }
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.34014
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SyncThingTray.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SyncThingTray.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/frmMessage.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SyncThingTray
2 | {
3 | partial class frmMessage
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMessage));
32 | this.lblMessage = new System.Windows.Forms.Label();
33 | this.lblImage = new System.Windows.Forms.Label();
34 | this.SuspendLayout();
35 | //
36 | // lblMessage
37 | //
38 | this.lblMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
39 | | System.Windows.Forms.AnchorStyles.Left)
40 | | System.Windows.Forms.AnchorStyles.Right)));
41 | this.lblMessage.Font = new System.Drawing.Font("Cambria", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
42 | this.lblMessage.Location = new System.Drawing.Point(66, 9);
43 | this.lblMessage.Name = "lblMessage";
44 | this.lblMessage.Size = new System.Drawing.Size(284, 88);
45 | this.lblMessage.TabIndex = 0;
46 | //
47 | // lblImage
48 | //
49 | this.lblImage.Image = ((System.Drawing.Image)(resources.GetObject("lblImage.Image")));
50 | this.lblImage.Location = new System.Drawing.Point(12, 9);
51 | this.lblImage.Name = "lblImage";
52 | this.lblImage.Size = new System.Drawing.Size(48, 48);
53 | this.lblImage.TabIndex = 1;
54 | //
55 | // frmMessage
56 | //
57 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
58 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
59 | this.ClientSize = new System.Drawing.Size(362, 106);
60 | this.Controls.Add(this.lblImage);
61 | this.Controls.Add(this.lblMessage);
62 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
63 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
64 | this.MaximizeBox = false;
65 | this.MinimizeBox = false;
66 | this.Name = "frmMessage";
67 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
68 | this.Text = "SynthingTray";
69 | this.ResumeLayout(false);
70 |
71 | }
72 |
73 | #endregion
74 |
75 | private System.Windows.Forms.Label lblMessage;
76 | private System.Windows.Forms.Label lblImage;
77 | }
78 | }
--------------------------------------------------------------------------------
/frmMain.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Diagnostics;
6 | using System.Drawing;
7 | using System.IO;
8 | using System.Linq;
9 | using System.Net.Http;
10 | using System.Net.Http.Headers;
11 | using System.Text;
12 | using System.Threading.Tasks;
13 | using System.Windows.Forms;
14 | using System.Xml;
15 |
16 | namespace SyncThingTray
17 | {
18 | public partial class frmMain : Form
19 | {
20 | bool allowclose = false;
21 | public frmMain()
22 | {
23 | InitializeComponent();
24 | }
25 |
26 | private void frmMain_Load(object sender, EventArgs e)
27 | {
28 | if (!Program.IsInstalled || !Program.IsConfigured)
29 | {
30 | if (!frmInstall.TryInstall()) { allowclose = true; Application.Exit(); return; }
31 | }
32 | }
33 |
34 | private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
35 | {
36 | if ((e.CloseReason == CloseReason.UserClosing) && !allowclose)
37 | {
38 | e.Cancel = !allowclose;
39 | Hide();
40 | return;
41 | }
42 | }
43 |
44 | private void showConsoleToolStripMenuItem_Click(object sender, EventArgs e)
45 | {
46 | Show();
47 | }
48 |
49 | private void showGuiToolStripMenuItem_Click(object sender, EventArgs e)
50 | {
51 | if (!string.IsNullOrWhiteSpace(Program.GuiUrl)) Process.Start(Program.GuiUrl);
52 | }
53 |
54 | private void stopServiceToolStripMenuItem_Click(object sender, EventArgs e)
55 | {
56 | if (Program.IsUserAdministrator)
57 | Program.StopService();
58 | else
59 | Program.RunAsAdministrator("stop");
60 | }
61 |
62 | private void startServiceToolStripMenuItem_Click(object sender, EventArgs e)
63 | {
64 | if (Program.IsUserAdministrator)
65 | Program.StartService();
66 | else
67 | Program.RunAsAdministrator("start");
68 | }
69 |
70 | private void exitToolStripMenuItem_Click(object sender, EventArgs e)
71 | {
72 | allowclose = true;
73 | Close();
74 | }
75 |
76 | private void icoTray_DoubleClick(object sender, EventArgs e)
77 | {
78 | Show();
79 | }
80 |
81 | private void timReferesh_Tick(object sender, EventArgs e)
82 | {
83 | txtContent.Text = File.Exists(Program.MonitorFile) ? File.ReadAllText(Program.MonitorFile) : string.Empty;
84 | txtContent.SelectionStart = txtContent.Text.Length;
85 | txtContent.SelectionLength = 0;
86 | }
87 |
88 | private void frmMain_VisibleChanged(object sender, EventArgs e)
89 | {
90 | if (Visible)
91 | txtContent.Text = File.Exists(Program.MonitorFile) ? File.ReadAllText(Program.MonitorFile) : string.Empty;
92 | txtContent.SelectionStart = txtContent.Text.Length;
93 | txtContent.SelectionLength = 0;
94 | timReferesh.Enabled = Visible;
95 | }
96 |
97 | private void mnuTray_Opening(object sender, CancelEventArgs e)
98 | {
99 | SetServiceStatus(true);
100 | Program.ReadConfiguration();
101 | showGuiToolStripMenuItem.Enabled = !string.IsNullOrWhiteSpace(Program.GuiUrl);
102 | if (string.IsNullOrWhiteSpace(Program.APIUrl) || string.IsNullOrWhiteSpace(Program.APIKey) || (!Program.IsRunning && !API.IsAvailable))
103 | {
104 | mnuRestart.Enabled = false;
105 | mnuShutdown.Enabled = false;
106 | mnuUpgrade.Enabled = false;
107 | }
108 | else
109 | {
110 | mnuRestart.Enabled = true;
111 | mnuShutdown.Enabled = true;
112 | mnuUpgrade.Enabled = true;
113 | }
114 | }
115 |
116 | private async void mnuShutdown_Click(object sender, EventArgs e)
117 | {
118 | var res = await API.CallAPIPost("shutdown");
119 | if (res != null) icoTray.ShowBalloonTip(1000, "Syncthing", res, ToolTipIcon.Error);
120 | }
121 |
122 | private async void mnuUpgrade_Click(object sender, EventArgs e)
123 | {
124 | var res = await API.CallAPIPost("upgrade");
125 | if (res != null) icoTray.ShowBalloonTip(1000, "Syncthing", res, ToolTipIcon.Error);
126 | }
127 |
128 | private async void mnuRestart_Click(object sender, EventArgs e)
129 | {
130 | var res = await API.CallAPIPost("restart");
131 | if (res != null) icoTray.ShowBalloonTip(1000, "Syncthing", res, ToolTipIcon.Error);
132 | }
133 |
134 | private void frmMain_Shown(object sender, EventArgs e)
135 | {
136 | SetServiceStatus(false);
137 | timStatus.Enabled = true;
138 | }
139 |
140 | private void timStatus_Tick(object sender, EventArgs e)
141 | {
142 | SetServiceStatus(true);
143 | }
144 |
145 | void SetServiceStatus(bool Update)
146 | {
147 | if (Program.IsRunning)
148 | {
149 | if (!Update)
150 | icoTray.ShowBalloonTip(500, "Syncthing", "The service is running", ToolTipIcon.Info);
151 | else if (startServiceToolStripMenuItem.Enabled)
152 | icoTray.ShowBalloonTip(500, "Syncthing", "The service has started", ToolTipIcon.Info);
153 | startServiceToolStripMenuItem.Enabled = false;
154 | stopServiceToolStripMenuItem.Enabled = true;
155 | }
156 | else
157 | {
158 | if (!Update)
159 | icoTray.ShowBalloonTip(500, "Syncthing", "The service is stopped", ToolTipIcon.Error);
160 | else if (!startServiceToolStripMenuItem.Enabled)
161 | icoTray.ShowBalloonTip(500, "Syncthing", "The service has stopped", ToolTipIcon.Error);
162 | startServiceToolStripMenuItem.Enabled = true;
163 | stopServiceToolStripMenuItem.Enabled = false;
164 | }
165 | }
166 | }
167 | }
168 |
--------------------------------------------------------------------------------
/SyngThingService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Diagnostics;
6 | using System.IO;
7 | using System.Linq;
8 | using System.Net.Http;
9 | using System.Net.Http.Headers;
10 | using System.Runtime.InteropServices;
11 | using System.ServiceProcess;
12 | using System.Text;
13 | using System.Xml;
14 |
15 | namespace SyncThingTray
16 | {
17 | public partial class SyngThingService : ServiceBase
18 | {
19 | Process syncthing;
20 | List shutdowns;
21 | public SyngThingService()
22 | {
23 | InitializeComponent();
24 | }
25 |
26 | public void TestStart() { OnStart(null); }
27 |
28 | protected override void OnStart(string[] args)
29 | {
30 | if (Program.IsConfigured)
31 | {
32 | shutdowns = null;
33 | StartSyncThing();
34 | }
35 | }
36 |
37 | void StartSyncThing()
38 | {
39 | ProcessStartInfo pinfo = new ProcessStartInfo(Program.SyncExePath, "-home=\"" + Program.SyncConfigPath + "\"");
40 | pinfo.WindowStyle = ProcessWindowStyle.Hidden;
41 | pinfo.RedirectStandardOutput = true;
42 | pinfo.RedirectStandardInput = true;
43 | pinfo.UseShellExecute = false;
44 | syncthing = new Process();
45 | syncthing.EnableRaisingEvents = true;
46 | syncthing.OutputDataReceived += syncthing_OutputDataReceived;
47 | syncthing.Exited += syncthing_Exited;
48 | syncthing.StartInfo = pinfo;
49 | syncthing.Start();
50 | syncthing.BeginOutputReadLine();
51 | syncthing.PriorityClass = Program.SyncPriority;
52 | }
53 |
54 | void syncthing_Exited(object sender, EventArgs e)
55 | {
56 | string reason;
57 | if (Program.AutoRestart)
58 | {
59 | if (Program.AutoRestartCount > 0)
60 | {
61 | if (shutdowns == null) shutdowns = new List();
62 | shutdowns.Add(DateTime.Now);
63 | shutdowns.RemoveAll(d => d < (DateTime.Now - Program.AutoRestartPeriod));
64 | reason = shutdowns.Count <= Program.AutoRestartCount ? null : "The maximum number of shutdown has been reached";
65 | }
66 | else
67 | reason = null;
68 | }
69 | else
70 | reason = "The service is not configured to restart";
71 | if (reason == null)
72 | {
73 | EventLog.WriteEntry("Syncthing has stopped and is being restarted", EventLogEntryType.Warning);
74 | syncthing.OutputDataReceived -= syncthing_OutputDataReceived;
75 | syncthing.Exited -= syncthing_Exited;
76 | syncthing.Dispose();
77 | StartSyncThing();
78 | }
79 | else
80 | {
81 | EventLog.WriteEntry("Syncthing has stopped and will not be restarted:\n" + reason, EventLogEntryType.Warning);
82 | Stop();
83 | }
84 | }
85 |
86 | void syncthing_OutputDataReceived(object sender, DataReceivedEventArgs e)
87 | {
88 | File.AppendAllLines(Program.MonitorFile, new string[] { e.Data });
89 | }
90 |
91 | protected override void OnStop()
92 | {
93 | if (!syncthing.HasExited)
94 | {
95 | syncthing.CancelOutputRead();
96 | syncthing.OutputDataReceived -= syncthing_OutputDataReceived;
97 | syncthing.Exited -= syncthing_Exited;
98 |
99 | var res = ShutdownProgram();
100 | if (res == null)
101 | {
102 | syncthing.WaitForExit(2000);
103 | }
104 | else
105 | {
106 | this.EventLog.WriteEntry("An error occured when trying to shutdown the syncthing.exe process.\n" + res, EventLogEntryType.Error);
107 | }
108 |
109 | if (!syncthing.HasExited)
110 | {
111 | try
112 | {
113 | StopProgram(syncthing);
114 | }
115 | catch (Exception x)
116 | {
117 | this.EventLog.WriteEntry("An error occured when trying to stop the syncthing.exe process.\nException: (" + x.GetType().ToString() + ") " + x.Message, EventLogEntryType.Error);
118 | }
119 | if (!syncthing.HasExited)
120 | {
121 | syncthing.Kill();
122 | foreach (var proc in Process.GetProcesses().Where(p => p.StartInfo.FileName == Program.SyncExePath))
123 | if (!proc.HasExited)
124 | proc.Kill();
125 | this.EventLog.WriteEntry("The syncthing.exe process could not be stopped gracefully and had to be killed", EventLogEntryType.Error);
126 | syncthing.WaitForExit(1500);
127 | }
128 | else
129 | this.EventLog.WriteEntry("The syncthing.exe process could not be shutdown and had to be closed gracefully", EventLogEntryType.Warning);
130 | }
131 | }
132 | syncthing.Dispose();
133 | File.Delete(Program.MonitorFile);
134 | }
135 |
136 | enum CtrlTypes : uint
137 | {
138 | CTRL_C_EVENT = 0,
139 | CTRL_BREAK_EVENT,
140 | CTRL_CLOSE_EVENT,
141 | CTRL_LOGOFF_EVENT = 5,
142 | CTRL_SHUTDOWN_EVENT
143 | }
144 |
145 | [DllImport("kernel32.dll")]
146 | [return: MarshalAs(UnmanagedType.Bool)]
147 | private static extern bool GenerateConsoleCtrlEvent(CtrlTypes dwCtrlEvent, uint dwProcessGroupId);
148 | [DllImport("kernel32.dll", SetLastError = true)]
149 | static extern bool AttachConsole(uint dwProcessId);
150 | [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
151 | static extern bool FreeConsole();
152 | [DllImport("Kernel32")]
153 | private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);
154 |
155 |
156 | static void StopProgram(Process proc)
157 | {
158 | if (AttachConsole((uint)proc.Id))
159 | {
160 | SetConsoleCtrlHandler(null, true);
161 | GenerateConsoleCtrlEvent(CtrlTypes.CTRL_C_EVENT, 0);
162 | proc.WaitForExit(2000);
163 | FreeConsole();
164 | SetConsoleCtrlHandler(null, false);
165 | }
166 | }
167 |
168 | static string ShutdownProgram()
169 | {
170 | string res= Program.ReadConfiguration();
171 | if (res != null) return res;
172 | var apires = API.CallAPIPost("shutdown");
173 | if (!apires.Wait(2000)) return null;
174 | return apires.Result;
175 | }
176 |
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/SyngThingService.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | False
122 |
123 |
--------------------------------------------------------------------------------
/ProjectInstaller.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 56
122 |
123 |
124 | 196, 17
125 |
126 |
127 | False
128 |
129 |
--------------------------------------------------------------------------------
/SyncThingTray.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {11C06352-3180-44F8-9A79-3C410BD6622D}
8 | WinExe
9 | Properties
10 | SyncThingTray
11 | SyncThingTray
12 | v4.5.1
13 | 512
14 |
15 |
16 |
17 |
18 | AnyCPU
19 | true
20 | full
21 | false
22 | bin\Debug\
23 | DEBUG;TRACE
24 | prompt
25 | 4
26 | false
27 |
28 |
29 | AnyCPU
30 | pdbonly
31 | true
32 | bin\Release\
33 | TRACE
34 | prompt
35 | 4
36 | false
37 |
38 |
39 | App.ico
40 |
41 |
42 |
43 | False
44 | ..\packages\Newtonsoft.Json.6.0.6\lib\net45\Newtonsoft.Json.dll
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | False
53 | ..\packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | Form
68 |
69 |
70 | frmInstall.cs
71 |
72 |
73 | Form
74 |
75 |
76 | frmMain.cs
77 |
78 |
79 | Form
80 |
81 |
82 | frmMessage.cs
83 |
84 |
85 |
86 | Component
87 |
88 |
89 | ProjectInstaller.cs
90 |
91 |
92 |
93 | Component
94 |
95 |
96 | SyngThingService.cs
97 |
98 |
99 | frmInstall.cs
100 |
101 |
102 | frmMain.cs
103 |
104 |
105 | frmMessage.cs
106 |
107 |
108 | ProjectInstaller.cs
109 |
110 |
111 | ResXFileCodeGenerator
112 | Resources.Designer.cs
113 | Designer
114 |
115 |
116 | True
117 | Resources.resx
118 | True
119 |
120 |
121 | SyngThingService.cs
122 |
123 |
124 |
125 | SettingsSingleFileGenerator
126 | Settings.Designer.cs
127 |
128 |
129 | True
130 | Settings.settings
131 | True
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
148 |
--------------------------------------------------------------------------------
/frmMain.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SyncThingTray
2 | {
3 | partial class frmMain
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain));
33 | this.txtContent = new System.Windows.Forms.TextBox();
34 | this.mnuTray = new System.Windows.Forms.ContextMenuStrip(this.components);
35 | this.showConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
36 | this.showGuiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
37 | this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
38 | this.stopServiceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
39 | this.startServiceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
40 | this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
41 | this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
42 | this.icoTray = new System.Windows.Forms.NotifyIcon(this.components);
43 | this.timReferesh = new System.Windows.Forms.Timer(this.components);
44 | this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
45 | this.mnuShutdown = new System.Windows.Forms.ToolStripMenuItem();
46 | this.mnuUpgrade = new System.Windows.Forms.ToolStripMenuItem();
47 | this.mnuRestart = new System.Windows.Forms.ToolStripMenuItem();
48 | this.timStatus = new System.Windows.Forms.Timer(this.components);
49 | this.mnuTray.SuspendLayout();
50 | this.SuspendLayout();
51 | //
52 | // txtContent
53 | //
54 | this.txtContent.BackColor = System.Drawing.Color.Black;
55 | this.txtContent.Dock = System.Windows.Forms.DockStyle.Fill;
56 | this.txtContent.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
57 | this.txtContent.ForeColor = System.Drawing.Color.White;
58 | this.txtContent.Location = new System.Drawing.Point(0, 0);
59 | this.txtContent.Multiline = true;
60 | this.txtContent.Name = "txtContent";
61 | this.txtContent.ReadOnly = true;
62 | this.txtContent.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
63 | this.txtContent.Size = new System.Drawing.Size(621, 544);
64 | this.txtContent.TabIndex = 0;
65 | //
66 | // mnuTray
67 | //
68 | this.mnuTray.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
69 | this.showConsoleToolStripMenuItem,
70 | this.showGuiToolStripMenuItem,
71 | this.toolStripSeparator3,
72 | this.mnuRestart,
73 | this.mnuUpgrade,
74 | this.mnuShutdown,
75 | this.toolStripSeparator1,
76 | this.stopServiceToolStripMenuItem,
77 | this.startServiceToolStripMenuItem,
78 | this.toolStripSeparator2,
79 | this.exitToolStripMenuItem});
80 | this.mnuTray.Name = "mnuTray";
81 | this.mnuTray.Size = new System.Drawing.Size(150, 198);
82 | this.mnuTray.Opening += new System.ComponentModel.CancelEventHandler(this.mnuTray_Opening);
83 | //
84 | // showConsoleToolStripMenuItem
85 | //
86 | this.showConsoleToolStripMenuItem.Name = "showConsoleToolStripMenuItem";
87 | this.showConsoleToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
88 | this.showConsoleToolStripMenuItem.Text = "Show &Console";
89 | this.showConsoleToolStripMenuItem.Click += new System.EventHandler(this.showConsoleToolStripMenuItem_Click);
90 | //
91 | // showGuiToolStripMenuItem
92 | //
93 | this.showGuiToolStripMenuItem.Name = "showGuiToolStripMenuItem";
94 | this.showGuiToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
95 | this.showGuiToolStripMenuItem.Text = "Show &Gui";
96 | this.showGuiToolStripMenuItem.Click += new System.EventHandler(this.showGuiToolStripMenuItem_Click);
97 | //
98 | // toolStripSeparator1
99 | //
100 | this.toolStripSeparator1.Name = "toolStripSeparator1";
101 | this.toolStripSeparator1.Size = new System.Drawing.Size(146, 6);
102 | //
103 | // stopServiceToolStripMenuItem
104 | //
105 | this.stopServiceToolStripMenuItem.Name = "stopServiceToolStripMenuItem";
106 | this.stopServiceToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
107 | this.stopServiceToolStripMenuItem.Text = "Sto&p Service";
108 | this.stopServiceToolStripMenuItem.Click += new System.EventHandler(this.stopServiceToolStripMenuItem_Click);
109 | //
110 | // startServiceToolStripMenuItem
111 | //
112 | this.startServiceToolStripMenuItem.Name = "startServiceToolStripMenuItem";
113 | this.startServiceToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
114 | this.startServiceToolStripMenuItem.Text = "S&tart Service";
115 | this.startServiceToolStripMenuItem.Click += new System.EventHandler(this.startServiceToolStripMenuItem_Click);
116 | //
117 | // toolStripSeparator2
118 | //
119 | this.toolStripSeparator2.Name = "toolStripSeparator2";
120 | this.toolStripSeparator2.Size = new System.Drawing.Size(146, 6);
121 | //
122 | // exitToolStripMenuItem
123 | //
124 | this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
125 | this.exitToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
126 | this.exitToolStripMenuItem.Text = "E&xit";
127 | this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
128 | //
129 | // icoTray
130 | //
131 | this.icoTray.BalloonTipTitle = "SyncThing";
132 | this.icoTray.ContextMenuStrip = this.mnuTray;
133 | this.icoTray.Icon = ((System.Drawing.Icon)(resources.GetObject("icoTray.Icon")));
134 | this.icoTray.Text = "SyncThing";
135 | this.icoTray.Visible = true;
136 | this.icoTray.DoubleClick += new System.EventHandler(this.icoTray_DoubleClick);
137 | //
138 | // timReferesh
139 | //
140 | this.timReferesh.Interval = 2000;
141 | this.timReferesh.Tick += new System.EventHandler(this.timReferesh_Tick);
142 | //
143 | // toolStripSeparator3
144 | //
145 | this.toolStripSeparator3.Name = "toolStripSeparator3";
146 | this.toolStripSeparator3.Size = new System.Drawing.Size(146, 6);
147 | //
148 | // mnuShutdown
149 | //
150 | this.mnuShutdown.Name = "mnuShutdown";
151 | this.mnuShutdown.Size = new System.Drawing.Size(149, 22);
152 | this.mnuShutdown.Text = "Shut&down";
153 | this.mnuShutdown.Click += new System.EventHandler(this.mnuShutdown_Click);
154 | //
155 | // mnuUpgrade
156 | //
157 | this.mnuUpgrade.Name = "mnuUpgrade";
158 | this.mnuUpgrade.Size = new System.Drawing.Size(149, 22);
159 | this.mnuUpgrade.Text = "&Upgrade";
160 | this.mnuUpgrade.Click += new System.EventHandler(this.mnuUpgrade_Click);
161 | //
162 | // mnuRestart
163 | //
164 | this.mnuRestart.Name = "mnuRestart";
165 | this.mnuRestart.Size = new System.Drawing.Size(149, 22);
166 | this.mnuRestart.Text = "&Restart";
167 | this.mnuRestart.Click += new System.EventHandler(this.mnuRestart_Click);
168 | //
169 | // timStatus
170 | //
171 | this.timStatus.Interval = 200;
172 | this.timStatus.Tick += new System.EventHandler(this.timStatus_Tick);
173 | //
174 | // frmMain
175 | //
176 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
177 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
178 | this.ClientSize = new System.Drawing.Size(621, 544);
179 | this.Controls.Add(this.txtContent);
180 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
181 | this.Name = "frmMain";
182 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
183 | this.Text = "SyncThing";
184 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmMain_FormClosing);
185 | this.Load += new System.EventHandler(this.frmMain_Load);
186 | this.Shown += new System.EventHandler(this.frmMain_Shown);
187 | this.VisibleChanged += new System.EventHandler(this.frmMain_VisibleChanged);
188 | this.mnuTray.ResumeLayout(false);
189 | this.ResumeLayout(false);
190 | this.PerformLayout();
191 |
192 | }
193 |
194 | #endregion
195 |
196 | private System.Windows.Forms.TextBox txtContent;
197 | private System.Windows.Forms.ContextMenuStrip mnuTray;
198 | private System.Windows.Forms.ToolStripMenuItem showConsoleToolStripMenuItem;
199 | private System.Windows.Forms.ToolStripMenuItem showGuiToolStripMenuItem;
200 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
201 | private System.Windows.Forms.ToolStripMenuItem stopServiceToolStripMenuItem;
202 | private System.Windows.Forms.ToolStripMenuItem startServiceToolStripMenuItem;
203 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
204 | private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
205 | private System.Windows.Forms.NotifyIcon icoTray;
206 | private System.Windows.Forms.Timer timReferesh;
207 | private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
208 | private System.Windows.Forms.ToolStripMenuItem mnuRestart;
209 | private System.Windows.Forms.ToolStripMenuItem mnuUpgrade;
210 | private System.Windows.Forms.ToolStripMenuItem mnuShutdown;
211 | private System.Windows.Forms.Timer timStatus;
212 | }
213 | }
214 |
215 |
--------------------------------------------------------------------------------
/frmInstall.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Diagnostics;
6 | using System.Drawing;
7 | using System.IO;
8 | using System.Linq;
9 | using System.ServiceProcess;
10 | using System.Text;
11 | using System.Windows.Forms;
12 | using Microsoft.Win32;
13 |
14 | namespace SyncThingTray
15 | {
16 | public partial class frmInstall : Form
17 | {
18 | bool installed = false;
19 |
20 | public frmInstall()
21 | {
22 | InitializeComponent();
23 | }
24 |
25 | public static bool TryInstall()
26 | {
27 | if (!Program.IsUserAdministrator) { Program.RunAsAdministrator(); return false; }
28 | frmInstall frm = new frmInstall();
29 | frm.SetForm();
30 |
31 | frm.ShowDialog();
32 | return frm.installed;
33 | }
34 |
35 | public void SetForm()
36 | {
37 |
38 | if (Program.IsInstalled)
39 | {
40 | txtCurrent.Enabled = false;
41 | cmbAccount.Enabled = false;
42 | cmbStartup.Enabled = false;
43 | }
44 | else
45 | {
46 | btnUninstall.Enabled = false;
47 | cmbAccount.SelectedItem = "Local System";
48 | cmbStartup.SelectedItem = "Automatic";
49 | }
50 | if (Program.IsConfigured)
51 | {
52 | txtCurrent.Text = "";
53 | txtExecutable.Text = Program.SyncExePath;
54 | txtNew.Text = Program.SyncConfigPath;
55 | switch (Program.SyncPriority)
56 | {
57 | case ProcessPriorityClass.RealTime: cmbPriority.SelectedItem = "Real Time"; break;
58 | case ProcessPriorityClass.High: cmbPriority.SelectedItem = "High"; break;
59 | case ProcessPriorityClass.AboveNormal: cmbPriority.SelectedItem = "Above Normal"; break;
60 | case ProcessPriorityClass.Normal: cmbPriority.SelectedItem = "Normal"; break;
61 | case ProcessPriorityClass.BelowNormal: cmbPriority.SelectedItem = "Below Normal"; break;
62 | case ProcessPriorityClass.Idle: cmbPriority.SelectedItem = "Idle"; break;
63 | default: cmbPriority.SelectedItem = "Normal"; break;
64 | }
65 | cmbPriority.SelectedItem = Program.SyncPriority.ToString();
66 | if (Program.IsInstalled)
67 | {
68 | btnInstall.Visible = false;
69 | btnSave.Visible = true;
70 | }
71 | }
72 | else
73 | {
74 | string res = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
75 | if (Directory.Exists(Path.Combine(res, "Syncthing")))
76 | if (File.Exists(Path.Combine(res, "Syncthing", "config.xml")))
77 | txtCurrent.Text = Path.Combine(res, "Syncthing");
78 | res = Path.Combine(Application.StartupPath, "syncthing.exe");
79 | if (File.Exists(res))
80 | txtExecutable.Text = res;
81 | else
82 | {
83 | res = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "syncthing.exe");
84 | if (File.Exists(res))
85 | txtExecutable.Text = res;
86 | else
87 | {
88 | res = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Syncthing", "syncthing.exe");
89 | if (File.Exists(res))
90 | txtExecutable.Text = res;
91 | else
92 | {
93 | res = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "syncthing.exe");
94 | if (File.Exists(res))
95 | txtExecutable.Text = res;
96 | else
97 | {
98 | res = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Syncthing", "syncthing.exe");
99 | if (File.Exists(res))
100 | txtExecutable.Text = res;
101 | }
102 | }
103 | }
104 | }
105 | txtNew.Text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Syncthing", "Data");
106 | cmbPriority.SelectedItem = "Normal";
107 | }
108 |
109 | if (Program.AutoRestart)
110 | {
111 | chkAutoRestart.Checked = true;
112 | numMaxAutoCount.Value = Program.AutoRestartCount;
113 | if (Program.AutoRestartPeriod.Hours > 0)
114 | {
115 | numMaxAutoDuration.Value = Program.AutoRestartPeriod.Hours;
116 | cmbMaxAutoDuration.SelectedItem = "hours";
117 | }
118 | else if (Program.AutoRestartPeriod.Minutes > 0)
119 | {
120 | numMaxAutoDuration.Value = Program.AutoRestartPeriod.Minutes;
121 | cmbMaxAutoDuration.SelectedItem = "minutes";
122 | }
123 | else if (Program.AutoRestartPeriod.Seconds > 0)
124 | {
125 | numMaxAutoDuration.Value = Program.AutoRestartPeriod.Seconds;
126 | cmbMaxAutoDuration.SelectedItem = "seconds";
127 | }
128 | else
129 | {
130 | numMaxAutoDuration.Value = 0;
131 | cmbMaxAutoDuration.SelectedItem = null;
132 | }
133 | }
134 | }
135 |
136 | void CheckInstallEnabled()
137 | {
138 | if (!string.IsNullOrWhiteSpace(txtCurrent.Text) && (!Directory.Exists(txtCurrent.Text) || (!File.Exists(Path.Combine(txtCurrent.Text, "config.xml"))))) { btnInstall.Enabled = false; btnSave.Enabled = false; return; }
139 | if (string.IsNullOrWhiteSpace(txtNew.Text)) { btnInstall.Enabled = false; btnSave.Enabled = false; return; }
140 | if (string.IsNullOrWhiteSpace(txtExecutable.Text)) { btnInstall.Enabled = false; btnSave.Enabled = false; return; }
141 | if (string.IsNullOrWhiteSpace(txtCurrent.Text) && (!Directory.Exists(txtNew.Text) || (!File.Exists(Path.Combine(txtNew.Text, "config.xml"))))) { btnInstall.Enabled = false; btnSave.Enabled = false; return; }
142 | if (!File.Exists(txtExecutable.Text)) { btnInstall.Enabled = false; btnSave.Enabled = false; return; }
143 | btnInstall.Enabled = true;
144 | btnSave.Enabled = true;
145 | }
146 |
147 | private void txtCurrent_TextChanged(object sender, EventArgs e)
148 | {
149 | CheckInstallEnabled();
150 | }
151 |
152 | private void txtNew_TextChanged(object sender, EventArgs e)
153 | {
154 | CheckInstallEnabled();
155 | }
156 |
157 | private void txtExecutable_TextChanged(object sender, EventArgs e)
158 | {
159 | CheckInstallEnabled();
160 | }
161 |
162 | private void btnCurrent_Click(object sender, EventArgs e)
163 | {
164 | dlgSelectFolder.ShowNewFolderButton = false;
165 | dlgSelectFolder.Description = "Select the folder containig the current configuration";
166 | if (dlgSelectFolder.ShowDialog() == DialogResult.OK)
167 | txtCurrent.Text = dlgSelectFolder.SelectedPath;
168 | }
169 |
170 | private void btnNew_Click(object sender, EventArgs e)
171 | {
172 | dlgSelectFolder.ShowNewFolderButton = true;
173 | dlgSelectFolder.Description = "Select the folder where the new configuration should be placed or is already placed";
174 | if (dlgSelectFolder.ShowDialog() == DialogResult.OK)
175 | txtNew.Text = dlgSelectFolder.SelectedPath;
176 | }
177 |
178 | private void btnExecutable_Click(object sender, EventArgs e)
179 | {
180 | if (dlgOpenFile.ShowDialog() == DialogResult.OK)
181 | txtExecutable.Text = dlgOpenFile.SafeFileName;
182 | }
183 |
184 | private void btnInstall_Click(object sender, EventArgs e)
185 | {
186 | // Copy the configuration files, Write the values to the registry, install the service, start the service and set the installed to true!
187 | if (!string.IsNullOrWhiteSpace(txtCurrent.Text))
188 | CopyDirectory(txtCurrent.Text, txtNew.Text);
189 |
190 | bool saved = SaveConfig();
191 |
192 | ServiceStartMode StartMode;
193 | ServiceAccount Account;
194 | bool DelayedStart;
195 |
196 | switch (cmbAccount.SelectedItem as string)
197 | {
198 | case "Local System": Account = ServiceAccount.LocalSystem; break;
199 | case "Local Service": Account = ServiceAccount.LocalService; break;
200 | case "Network Service": Account = ServiceAccount.NetworkService; break;
201 | case "User": Account = ServiceAccount.User; break;
202 | default: Account = ServiceAccount.LocalSystem; break;
203 | }
204 | switch (cmbStartup.SelectedItem as string)
205 | {
206 | case "Automatic (Delayed Start)": StartMode = ServiceStartMode.Automatic; DelayedStart = true; break;
207 | case "Automatic": StartMode = ServiceStartMode.Automatic; DelayedStart = false; break;
208 | case "Manual": StartMode = ServiceStartMode.Manual; DelayedStart = false; break;
209 | case "Disabled": StartMode = ServiceStartMode.Disabled; DelayedStart = false; break;
210 | default: StartMode = ServiceStartMode.Automatic; DelayedStart = false; break;
211 | }
212 |
213 | Program.InstallService(StartMode, DelayedStart, Account, txtLogin.Text, txtPassword.Text);
214 | Program.StartService();
215 | installed = true;
216 | if(saved) Close();
217 | }
218 |
219 | void CopyDirectory(string Source, string Destination)
220 | {
221 | if (!Directory.Exists(Destination)) Directory.CreateDirectory(Destination);
222 | foreach (string dir in Directory.EnumerateDirectories(Source))
223 | CopyDirectory(dir, dir.Replace(Source, Destination));
224 | foreach (string src in Directory.EnumerateFiles(Source))
225 | {
226 | string dst = src.Replace(Source, Destination);
227 | if (File.Exists(dst)) File.Delete(dst);
228 | File.Copy(src, dst);
229 | }
230 | }
231 |
232 | private void chkAdvanced_CheckedChanged(object sender, EventArgs e)
233 | {
234 | this.Height = chkAdvanced.Checked ? 307 : 194;
235 | }
236 |
237 | private void btnSave_Click(object sender, EventArgs e)
238 | {
239 | if(SaveConfig()) Close();
240 | }
241 |
242 | bool SaveConfig()
243 | {
244 | RegistryKey klm = Registry.LocalMachine;
245 | if (klm == null) return false;
246 | using (RegistryKey ksoft = klm.CreateSubKey("SOFTWARE"))
247 | {
248 | if (ksoft == null) return false;
249 | using (RegistryKey ksync = ksoft.CreateSubKey("Syncthing Service"))
250 | {
251 | if (ksync == null) return false;
252 | ksync.SetValue("Executable", txtExecutable.Text);
253 | ksync.SetValue("Configuration", txtNew.Text);
254 | ksync.SetValue("Priority", string.IsNullOrWhiteSpace(cmbPriority.SelectedItem as string) ? "Normal" : cmbPriority.SelectedItem);
255 | if (chkAutoRestart.Checked)
256 | {
257 | string val = "Yes:";
258 | if ((numMaxAutoCount.Value == 0) || (numMaxAutoDuration.Value == 0) || (cmbMaxAutoDuration.SelectedItem == null))
259 | val += "unlimited";
260 | else
261 | {
262 | val += ((int)numMaxAutoCount.Value).ToString()+",";
263 | switch (cmbMaxAutoDuration.SelectedItem as string)
264 | {
265 | case "seconds": val += (new TimeSpan(0, 0, (int)numMaxAutoDuration.Value)).ToString("h\\:m\\:s"); break;
266 | case "minutes": val += (new TimeSpan(0, (int)numMaxAutoDuration.Value, 0)).ToString("h\\:m\\:s"); break;
267 | case "hours": val += (new TimeSpan( (int)numMaxAutoDuration.Value,0, 0)).ToString("h\\:m\\:s"); break;
268 | }
269 | }
270 | ksync.SetValue("Autorestart", val);
271 | }
272 | else
273 | ksync.SetValue("Autorestart", "No");
274 | }
275 | }
276 | return true;
277 | }
278 |
279 | private void cmbPriority_SelectedIndexChanged(object sender, EventArgs e)
280 | {
281 | CheckInstallEnabled();
282 | }
283 |
284 | private void btnUninstall_Click(object sender, EventArgs e)
285 | {
286 | Program.StopService();
287 | Program.UninstallService();
288 | installed = true;
289 | Close();
290 | }
291 |
292 | private void cmbAccount_SelectedIndexChanged(object sender, EventArgs e)
293 | {
294 | if (cmbAccount.SelectedItem as string == "User")
295 | {
296 | txtLogin.Enabled = true;
297 | txtPassword.Enabled = true;
298 | }
299 | else
300 | {
301 | txtLogin.Enabled = false;
302 | txtPassword.Enabled = false;
303 | }
304 | }
305 |
306 | private void chkAutoRestart_CheckedChanged(object sender, EventArgs e)
307 | {
308 | numMaxAutoCount.Enabled = chkAutoRestart.Checked;
309 | numMaxAutoDuration.Enabled = chkAutoRestart.Checked;
310 | cmbMaxAutoDuration.Enabled = chkAutoRestart.Checked;
311 | }
312 | }
313 | }
314 |
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.ServiceProcess;
5 | using System.Windows.Forms;
6 | using System.Configuration.Install;
7 | using System.Collections;
8 | using Microsoft.Win32;
9 | using System.IO;
10 | using System.Security.Principal;
11 | using System.Diagnostics;
12 | using System.Reflection;
13 | using System.Xml;
14 |
15 | namespace SyncThingTray
16 | {
17 | static class Program
18 | {
19 | public const string SERVICENAME = "SyncThingService";
20 | ///
21 | /// The main entry point for the application.
22 | ///
23 | [STAThread]
24 | static void Main(string[] Args)
25 | {
26 | Application.EnableVisualStyles();
27 | Application.SetCompatibleTextRenderingDefault(false);
28 | if (Args.Length > 0)
29 | {
30 | if (Args[0].ToLower() == "install")
31 | {
32 | if (!IsUserAdministrator) { RunAsAdministrator(Args); return; }
33 | InstallService();
34 | return;
35 | }
36 | else if (Args[0].ToLower() == "uninstall")
37 | {
38 | if (!IsUserAdministrator) { RunAsAdministrator(Args); return; }
39 | UninstallService();
40 | return;
41 | }
42 | else if (Args[0].ToLower() == "start")
43 | {
44 | if (!IsUserAdministrator) { RunAsAdministrator(Args); return; }
45 | StartService();
46 | return;
47 | }
48 | else if (Args[0].ToLower() == "stop")
49 | {
50 | if (!IsUserAdministrator) { RunAsAdministrator(Args); return; }
51 | StopService();
52 | return;
53 | }
54 | else if (Args[0].ToLower() == "configure")
55 | {
56 | if (!IsUserAdministrator) { RunAsAdministrator(Args); return; }
57 | var f = new frmInstall();
58 | f.SetForm();
59 | Application.Run(f);
60 | return;
61 | }
62 | else if (Args[0].ToLower() == "shutdown")
63 | {
64 | if (IsConfigured)
65 | {
66 | string res = ReadConfiguration();
67 | if (res != null)
68 | Application.Run(new frmMessage(res));
69 | else
70 | {
71 | res = API.CallAPIPostSync("shutdown", 2000, "Tineout occured: No response was received from syncthing");
72 | if (res != null)
73 | Application.Run(new frmMessage(res));
74 | }
75 | return;
76 | }
77 | }
78 | else if (Args[0].ToLower() == "restart")
79 | {
80 | if (IsConfigured)
81 | {
82 | string res = ReadConfiguration();
83 | if (res != null)
84 | Application.Run(new frmMessage(res));
85 | else
86 | {
87 | res = API.CallAPIPostSync("restart", 2000, "Tineout occured: No response was received from syncthing");
88 | if (res != null)
89 | Application.Run(new frmMessage(res));
90 | }
91 | return;
92 | }
93 | }
94 | else if (Args[0].ToLower() == "upgrade")
95 | {
96 | if (IsConfigured)
97 | {
98 | string res = ReadConfiguration();
99 | if (res != null)
100 | Application.Run(new frmMessage(res));
101 | else
102 | {
103 | res = API.CallAPIPostSync("upgrade", 2000, "Tineout occured: No response was received from syncthing");
104 | if (res != null)
105 | Application.Run(new frmMessage(res));
106 | }
107 | return;
108 | }
109 | }
110 | }
111 | if (Environment.UserInteractive)
112 | Application.Run(new frmMain());
113 | else
114 | ServiceBase.Run(new SyngThingService());
115 | }
116 |
117 | public static bool IsInstalled { get { using (ServiceController s = new ServiceController(SERVICENAME)) return GetIsInstalled(s); } }
118 | public static bool GetIsInstalled(ServiceController Controller)
119 | {
120 | try { var status = Controller.Status; }
121 | catch { return false; }
122 | return true;
123 | }
124 |
125 | public static bool IsRunning { get { using (ServiceController s = new ServiceController(SERVICENAME)) return GetIsRunning(s); } }
126 | public static bool GetIsRunning(ServiceController Controller)
127 | {
128 | if (!GetIsInstalled(Controller)) return false;
129 | return Controller.Status == ServiceControllerStatus.Running;
130 | }
131 |
132 | public static void InstallService()
133 | {
134 | InstallService(ServiceStartMode.Automatic, false, ServiceAccount.LocalSystem, null, null);
135 | }
136 |
137 | public static void InstallService(ServiceStartMode StartMode, bool DelayedStart, ServiceAccount Account, string UserName, string Password)
138 | {
139 | if (IsInstalled) return;
140 | try
141 | {
142 | string path = "/assemblypath=" + Assembly.GetEntryAssembly().Location;
143 | using (var iGbl = new TransactedInstaller())
144 | using (var iSP = new System.ServiceProcess.ServiceProcessInstaller())
145 | using (var iS = new System.ServiceProcess.ServiceInstaller())
146 | {
147 | iSP.Account = Account;
148 | iSP.Password = Password;
149 | iSP.Username = UserName;
150 | iS.Description = "Start the SyncThing executable in the background and allow monitoring";
151 | iS.DisplayName = "SyncThing synchronization launcher";
152 | iS.ServiceName = "SyncThingService";
153 | iS.StartType = StartMode;
154 | iS.DelayedAutoStart = DelayedStart;
155 | iGbl.Installers.AddRange(new System.Configuration.Install.Installer[] { iSP, iS });
156 | iGbl.Context = new InstallContext(null, new[] { path });
157 | iGbl.Install(new Hashtable());
158 | }
159 | }
160 | catch { throw; }
161 | }
162 |
163 | public static void UninstallService()
164 | {
165 | if (!IsInstalled) return;
166 | try
167 | {
168 | string path = "/assemblypath=" + Assembly.GetEntryAssembly().Location;
169 | using (var iGbl = new TransactedInstaller())
170 | using (var iSP = new System.ServiceProcess.ServiceProcessInstaller())
171 | using (var iS = new System.ServiceProcess.ServiceInstaller())
172 | {
173 | iS.ServiceName = "SyncThingService";
174 | iGbl.Installers.AddRange(new System.Configuration.Install.Installer[] { iSP, iS });
175 | iGbl.Context = new InstallContext(null, new[] { path });
176 | iGbl.Uninstall(null);
177 | }
178 | }
179 | catch { throw; }
180 | }
181 |
182 | public static void StartService()
183 | {
184 | if (!IsUserAdministrator) { RunAsAdministrator("start"); return; }
185 | using (ServiceController controller =
186 | new ServiceController(SERVICENAME))
187 | {
188 | if (!GetIsInstalled(controller)) return;
189 | try
190 | {
191 | if (controller.Status != ServiceControllerStatus.Running)
192 | {
193 | controller.Start();
194 | controller.WaitForStatus(ServiceControllerStatus.Running,
195 | TimeSpan.FromSeconds(10));
196 |
197 | }
198 | }
199 | catch { throw; }
200 | }
201 | }
202 |
203 | public static void StopService()
204 | {
205 | if (!IsUserAdministrator) { RunAsAdministrator("stop"); return; }
206 | using (ServiceController controller =
207 | new ServiceController(SERVICENAME))
208 | {
209 | if (!GetIsInstalled(controller)) return;
210 | try
211 | {
212 | if (controller.Status != ServiceControllerStatus.Stopped)
213 | {
214 | controller.Stop();
215 | controller.WaitForStatus(ServiceControllerStatus.Stopped,
216 | TimeSpan.FromSeconds(10));
217 | }
218 | }
219 | catch { throw; }
220 | }
221 | }
222 |
223 | public static bool IsUserAdministrator
224 | {
225 | get
226 | {
227 | try
228 | {
229 | WindowsIdentity user = WindowsIdentity.GetCurrent();
230 | WindowsPrincipal principal = new WindowsPrincipal(user);
231 | return principal.IsInRole(WindowsBuiltInRole.Administrator);
232 | }
233 | catch (UnauthorizedAccessException) { return false; }
234 | catch (Exception) { return false; }
235 | }
236 | }
237 |
238 | public static void RunAsAdministrator()
239 | {
240 | ProcessStartInfo sinfo = new ProcessStartInfo(Application.ExecutablePath);
241 | sinfo.Verb = "runas";
242 | Process.Start(sinfo);
243 | }
244 |
245 | public static void RunAsAdministrator(params string[] Params)
246 | {
247 | ProcessStartInfo sinfo = new ProcessStartInfo(Application.ExecutablePath, "\"" + string.Join("\" \"", Params) + "\"");
248 | sinfo.Verb = "runas";
249 | Process.Start(sinfo);
250 | }
251 |
252 | public static string MonitorFile { get; private set; }
253 | public static string SyncExePath { get; private set; }
254 | public static string SyncConfigPath { get; private set; }
255 | public static ProcessPriorityClass SyncPriority { get; private set; }
256 | public static bool AutoRestart { get; private set; }
257 | public static int AutoRestartCount { get; private set; }
258 | public static TimeSpan AutoRestartPeriod { get; private set; }
259 |
260 | public static bool IsConfigured
261 | {
262 | get
263 | {
264 | MonitorFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData, Environment.SpecialFolderOption.Create);
265 | MonitorFile = Path.Combine(MonitorFile, "Syncthing Service");
266 | if (!Directory.Exists(MonitorFile)) Directory.CreateDirectory(MonitorFile);
267 | MonitorFile = Path.Combine(MonitorFile, "Std.out");
268 |
269 | // Check the configuration
270 | RegistryKey klm = Registry.LocalMachine;
271 | if (klm == null) return false;
272 | using (RegistryKey ksoft = klm.OpenSubKey("SOFTWARE"))
273 | {
274 | if (ksoft == null) return false;
275 | using (RegistryKey ksync = ksoft.OpenSubKey("Syncthing Service"))
276 | {
277 | if (ksync == null) return false;
278 | SyncExePath = ksync.GetValue("Executable", "") as string;
279 | SyncConfigPath = ksync.GetValue("Configuration", "") as string;
280 | string priority = ksync.GetValue("Priority", "") as string;
281 | switch (priority)
282 | {
283 | case "Real Time": SyncPriority = ProcessPriorityClass.RealTime; break;
284 | case "High": SyncPriority = ProcessPriorityClass.High; break;
285 | case "Above Normal": SyncPriority = ProcessPriorityClass.AboveNormal; break;
286 | case "Normal": SyncPriority = ProcessPriorityClass.Normal; break;
287 | case "Below Normal": SyncPriority = ProcessPriorityClass.BelowNormal; break;
288 | case "Idle": SyncPriority = ProcessPriorityClass.Idle; break;
289 | default: SyncPriority = ProcessPriorityClass.Normal; break;
290 | }
291 | string[] autos = (ksync.GetValue("Autorestart", "") as string).Split(new char[] { ':' }, 2);
292 | if ((autos.Length < 2) || (autos[0] != "Yes"))
293 | AutoRestart = false;
294 | else if (autos[1] == "unlimited")
295 | {
296 | AutoRestart = true;
297 | AutoRestartCount = 0;
298 | AutoRestartPeriod = TimeSpan.Zero;
299 | }
300 | else
301 | {
302 | string[] opts = autos[1].Split(',');
303 | int t; TimeSpan d;
304 | if (!int.TryParse(opts[0], out t))
305 | t = 0;
306 | if ((opts.Length<2)|| !TimeSpan.TryParse(opts[1], out d))
307 | d = TimeSpan.Zero;
308 | if ((t == 0) || (d == TimeSpan.Zero))
309 | {
310 | AutoRestart = false;
311 | }
312 | else
313 | {
314 | AutoRestart = true;
315 | AutoRestartCount = t;
316 | AutoRestartPeriod = d;
317 | }
318 | }
319 | return !string.IsNullOrEmpty(SyncExePath) && !string.IsNullOrEmpty(SyncConfigPath);
320 | }
321 | }
322 | }
323 | }
324 |
325 | public static string GuiUrl { get; private set; }
326 | public static string APIUrl { get; private set; }
327 | public static string APIKey { get; private set; }
328 |
329 | public static string ReadConfiguration()
330 | {
331 | string cfgpath = Path.Combine(Program.SyncConfigPath, "config.xml");
332 | if (File.Exists(cfgpath))
333 | {
334 | XmlDocument xml = new XmlDocument();
335 | xml.Load(cfgpath);
336 | XmlElement xr = xml.DocumentElement;
337 | var xgs = xr.GetElementsByTagName("gui");
338 | if (xgs.Count == 1)
339 | {
340 | XmlElement xg = (XmlElement)xgs[0];
341 | string tls = xg.GetAttribute("tls");
342 | var xas = xg.GetElementsByTagName("address");
343 | if (xas.Count == 1)
344 | {
345 | GuiUrl = (tls == "true" ? "https://" : "http://") + xas[0].InnerText;
346 | APIUrl = "http://" + xas[0].InnerText;
347 | }
348 | else
349 | return "The http address of Syncthing could not be found in the configuration";
350 | xas = xg.GetElementsByTagName("apikey");
351 | if (xas.Count == 1)
352 | APIKey = xas[0].InnerText;
353 | else
354 | return "Could not find the API Key in the configuration: Ensure that an API key was generated in the syncthing GUI";
355 | return null;
356 | }
357 | else
358 | return "The Syncthing configuration cannot be retreived as the gui element could not be found";
359 | }
360 | else
361 | return "The configuration file could not be found: " + cfgpath;
362 | }
363 | }
364 | }
365 |
--------------------------------------------------------------------------------
/frmInstall.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 186, 17
125 |
126 |
127 |
128 |
129 | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
130 | JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEaklE
131 | QVRIS7WVXUxbZRjHEbeJVyZ6oXOXerUbNV7IxcymxiXTZPFOlxiz+JHNaGK2izkZTtiiaER0EORDWray
132 | BRjQDRBBkI+2UGltC6UwWGmBQku/S8vpaXvac/r4PC+0AT2Ju8CLH+flec/5/9/neZ/3bQEA/K8U1A0Y
133 | H5Kb2Ctkgzsg84eRfcj+bWhMsQdamGywZ3pp39CMq6hTP3ewadD08s0Ry5F2jfUoQWOMHVEMWQ53GReK
134 | uk3OIjmNHLv+6ZlaLmz8w/R4p8F+okqt/aa2R992fWSq/ZbWNtw2YdMRt3RWo0ozrVONWLUqne1ui9b2
135 | ncEZLOaS4qGdWjnyA9yLp8pUvx0rVfZfQQPDlDuy5o4LYUGSYmI2m0qIUgrHYjwtSgFOSK2EeM6wHFjv
136 | tSzNKIdN49+rdXfGHYHn0ZBKuNugdsBwqKJ1tHpwdtWxGOTj2WwW/snZC01QfLICflBqIJwQwZdIg5tL
137 | Z5fCqYxpJZzus65E0aQP+ahFM1uYN0Dhg2eqWr6yB3mOE8R/CROYARx9px7e+mwMGjpmwMunYWUjBYsh
138 | Hu4FET8P+D0s+HhAg96T5ytPoe4jzODzxt6SUbsvKidMSEga4dMSRAUJ/PE0rMUEcAYTMOfjwOKJgHkt
139 | DJa1CNi8m8yIMjnx8ZXnmEF1t17t4TKy4hkkLWXhxeNfMF59txlKr42z1c8HNmHavcHEzStogEZz3jhD
140 | bbLDh5Ut5VsGfXoTliaUkiQmSE+GKEE8g+CqYwgZvHGmBy6hgZNK44+hQQSMKM4yQAPKgMpl9cTIoI0Z
141 | YPcYMQOBsoikRNhIIriJURojse1nzqC0egJckSSWIg6z3hgrDYlb16P5DCj2wbfNncwAO2gS20uk2jkj
142 | KSAjIpTIQIAXIYA1D/KZvMGX1ePgxhIth5JwP5RgKyZR2mzaZHqOLfh3GXQ0D5v9I3Z3ll7ENgVHOAmr
143 | 0RTrFn9CgNAugwlY3xTY/BIuyBHht77BZ76TOjXJ964qrjGDc7Udxytuj2rwBAvYTax+9CIeMmYQwEyw
144 | 1fMGl2v0mJ0IfszOG8/AKodmCC0qiO+iDmBnOrFNn2AGOHj0XF3Xa4hZMTQFeNhY2qtcEsW36v/KqV/g
145 | 9dOtDDJRqK0Qwb0iQS9mRyWlut/QzvCo8+fl5n7WosyA/uDEAbwmXsJsaq62DdtUY5b7d/5aTOgdQVaK
146 | JHYUh53ESEnAoyleGXQO/KN2t6d9ct6F3zlQvOv9CuXTOfG8QQ68R/aXXR8oPl+vbrjQoB4pU/YvVt4e
147 | c3mwTz1Yd+dGEqZXI0J9vzFUrvrdcanxV+PZH282onD5Jz+1HsPyPIbXBF3l8gY5bK5gYfOQ+dkbg+bD
148 | JU3di1RrH2LDVqy6q/NcrOv4VDFgfLO2b/KFn/sMz2CrPymnQ8gGt2E/Nqe/Vujo4LlwTy42dd/DGN3/
149 | B2hu+x25b/PIBneC/aylTcTSzcvN/xeywZ28XVIzi5s/Kzf3IMgG9xLZ4N4BBX8DkiAEaZStrZoAAAAA
150 | SUVORK5CYII=
151 |
152 |
153 |
154 | 398, 17
155 |
156 |
157 | 304, 17
158 |
159 |
160 |
161 | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
162 | JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEaklE
163 | QVRIS7WVXUxbZRjHEbeJVyZ6oXOXerUbNV7IxcymxiXTZPFOlxiz+JHNaGK2izkZTtiiaER0EORDWray
164 | BRjQDRBBkI+2UGltC6UwWGmBQku/S8vpaXvac/r4PC+0AT2Ju8CLH+flec/5/9/neZ/3bQEA/K8U1A0Y
165 | H5Kb2Ctkgzsg84eRfcj+bWhMsQdamGywZ3pp39CMq6hTP3ewadD08s0Ry5F2jfUoQWOMHVEMWQ53GReK
166 | uk3OIjmNHLv+6ZlaLmz8w/R4p8F+okqt/aa2R992fWSq/ZbWNtw2YdMRt3RWo0ozrVONWLUqne1ui9b2
167 | ncEZLOaS4qGdWjnyA9yLp8pUvx0rVfZfQQPDlDuy5o4LYUGSYmI2m0qIUgrHYjwtSgFOSK2EeM6wHFjv
168 | tSzNKIdN49+rdXfGHYHn0ZBKuNugdsBwqKJ1tHpwdtWxGOTj2WwW/snZC01QfLICflBqIJwQwZdIg5tL
169 | Z5fCqYxpJZzus65E0aQP+ahFM1uYN0Dhg2eqWr6yB3mOE8R/CROYARx9px7e+mwMGjpmwMunYWUjBYsh
170 | Hu4FET8P+D0s+HhAg96T5ytPoe4jzODzxt6SUbsvKidMSEga4dMSRAUJ/PE0rMUEcAYTMOfjwOKJgHkt
171 | DJa1CNi8m8yIMjnx8ZXnmEF1t17t4TKy4hkkLWXhxeNfMF59txlKr42z1c8HNmHavcHEzStogEZz3jhD
172 | bbLDh5Ut5VsGfXoTliaUkiQmSE+GKEE8g+CqYwgZvHGmBy6hgZNK44+hQQSMKM4yQAPKgMpl9cTIoI0Z
173 | YPcYMQOBsoikRNhIIriJURojse1nzqC0egJckSSWIg6z3hgrDYlb16P5DCj2wbfNncwAO2gS20uk2jkj
174 | KSAjIpTIQIAXIYA1D/KZvMGX1ePgxhIth5JwP5RgKyZR2mzaZHqOLfh3GXQ0D5v9I3Z3ll7ENgVHOAmr
175 | 0RTrFn9CgNAugwlY3xTY/BIuyBHht77BZ76TOjXJ964qrjGDc7Udxytuj2rwBAvYTax+9CIeMmYQwEyw
176 | 1fMGl2v0mJ0IfszOG8/AKodmCC0qiO+iDmBnOrFNn2AGOHj0XF3Xa4hZMTQFeNhY2qtcEsW36v/KqV/g
177 | 9dOtDDJRqK0Qwb0iQS9mRyWlut/QzvCo8+fl5n7WosyA/uDEAbwmXsJsaq62DdtUY5b7d/5aTOgdQVaK
178 | JHYUh53ESEnAoyleGXQO/KN2t6d9ct6F3zlQvOv9CuXTOfG8QQ68R/aXXR8oPl+vbrjQoB4pU/YvVt4e
179 | c3mwTz1Yd+dGEqZXI0J9vzFUrvrdcanxV+PZH282onD5Jz+1HsPyPIbXBF3l8gY5bK5gYfOQ+dkbg+bD
180 | JU3di1RrH2LDVqy6q/NcrOv4VDFgfLO2b/KFn/sMz2CrPymnQ8gGt2E/Nqe/Vujo4LlwTy42dd/DGN3/
181 | B2hu+x25b/PIBneC/aylTcTSzcvN/xeywZ28XVIzi5s/Kzf3IMgG9xLZ4N4BBX8DkiAEaZStrZoAAAAA
182 | SUVORK5CYII=
183 |
184 |
185 |
186 |
187 | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
188 | JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEaklE
189 | QVRIS7WVXUxbZRjHEbeJVyZ6oXOXerUbNV7IxcymxiXTZPFOlxiz+JHNaGK2izkZTtiiaER0EORDWray
190 | BRjQDRBBkI+2UGltC6UwWGmBQku/S8vpaXvac/r4PC+0AT2Ju8CLH+flec/5/9/neZ/3bQEA/K8U1A0Y
191 | H5Kb2Ctkgzsg84eRfcj+bWhMsQdamGywZ3pp39CMq6hTP3ewadD08s0Ry5F2jfUoQWOMHVEMWQ53GReK
192 | uk3OIjmNHLv+6ZlaLmz8w/R4p8F+okqt/aa2R992fWSq/ZbWNtw2YdMRt3RWo0ozrVONWLUqne1ui9b2
193 | ncEZLOaS4qGdWjnyA9yLp8pUvx0rVfZfQQPDlDuy5o4LYUGSYmI2m0qIUgrHYjwtSgFOSK2EeM6wHFjv
194 | tSzNKIdN49+rdXfGHYHn0ZBKuNugdsBwqKJ1tHpwdtWxGOTj2WwW/snZC01QfLICflBqIJwQwZdIg5tL
195 | Z5fCqYxpJZzus65E0aQP+ahFM1uYN0Dhg2eqWr6yB3mOE8R/CROYARx9px7e+mwMGjpmwMunYWUjBYsh
196 | Hu4FET8P+D0s+HhAg96T5ytPoe4jzODzxt6SUbsvKidMSEga4dMSRAUJ/PE0rMUEcAYTMOfjwOKJgHkt
197 | DJa1CNi8m8yIMjnx8ZXnmEF1t17t4TKy4hkkLWXhxeNfMF59txlKr42z1c8HNmHavcHEzStogEZz3jhD
198 | bbLDh5Ut5VsGfXoTliaUkiQmSE+GKEE8g+CqYwgZvHGmBy6hgZNK44+hQQSMKM4yQAPKgMpl9cTIoI0Z
199 | YPcYMQOBsoikRNhIIriJURojse1nzqC0egJckSSWIg6z3hgrDYlb16P5DCj2wbfNncwAO2gS20uk2jkj
200 | KSAjIpTIQIAXIYA1D/KZvMGX1ePgxhIth5JwP5RgKyZR2mzaZHqOLfh3GXQ0D5v9I3Z3ll7ENgVHOAmr
201 | 0RTrFn9CgNAugwlY3xTY/BIuyBHht77BZ76TOjXJ964qrjGDc7Udxytuj2rwBAvYTax+9CIeMmYQwEyw
202 | 1fMGl2v0mJ0IfszOG8/AKodmCC0qiO+iDmBnOrFNn2AGOHj0XF3Xa4hZMTQFeNhY2qtcEsW36v/KqV/g
203 | 9dOtDDJRqK0Qwb0iQS9mRyWlut/QzvCo8+fl5n7WosyA/uDEAbwmXsJsaq62DdtUY5b7d/5aTOgdQVaK
204 | JHYUh53ESEnAoyleGXQO/KN2t6d9ct6F3zlQvOv9CuXTOfG8QQ68R/aXXR8oPl+vbrjQoB4pU/YvVt4e
205 | c3mwTz1Yd+dGEqZXI0J9vzFUrvrdcanxV+PZH282onD5Jz+1HsPyPIbXBF3l8gY5bK5gYfOQ+dkbg+bD
206 | JU3di1RrH2LDVqy6q/NcrOv4VDFgfLO2b/KFn/sMz2CrPymnQ8gGt2E/Nqe/Vujo4LlwTy42dd/DGN3/
207 | B2hu+x25b/PIBneC/aylTcTSzcvN/xeywZ28XVIzi5s/Kzf3IMgG9xLZ4N4BBX8DkiAEaZStrZoAAAAA
208 | SUVORK5CYII=
209 |
210 |
211 |
212 |
213 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
214 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
215 | AAAAAAAAc0sE/5tmBv+7egf/x4II/8eCCP+9ewf/nmcG/3ZNBP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
216 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
217 | AAB1TQX/w4EJ/82HCf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8yHCf/Gggn/e1EF/wAA
218 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
219 | AABlQwX/yYYK/8qGCv/Jhgr/yYYK/8mGCv/JhQn/yIMF/8iDBf/IgwX/yIMF/8mFCP/Jhgr/yYYK/8mG
220 | Cv/Jhgr/y4gK/25JBf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
221 | AAAAAAAApW8J/8yJC//KiAv/yogL/8mHCf/Jhwn/1J04/+G8d//r0aH/79q0/+/atP/r0qP/4r56/9Wf
222 | PP/Jhwv/yYcJ/8qIC//Jhwj/y4gK/6xzCf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
223 | AAAAAAAAAAAAALl9C//LiQz/y4kM/8uJC//Lig//4bt0//fu3f////////////79+//79+7/+/bu//78
224 | +v////////////jw4f/ivnr/16RD/+XFh//csFz/yokL/7+CDP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
225 | AAAAAAAAAAAAAAAAAAC5fwv/y4sN/8uLDf/KiQr/16VE//jv3v//////+fHj/+bHif/Woz7/zpEa/8uL
226 | Dv/Liw7/zpEZ/9WhO//lxIP/+O/e///////////////////////pzpr/yokJ/8CDDP8AAAAAAAAAAAAA
227 | AAAAAAAAAAAAAAAAAAAAAAAAo3EL/8yMDv/MjA7/y4oK/+G7cP/+/fv//Pjw/+G7cP/MjQ7/y4sL/8yM
228 | Dv/MjA7/zIwO/8yMDv/MjA7/zIwO/8uLC//KiQn/9erT//////////////////38+f/Okhr/zIwO/613
229 | C/8AAAAAAAAAAAAAAAAAAAAAAAAAAGFDB//OkA//zI4P/8uMC//hvHD///////bs1//Smij/zI0M/8yO
230 | D//Mjg//zI4P/8yOD//Mjg//zI4P/8yOD//Mjg//zI4P/8uLCP/y4cD//////////////////fr2/86S
231 | F//Mjg//zo8P/29NCP8AAAAAAAAAAAAAAAAAAAAAyo0P/82QEP/Mjw//2KhF//79+//27Nf/z5Qa/82Q
232 | D//NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zI4M/+jLkP//////////////
233 | ///+/v3/269S/8yPDv/NkBD/z5EQ/wAAAAAAAAAAAAAAAHBPCf/OkhH/zpER/86SE//4793//Pjw/9Od
234 | Kf/OkRD/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REP/VojX//fv2//br
235 | 1P/ft2P/2q1M//r16f/69Of/0JUY/86REf/OkRH/flkK/wAAAAAAAAAAwosR/82SD//Tnin/6c6T////
236 | ///ivnD/zZIP/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS//br
237 | 0//9+/f/1qQ3/86TEf/NkhD/3rhi///////mx4X/zZIP/86TEv/KkRH/AAAAAAAAAADTmBL/3LJV//37
238 | +P///////////+G8a//Okw//z5US/8+VE//PlRP/z5UT/8+VE//PlRP/z5UT/8+VE//PlBL/zpMQ/9GY
239 | G//ozI///////+TEfP/Okw//z5UT/8+VE//OkxD/9+3X//r05//PlhT/z5UT/9KXE/8AAAAAbE4K/8+U
240 | Dv/269L/////////////////+/br/+PCdv/fuF//2q1H/9akM//TnSP/0JgX/8+VEP/Okw3/zpMM/9en
241 | Of/37dj//v37//7+/f/z5cX/z5UR/8+WFP/PlhT/z5YU/8+VEv/kxXz//////9uuSv/PlhT/z5YU/3pZ
242 | C/+ZcA//z5cQ//jw3f////////////////////////////////////////////7+/f/8+fL/+fLh//Xp
243 | zf/w3rT/+fPk//////////////////Hguf/Plg//0JgU/9CYFP/QmBT/0JgU/9enN///////6MyL/8+X
244 | Ev/QmBT/oXYP/8CNE//QmBP/5cZ8/////////////////+rSl//Zqz3/3bZW/+LAbv/oy4f/7Nag//De
245 | s//058n/+PDd//z47////v7/////////////////+fHg/9CYEf/RmRX/0ZkV/9GZFf/RmRX/0pwb//36
246 | 9P/v3bH/0JYP/9GZFf+/jBP/0JoW/9GbFv/PmA//8uO///389//hvWb/0JoU/9GbFv/Rmxb/0ZsW/9Ca
247 | FP/QmRL/0JgQ/8+YD//QmRL/0ZoU//Pkwf/////////////////79+z/2Kk4/9CaFP/Rmxb/0ZsW/9Gb
248 | Fv/QmhP/+vPk//PlxP/PmA//0ZsW/8mWFf/QnBf/0p0X/9GaEf/x4Lb//Pjv/9KeGP/SnRf/0p0X/9Kd
249 | F//SnRf/0p0X/9KdF//SnRf/0p0X/9KdF//SnRf/1aQm//Ddr//48Nv/8N6x//379v/8+fL/37lY/9Gb
250 | E//SnRf/0p0X/9GcFP/68+T/9ObE/9CaEP/SnRf/ypgW/8CQFv/Snhj/0ZwT/+7ap//+/fv/1aMk/9Ke
251 | GP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0ZwT/9GcE//RmxH/27JF//r1
252 | 6P/+/vz/5sl+/9GcFP/Snhj/06Ad//368//w37P/0ZsS/9KeGP+/kBb/mHMS/9OgGf/SoBj/58p+////
253 | ///cskb/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9Og
254 | Gf/ToBj/16gs//ft1P//////7tml/9WkIv/fulf//////+rRj//Snxf/06AZ/6F6E/9sUg3/1KIa/9Sh
255 | Gv/cs0T//////+nQjP/ToBf/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9Sh
256 | Gv/UoRr/1KEa/9ShGv/UoRr/1KMd//Dgs////////fv2////////////582D/9OgGP/UoRr/e14P/wAA
257 | AADZpxz/1KMb/9OjGv/58uD/+fLg/9SjGv/Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/1KMb/9Sj
258 | G//Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/06AU//XqzP/////////////////8+fD/1aYh/9im
259 | HP8AAAAAAAAAAMWZGf/VpRz/1KQa/+jNgf//////5cdx/9SkGv/VpRz/1aUc/9WlHP/VpRz/1aUc/9Wl
260 | HP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/UoxX/9erL//////////////////7+
261 | /f/YrCz/zqAb/wAAAAAAAAAAblYP/9anHf/Vph3/1qgh//r05P/7+O3/2a0v/9WmHf/Vph3/1aYd/9Wm
262 | Hf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WlG//ozX//////////
263 | ////////9OfB/9WlGf98YRD/AAAAAAAAAAAAAAAAz6Md/9aoHv/VqB3/4L5X//7+/f/37tL/16oj/9ao
264 | Hv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qkf//Xp
265 | xv///v7/8+a9/+zWlP/XqyX/1agd/wAAAAAAAAAAAAAAAAAAAABdSQ3/2qwf/9eqH//WqRv/6dCD////
266 | ///37dH/2rAv/9apHf/Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//1qod/9mu
267 | Kv/16sj//////+vVkP/Vpxb/1qkc/9msH/9rVA//AAAAAAAAAAAAAAAAAAAAAAAAAACkghj/16sg/9er
268 | IP/Wqhz/6dGF//7+/f/7+Oz/5clu/9eqHf/Wqx7/16sg/9erIP/XqyD/16sg/9erIP/XqyD/1qse/9aq
269 | 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
304 |
305 |
306 |
--------------------------------------------------------------------------------
/frmMessage.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
124 | YQUAABL3SURBVGhDvZkHeJRV9sbddV06iqKg7toQVsACClIEIUBQEVT+dhCkCIiACEgVBGMBsdAE6T0o
125 | JQTSIb33PpMyyaSQEJJAKCGQBEjO/s5kPhxcXPev7t7neZ8v88333fuec99T7uSG3zM+nDWrExgFvgLe
126 | IAtUgnoH6Ge9r9/rc/p8J/sU//vB4reDEWDvvLlzc9esXp3q4+1tMZvNJxk1tbW1dfX19WJAP+t9/V6f
127 | 0+f1PX3fPs/t9qn/u4OFmoNRc+fMiV+5cmVyfHx84aVLl67UXbok1cePy+noaCnavl0yFiyQhNdflwhn
128 | Z4l55RVJmz1b8jZtkpNhYXKxqEjqamvVqCtxcXGFOo/Op/Pq/Pal/vjB5D1Y6NCqVauS8vLyyqWurq7m
129 | xAkpPXhQUseMkdR33hHTjBmSNX++DZmQNk2bJqkTJ0rCyJESPXy4hD37rAQNGCAhw4ZJ3q5dcqG4WOrr
130 | 6q4wX5nOq/PrOvYl/7jBpCMXfvSRKSE+Pg9N1NXg7YK1ayV90iTJdXGRIv7O/+QTsUydIhlvvSWm4f8n
131 | 6UOHSiqEk599RpKeeUYSQCyIYlfCBg2SACcn8e7dWxJ573xBgei88XFxVl2H9d6yL/37B5PNXPHttwlo
132 | uLLuwgUpPXTIRrzgm2/k+Lp1Yp05U7LffFOyX3hBcvBsDsRzFfa/s4c8L5nPPScmyKdBPtF5oMRCPrJ/
133 | fwl++mnxwYiD3btLxpYtcun8eSkvLz/HeiqpWXYKv33oJNu2bk1QnVcjF8uSJZKDx0p37JD8WTPFgr5z
134 | XnxR8iFfAAqHviD5w4aCYWIdOgxDhojl+efFggE2I9iRtMGDJWWgsyQgpZh+/SSib1/x79VL3DEiYPw4
135 | OZuXJ7retm3bEn6XEfrydibRLFJlsYhpyhQpXLVKji1dKhY0bTVIvzAMNJAuwON5ELaCXAjnPPesZCKh
136 | DP42swPp7IAiBQklYkC8U3+JxoCIp56SEHbi0OOPiyexUp6WZsteW7dsUSNm2in954OX3tJtVE8o+dTx
137 | 4+UYcskjMLPweB5kCyFfNOxFKRiG1x2I5yhxPJ0NMvG2GSjp1IEDbUgGiUgoHgPikFE0Mors00dCMSCo
138 | Zw9x79pFPJFkaWqqLVMtX748GT4v26n9+uDhngRSumrxAtuZ/u67UkiQ5pJRsiFu8zRGWAc5SzaL5uJN
139 | q2peiQ+G+DMOxO2kFUl4Ox7CKp1YvB75WFcJ7dLF5v1wNaBXTwns2VP8u3WXQ10eE69xY+V0fr6UlpZW
140 | Lpg/X4tgVzvFXx481FxTmWaDy5WVkvXxx5L39deSO2uWZELSquRBDl4rGzdOql1/kJIJE8SEIdlIxUYc
141 | g9IVAwdIGp5OhHRiPzyO3uNAFHqPfPJJyVm8WHJBMLIJfOJxCYZ8APePPPGE+HbtKvsfe0wCFy2UaniE
142 | hoZa58yevQd+je1Urz94YJTmY01pJW5ukvnRR5LHImbI5wxB5wRlJgudIOdLSYnYBsFdQB1IgIgST8PD
143 | qU4NHk/AUPV2LNcYEN69h83r1jVrJI9UXHLqlBRv2Sp+nTqJL4Rt5IEnBhx+9BFxBSa3A1py6pd+8YVp
144 | 1syZw+xU/3VAvjXej8nNzS2vpsAkQqrwu+/ETEXNGjLEJpNsttpGvqysgbwxysvFOna8xEIiWYOz/9M2
145 | jyv56L59JFplQpYJfrSL5CBHK9XYlJ0tKWaz5OOIgo0bxfOhh8ST970w8PCjj8rBzp1lf6fOsuGRR+QU
146 | dSIpKal09ocfBk6dMqWlnfK1AwNGUtaTMPdKLsQzP14kme9OFvNzQ2yBmYUcCt94A48ft7P+2cAIy9tv
147 | SwSLx2GojTzEI5FXKF4NgZwVojlKPjNTUpKSJCkhQaKBBa2bkapb+/biDnE3duQA2Nexo+zq/LAk791L
148 | QF+q+9TFJfv9adOes1O+dmDAPnqbgmo8EkeatCCdVLyeQTaxaAp8sqeU0ir823H6tGSNnyBBEFHiYeg9
149 | GDkE4cWcDRvEws6mQz41OVkSIB4bGyth9Edl585Jhp+f7G7XTvaxE3vx/I8PdZQfOnQQ13/8Q3wmvSul
150 | xwrrD+zfXzj9/fe/ge6fG1jbB+Q7aXeoabNo3z5Jef99SR871lY5MwYNEDNZxMQOJKP/Sirmz4fm7Jqa
151 | Gqnl70sYYR73jvhhRCByCMSjFt4xyKvnHcmXVpyS7PgEWfjww7Li7rvlh/aQfuAB2fVAO9l1772y4+/3
152 | yC6ckRMWLvn5BdVwzXvzjTfuslNvGNwcpS2udolRyMQ0Z44k4n1Nf+kQV/IanCkqCRY6uXlzA3NG3ZUr
153 | NvJVVVVswGk5XV0t58vKJZmeyPv++yUb2Sh5U0aGJCYm2ohHRUVJaEiInCCIs/g8n+e+aNZMVjVtKtu5
154 | bgNb7dctzZvLuptvlvBPXOR8ZWX9J0uW5E+cMEFl9KcG9gwMWObp6Wm5yELhL78sKaTGeCfNJhAHKWSQ
155 | JIJSs0ocuxCKJMrsO3EJ75+nhzlz5oycgtBxskspf1fg7dzduyWDaxKVNQ6iERERmhLF399fSkgEZtrv
156 | uZD/HKKrmzS5St4wQLGleTPZ2KKFHHxxuFSUldZv3LCh8L3JkxdC+y8N7BkY4JGWllZ2MjJSIkaMkNhX
157 | XyWTOEnS0/1AX0no09cWmDFsZSzXKIqNP/o8hncv1tXJGTRMs2cjf+zYMbGQYbKsVjFRCGPj420eV7kE
158 | BQWJ/9GjUqzkY2Jk7j332Dyv5HdxVQMMXLMLLZrLtq6PS0laar2Xp8epKe+95wrtn2oCBmSWl5VVW5BG
159 | JAEcRdbR3B0P8QQIxz3V20Y+Cu9HEpjhugsE5xECzrp1m1QgG83p9PWSlZUl6enpV+USjZeVfAiSUc8X
160 | l5ZKRlycLCBgDfK7kY4aoNgBHA2xAQM23ne/FEVGSXJi4qVpU6cGQ7sFaJARBlTqsS+W1jiSHYhE7zF9
161 | npJYSCvxmN524uTyUKplSLduEsJnDdLDbdqK6dNPJR/vm+mbDPKctq6Sv+p5il4GRi148MGrslHyjnA0
162 | xMDO5i1kTavbpMDviFhz8q58MH26Cdq3gRsNA0gk9XKEBi0C+YRpDreTj+zVQ8J7dJcwyCvxYC1I7IB6
163 | 37NVK3GDxB4Wjpk6zWZAEinSCNSr5NXzkM/EoPl22Xx3HfLXBc/uxoDvb75FLPv3S8nxEpkzZ85xaLcF
164 | f73GAHeyTNhLL0moZhtIRvTo0UBcSXd7XIK4BlKUvEl37hA4APayiEJ3L9lkkhg8H0ksGeQDAgLEjxwf
165 | ikEZ4eGykbS6gufV6B9+AT/acfUemWhjy5ZioaCVnigRWooiaP8NNMSBYYA3XWYgLbF2hSEqFRvxbhL0
166 | RDcJ5O+jVNnDTKRedySfvGiRpKD9aAI20p5pDM8reW9vb/Hw8JBQAtcC/JhLpaEkjTkU+6+DA2CfGkAq
167 | zXNzlxMUWgwohvZ9oIlhAOm7ui6MSuvrzHkVA9TbQZBXj2uX6EthOmQnbpBXAklU7GSkE0VxisDrBvkj
168 | aN7nyBEbeS8vLxvc3d0lhB2yIDE/4kd3wUbSYV51jkJ32Aa+d8OADcj1eGCAFBUVy8wZMwqgfT9oahiQ
169 | VlJScjF9/Xo53L+fHIFwgAN5n3YP2iY1vGJsc/zChZKi5CGl5DXTBAYGylGIF9Dz+CMZT19f8fL0tO2A
170 | zRD+jiBOcnjHjw5WHWGQVQcdtsPDAN8fxoAtd90lJ2OjxWwy1X+8aJEV2g84GuCenJxcVhwcLHvJLr54
171 | Xyf3wwif9g/aPKPEdTH1miJu7lxJysmRKGQTDlGDvEqmQDMSn92mTxdvHx/xwAgfyPtyVVlpXKTwbiGG
172 | HCUd6/xK1kvRuLF4A18Deg8DDjzZXSrMJp3n4owPPgiC9jU7sNTTw8NSSVe4E9JeGODNFnvRSOnkhlyU
173 | uGaGaKSWRLGKxIvhPwvWQqq5Fqn59DOaKj04HvrgGF8kpeTVUM1QmmatdLAnzOniT0ZTA/wgrDgCjgL/
174 | xk3En/UOUYmDX39NKktL6zesX3/u1VdeWQXta2Jg9Hdr1qRephfaw6HETfN7h/ay/zrko6ZOlUT6+Ch0
175 | rOSVkJJXvdvIc3++vUgZqdJj9Nvir8EN8WigdcLMHFZ24RQ91Cn6pGDaZ39IBzVqdBXBfA7kfbe//U0y
176 | P/9cTpaU1HFmKe/bp88kaGsWamQY0IFuNJ9Avpy6fTtV7z7Zc2sr2QMBg7iWdC+CWw8hUXSUYfZgVfIq
177 | jUKVDZ6fZy9SSl7fVeM1ZnxHj5botHTb+0peq7ZmFO2f6umpiskwKpkwiIeDCEWzphKMfHz69ZVS1kmI
178 | CKvlQJPXpk0bJ2i3ATfZDNCBETtptgrOcPpZ1pTGCgI77R7UyqgG7CaQYl1dJRztBkI+0IG8CQ/Ppv01
179 | KqySV+K6g0YM+XPKM6v2eV7JV1RU2JrBGgwIp4FU6UQ3/qvENGksMTwfg3SO3HKLJFAkVd5rV6w49dpr
180 | r+2G7qPgVtBQiXVgwCtff/11KufPukPvjJc16G87k+wERnO1UY2gkob/uEcC8LbqWmVjonAp+U/4Xlti
181 | NVgNMMhrBtPMopkmfOJEKcLr5+ifLkNcEUH7vk6fwevxzZtKYtNmkojnY8n9rnfcIWWcz6vOnq3nSFnW
182 | q1ev6dB9EOgPwde01K04+UdmZWaWnWJ7l+KNjRDYqoCQYhNYx8RbkVgAUtMslIqUZnHoWMz9b3lWC5Tu
183 | mqP3NT1qkKpE9BqDEecuX7Z5PvLDD2U99zxvukmS8XgK76fSOqTd3FKCbr1VPDl/VJEwPFxdz48bOza8
184 | RYsW/aF7N2jQv+PAiOFfLV+eRlWuC1yyRL5i4s2QUOIbIKhYD1aDjcjp4OTJMvPOO6+S1536uQGG9zU9
185 | aoYJAJphYocPlwAOTZv52wfyqcyhMFPpzXg+lcLlytzFa9fKRQ4yeL+8R48ec6FpyOen84AxMKAJu+BG
186 | msu/cPasbKWVVmIbIKXEvwdrHbASj6nml/OM0burfNSA63nfyDIapMF2+PBdGvNk4PVMrlmQz0b37rff
187 | Lskcrmpov12///7MyBEj/Bo1ajQQmpo+Nf//JB/HgRGPzZ83z0JlrizhNPVV2zaygmywDmIqnzUOBqhR
188 | uisaG44GOOrf8L4GqHo/BNKRXGN5Lgmo1zOUuDZr2nFC/ijkjz6CdEi3OUlJtRzkSzt06KCpswtoDX7K
189 | PtcbNEsvL1u2LEV/m8ylyn7GIt+wmJI3YBjhaIBKSA3Q1KlZR+VjeF9lox4P5xrDM4k4JZWrks9uebPk
190 | 4nkrsgmGvDvHzHPUlZqqqvp5s2eX9u7deym0+oJ7wS9733FQridrcdMu1Uqx+rJtW/lSybOgDfytO6K7
191 | 4GiAykcNMOTj6H3N8VF8F887GrBKPhPP50A+l4D1a9NGDnfsKOdoP+o5qn6+aFGp86BBm6DzLOgIWoF/
192 | 1f4vjD+xdVNWr16dXlNTc6WE3L+Zc8JnLKja/w4SGhM2A8D1DFD5aF+j3rdpvzHnhmbNJall8wbdQ1wl
193 | k3bbbbKPgA13dpYqUnLN+fP1Xy5cWO7s7LwVHi8C/WFXDzDa//+69x3Gn6l8Uz//7DNzUVFR1VkKUMC8
194 | ebKkZQtZjiHrIKG/GGwG+vPHDuCKEXuB9vGHgTZj/iAEI6L5PgEkQTwd4ql43Ruvb+OAlLdggdRYrVJs
195 | Nl9ZTLtgJz8cPAm0bVDpXPuD1n84bnx30qQ36EFyacaKr1y+XH+KFjp2zRrZ5OQkX7a6VTZAaCtG7AR7
196 | IKgHkIMY4Qn8QAAIA1E8p8UpGo/vp0BtQpaxb42Uc3SxdTU14r9nT9WsDz44Sa+jzdpLQMnfA7Ro/VR1
197 | f8P4y9ujR/fhMO3FbmRnmM01tRcu1lXgsRxvHzm6YL6sQLvLILcabMe7+7l6Ai/gzufdGLoR4qsJUt9X
198 | X5NCCmFVWprUnjlTnxYcXPvlvHkV48aMSXy4c+cFrDcEPAH+Dn43eWPc2K1bt9Zjx4yZRICnuri45Hp7
199 | ep68iF7Pc2CvLCyU43Si5h9/kOiVKyVw8RIJ4MAT+qmLxKz4Vszbd0ixf4CcT0+Xi/RblRUVdQG7d19c
200 | Pm/u6SmTJ+cPcHIiJzQfwTraqD0M7gTNdF3whw3VYOOePXu2o7BMQVq+pNwTn7m4FHq6uVWbIEf9kAsX
201 | Lth+LzVAl0vzdkJPUxJEA7hu8eKqedOnnxszenQ8xNe2bt16DPMOBt2AnrT0JxMN2N+k+V8bmgW0kOgP
202 | S22d+vcfzAFj4ehRo/ZMnDAhRhsuoD/CigE+11LhK8aPG5dCN+k92Nn5+44dO87g/RfAAKDE2+t8QCWj
203 | 8/+/ss1vGeodbajUkDuAlvjOQMn0AVr2NX8PBfqfFb3qZ72v3+tz+ry+p+/rPDrff8Xr/27oguoxTXO3
204 | ACWj3aJWTZWDeraD/doO6H39Xp/T5/U9ff9/TvznQ7dcSWilVE/qeVXJqSQM6Ge9r9/rc/r875TKDTf8
205 | E6r1PJkxIJTAAAAAAElFTkSuQmCC
206 |
207 |
208 |
209 |
210 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
211 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
212 | AAAAAAAAc0sE/5tmBv+7egf/x4II/8eCCP+9ewf/nmcG/3ZNBP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
213 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
214 | AAB1TQX/w4EJ/82HCf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8yHCf/Gggn/e1EF/wAA
215 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
216 | AABlQwX/yYYK/8qGCv/Jhgr/yYYK/8mGCv/JhQn/yIMF/8iDBf/IgwX/yIMF/8mFCP/Jhgr/yYYK/8mG
217 | Cv/Jhgr/y4gK/25JBf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
218 | AAAAAAAApW8J/8yJC//KiAv/yogL/8mHCf/Jhwn/1J04/+G8d//r0aH/79q0/+/atP/r0qP/4r56/9Wf
219 | PP/Jhwv/yYcJ/8qIC//Jhwj/y4gK/6xzCf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
220 | AAAAAAAAAAAAALl9C//LiQz/y4kM/8uJC//Lig//4bt0//fu3f////////////79+//79+7/+/bu//78
221 | +v////////////jw4f/ivnr/16RD/+XFh//csFz/yokL/7+CDP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
222 | AAAAAAAAAAAAAAAAAAC5fwv/y4sN/8uLDf/KiQr/16VE//jv3v//////+fHj/+bHif/Woz7/zpEa/8uL
223 | Dv/Liw7/zpEZ/9WhO//lxIP/+O/e///////////////////////pzpr/yokJ/8CDDP8AAAAAAAAAAAAA
224 | AAAAAAAAAAAAAAAAAAAAAAAAo3EL/8yMDv/MjA7/y4oK/+G7cP/+/fv//Pjw/+G7cP/MjQ7/y4sL/8yM
225 | Dv/MjA7/zIwO/8yMDv/MjA7/zIwO/8uLC//KiQn/9erT//////////////////38+f/Okhr/zIwO/613
226 | C/8AAAAAAAAAAAAAAAAAAAAAAAAAAGFDB//OkA//zI4P/8uMC//hvHD///////bs1//Smij/zI0M/8yO
227 | D//Mjg//zI4P/8yOD//Mjg//zI4P/8yOD//Mjg//zI4P/8uLCP/y4cD//////////////////fr2/86S
228 | F//Mjg//zo8P/29NCP8AAAAAAAAAAAAAAAAAAAAAyo0P/82QEP/Mjw//2KhF//79+//27Nf/z5Qa/82Q
229 | D//NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zI4M/+jLkP//////////////
230 | ///+/v3/269S/8yPDv/NkBD/z5EQ/wAAAAAAAAAAAAAAAHBPCf/OkhH/zpER/86SE//4793//Pjw/9Od
231 | Kf/OkRD/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REP/VojX//fv2//br
232 | 1P/ft2P/2q1M//r16f/69Of/0JUY/86REf/OkRH/flkK/wAAAAAAAAAAwosR/82SD//Tnin/6c6T////
233 | ///ivnD/zZIP/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS//br
234 | 0//9+/f/1qQ3/86TEf/NkhD/3rhi///////mx4X/zZIP/86TEv/KkRH/AAAAAAAAAADTmBL/3LJV//37
235 | +P///////////+G8a//Okw//z5US/8+VE//PlRP/z5UT/8+VE//PlRP/z5UT/8+VE//PlBL/zpMQ/9GY
236 | G//ozI///////+TEfP/Okw//z5UT/8+VE//OkxD/9+3X//r05//PlhT/z5UT/9KXE/8AAAAAbE4K/8+U
237 | Dv/269L/////////////////+/br/+PCdv/fuF//2q1H/9akM//TnSP/0JgX/8+VEP/Okw3/zpMM/9en
238 | Of/37dj//v37//7+/f/z5cX/z5UR/8+WFP/PlhT/z5YU/8+VEv/kxXz//////9uuSv/PlhT/z5YU/3pZ
239 | C/+ZcA//z5cQ//jw3f////////////////////////////////////////////7+/f/8+fL/+fLh//Xp
240 | zf/w3rT/+fPk//////////////////Hguf/Plg//0JgU/9CYFP/QmBT/0JgU/9enN///////6MyL/8+X
241 | Ev/QmBT/oXYP/8CNE//QmBP/5cZ8/////////////////+rSl//Zqz3/3bZW/+LAbv/oy4f/7Nag//De
242 | s//058n/+PDd//z47////v7/////////////////+fHg/9CYEf/RmRX/0ZkV/9GZFf/RmRX/0pwb//36
243 | 9P/v3bH/0JYP/9GZFf+/jBP/0JoW/9GbFv/PmA//8uO///389//hvWb/0JoU/9GbFv/Rmxb/0ZsW/9Ca
244 | FP/QmRL/0JgQ/8+YD//QmRL/0ZoU//Pkwf/////////////////79+z/2Kk4/9CaFP/Rmxb/0ZsW/9Gb
245 | Fv/QmhP/+vPk//PlxP/PmA//0ZsW/8mWFf/QnBf/0p0X/9GaEf/x4Lb//Pjv/9KeGP/SnRf/0p0X/9Kd
246 | F//SnRf/0p0X/9KdF//SnRf/0p0X/9KdF//SnRf/1aQm//Ddr//48Nv/8N6x//379v/8+fL/37lY/9Gb
247 | E//SnRf/0p0X/9GcFP/68+T/9ObE/9CaEP/SnRf/ypgW/8CQFv/Snhj/0ZwT/+7ap//+/fv/1aMk/9Ke
248 | GP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0ZwT/9GcE//RmxH/27JF//r1
249 | 6P/+/vz/5sl+/9GcFP/Snhj/06Ad//368//w37P/0ZsS/9KeGP+/kBb/mHMS/9OgGf/SoBj/58p+////
250 | ///cskb/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9Og
251 | Gf/ToBj/16gs//ft1P//////7tml/9WkIv/fulf//////+rRj//Snxf/06AZ/6F6E/9sUg3/1KIa/9Sh
252 | Gv/cs0T//////+nQjP/ToBf/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9Sh
253 | Gv/UoRr/1KEa/9ShGv/UoRr/1KMd//Dgs////////fv2////////////582D/9OgGP/UoRr/e14P/wAA
254 | AADZpxz/1KMb/9OjGv/58uD/+fLg/9SjGv/Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/1KMb/9Sj
255 | G//Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/06AU//XqzP/////////////////8+fD/1aYh/9im
256 | HP8AAAAAAAAAAMWZGf/VpRz/1KQa/+jNgf//////5cdx/9SkGv/VpRz/1aUc/9WlHP/VpRz/1aUc/9Wl
257 | HP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/UoxX/9erL//////////////////7+
258 | /f/YrCz/zqAb/wAAAAAAAAAAblYP/9anHf/Vph3/1qgh//r05P/7+O3/2a0v/9WmHf/Vph3/1aYd/9Wm
259 | Hf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WlG//ozX//////////
260 | ////////9OfB/9WlGf98YRD/AAAAAAAAAAAAAAAAz6Md/9aoHv/VqB3/4L5X//7+/f/37tL/16oj/9ao
261 | Hv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qkf//Xp
262 | xv///v7/8+a9/+zWlP/XqyX/1agd/wAAAAAAAAAAAAAAAAAAAABdSQ3/2qwf/9eqH//WqRv/6dCD////
263 | ///37dH/2rAv/9apHf/Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//1qod/9mu
264 | Kv/16sj//////+vVkP/Vpxb/1qkc/9msH/9rVA//AAAAAAAAAAAAAAAAAAAAAAAAAACkghj/16sg/9er
265 | IP/Wqhz/6dGF//7+/f/7+Oz/5clu/9eqHf/Wqx7/16sg/9erIP/XqyD/16sg/9erIP/XqyD/1qse/9aq
266 | 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
301 |
302 |
303 |
--------------------------------------------------------------------------------
/frmMain.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 17, 17
122 |
123 |
124 | 116, 17
125 |
126 |
127 |
128 |
129 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
131 | AAAAAAAAc0sE/5tmBv+7egf/x4II/8eCCP+9ewf/nmcG/3ZNBP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
133 | AAB1TQX/w4EJ/82HCf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8yHCf/Gggn/e1EF/wAA
134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
135 | AABlQwX/yYYK/8qGCv/Jhgr/yYYK/8mGCv/JhQn/yIMF/8iDBf/IgwX/yIMF/8mFCP/Jhgr/yYYK/8mG
136 | Cv/Jhgr/y4gK/25JBf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
137 | AAAAAAAApW8J/8yJC//KiAv/yogL/8mHCf/Jhwn/1J04/+G8d//r0aH/79q0/+/atP/r0qP/4r56/9Wf
138 | PP/Jhwv/yYcJ/8qIC//Jhwj/y4gK/6xzCf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
139 | AAAAAAAAAAAAALl9C//LiQz/y4kM/8uJC//Lig//4bt0//fu3f////////////79+//79+7/+/bu//78
140 | +v////////////jw4f/ivnr/16RD/+XFh//csFz/yokL/7+CDP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
141 | AAAAAAAAAAAAAAAAAAC5fwv/y4sN/8uLDf/KiQr/16VE//jv3v//////+fHj/+bHif/Woz7/zpEa/8uL
142 | Dv/Liw7/zpEZ/9WhO//lxIP/+O/e///////////////////////pzpr/yokJ/8CDDP8AAAAAAAAAAAAA
143 | AAAAAAAAAAAAAAAAAAAAAAAAo3EL/8yMDv/MjA7/y4oK/+G7cP/+/fv//Pjw/+G7cP/MjQ7/y4sL/8yM
144 | Dv/MjA7/zIwO/8yMDv/MjA7/zIwO/8uLC//KiQn/9erT//////////////////38+f/Okhr/zIwO/613
145 | C/8AAAAAAAAAAAAAAAAAAAAAAAAAAGFDB//OkA//zI4P/8uMC//hvHD///////bs1//Smij/zI0M/8yO
146 | D//Mjg//zI4P/8yOD//Mjg//zI4P/8yOD//Mjg//zI4P/8uLCP/y4cD//////////////////fr2/86S
147 | F//Mjg//zo8P/29NCP8AAAAAAAAAAAAAAAAAAAAAyo0P/82QEP/Mjw//2KhF//79+//27Nf/z5Qa/82Q
148 | D//NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zI4M/+jLkP//////////////
149 | ///+/v3/269S/8yPDv/NkBD/z5EQ/wAAAAAAAAAAAAAAAHBPCf/OkhH/zpER/86SE//4793//Pjw/9Od
150 | Kf/OkRD/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REP/VojX//fv2//br
151 | 1P/ft2P/2q1M//r16f/69Of/0JUY/86REf/OkRH/flkK/wAAAAAAAAAAwosR/82SD//Tnin/6c6T////
152 | ///ivnD/zZIP/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS//br
153 | 0//9+/f/1qQ3/86TEf/NkhD/3rhi///////mx4X/zZIP/86TEv/KkRH/AAAAAAAAAADTmBL/3LJV//37
154 | +P///////////+G8a//Okw//z5US/8+VE//PlRP/z5UT/8+VE//PlRP/z5UT/8+VE//PlBL/zpMQ/9GY
155 | G//ozI///////+TEfP/Okw//z5UT/8+VE//OkxD/9+3X//r05//PlhT/z5UT/9KXE/8AAAAAbE4K/8+U
156 | Dv/269L/////////////////+/br/+PCdv/fuF//2q1H/9akM//TnSP/0JgX/8+VEP/Okw3/zpMM/9en
157 | Of/37dj//v37//7+/f/z5cX/z5UR/8+WFP/PlhT/z5YU/8+VEv/kxXz//////9uuSv/PlhT/z5YU/3pZ
158 | C/+ZcA//z5cQ//jw3f////////////////////////////////////////////7+/f/8+fL/+fLh//Xp
159 | zf/w3rT/+fPk//////////////////Hguf/Plg//0JgU/9CYFP/QmBT/0JgU/9enN///////6MyL/8+X
160 | Ev/QmBT/oXYP/8CNE//QmBP/5cZ8/////////////////+rSl//Zqz3/3bZW/+LAbv/oy4f/7Nag//De
161 | s//058n/+PDd//z47////v7/////////////////+fHg/9CYEf/RmRX/0ZkV/9GZFf/RmRX/0pwb//36
162 | 9P/v3bH/0JYP/9GZFf+/jBP/0JoW/9GbFv/PmA//8uO///389//hvWb/0JoU/9GbFv/Rmxb/0ZsW/9Ca
163 | FP/QmRL/0JgQ/8+YD//QmRL/0ZoU//Pkwf/////////////////79+z/2Kk4/9CaFP/Rmxb/0ZsW/9Gb
164 | Fv/QmhP/+vPk//PlxP/PmA//0ZsW/8mWFf/QnBf/0p0X/9GaEf/x4Lb//Pjv/9KeGP/SnRf/0p0X/9Kd
165 | F//SnRf/0p0X/9KdF//SnRf/0p0X/9KdF//SnRf/1aQm//Ddr//48Nv/8N6x//379v/8+fL/37lY/9Gb
166 | E//SnRf/0p0X/9GcFP/68+T/9ObE/9CaEP/SnRf/ypgW/8CQFv/Snhj/0ZwT/+7ap//+/fv/1aMk/9Ke
167 | GP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0ZwT/9GcE//RmxH/27JF//r1
168 | 6P/+/vz/5sl+/9GcFP/Snhj/06Ad//368//w37P/0ZsS/9KeGP+/kBb/mHMS/9OgGf/SoBj/58p+////
169 | ///cskb/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9Og
170 | Gf/ToBj/16gs//ft1P//////7tml/9WkIv/fulf//////+rRj//Snxf/06AZ/6F6E/9sUg3/1KIa/9Sh
171 | Gv/cs0T//////+nQjP/ToBf/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9Sh
172 | Gv/UoRr/1KEa/9ShGv/UoRr/1KMd//Dgs////////fv2////////////582D/9OgGP/UoRr/e14P/wAA
173 | AADZpxz/1KMb/9OjGv/58uD/+fLg/9SjGv/Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/1KMb/9Sj
174 | G//Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/06AU//XqzP/////////////////8+fD/1aYh/9im
175 | HP8AAAAAAAAAAMWZGf/VpRz/1KQa/+jNgf//////5cdx/9SkGv/VpRz/1aUc/9WlHP/VpRz/1aUc/9Wl
176 | HP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/UoxX/9erL//////////////////7+
177 | /f/YrCz/zqAb/wAAAAAAAAAAblYP/9anHf/Vph3/1qgh//r05P/7+O3/2a0v/9WmHf/Vph3/1aYd/9Wm
178 | Hf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WlG//ozX//////////
179 | ////////9OfB/9WlGf98YRD/AAAAAAAAAAAAAAAAz6Md/9aoHv/VqB3/4L5X//7+/f/37tL/16oj/9ao
180 | Hv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qkf//Xp
181 | xv///v7/8+a9/+zWlP/XqyX/1agd/wAAAAAAAAAAAAAAAAAAAABdSQ3/2qwf/9eqH//WqRv/6dCD////
182 | ///37dH/2rAv/9apHf/Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//1qod/9mu
183 | Kv/16sj//////+vVkP/Vpxb/1qkc/9msH/9rVA//AAAAAAAAAAAAAAAAAAAAAAAAAACkghj/16sg/9er
184 | IP/Wqhz/6dGF//7+/f/7+Oz/5clu/9eqHf/Wqx7/16sg/9erIP/XqyD/16sg/9erIP/XqyD/1qse/9aq
185 | HP/kxmX/+/bo///////r1pH/1qoc/9erIP/XqyD/r4sZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
186 | AAC+mBz/2K0h/9itIf/XrB3/4sRd//v36P//////+fLc/+rThv/eukP/2a8m/9esHv/XrB7/2a8l/965
187 | QP/p0YH/+PDX///////8+Oz/5Mdn/9esHf/YrSH/2K0h/8WeHv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
188 | AAAAAAAAAAAAAAAAAAC+mh3/2a8i/9iuIv/YriH/2bEo/+vVjP/79+j////////////9+/X/+/bn//r2
189 | 5v/9+/T////////////8+Oz/7NiT/9qyK//YriD/2K4i/9iuIv/Fnx7/AAAAAAAAAAAAAAAAAAAAAAAA
190 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnhxr/3LMj/9mwI//ZsCP/2K8g/9mxI//hwlX/7NiR//Lk
191 | tf/168b/9evG//Lltv/t2ZT/4sNZ/9mxJf/Yrx//2bAj/9mwI//bsiP/ro0c/wAAAAAAAAAAAAAAAAAA
192 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdTA//1K0i/9uzJP/asiT/2rIk/9qy
193 | I//ZsSH/2LAe/9iwHf/YsB3/2LAe/9mxIf/asiP/2rIk/9qyJP/bsyT/17Aj/2dUEP8AAAAAAAAAAAAA
194 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcV0S/8qn
195 | If/fuCX/27Qk/9qzJP/asyT/2rMk/9qzJP/asyT/2rMk/9q0JP/fuCX/z6oi/3diE/8AAAAAAAAAAAAA
196 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
197 | AAAAAAAAAAAAAAAAAABwXBP/n4Mb/8imIv/ZtCX/2bQl/8qnIv+ihRv/c18T/wAAAAAAAAAAAAAAAAAA
198 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wD///gAH//gAAf/wAAD/4AAAf8AAAD+AA
199 | AAfAAAADwAAAA4AAAAGAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAA
200 | AAGAAAABwAAAA8AAAAPgAAAH8AAAD/gAAB/8AAA//gAAf/+AAf//8A//KAAAABAAAAAgAAAAAQAgAAAA
201 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1TQVAyIQJgKhuB//FgQj/xYEI/6lv
202 | B//JhAmAe1EFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcaQi/yYcK/8mGCf/RmTD/2qxX/9qs
203 | WP/SmjL/yYYK/8mHCf+hbAi/AAAAAAAAAAAAAAAAAAAAAAAAAAC/ggu/yokL/9mpT//05sz/7tqx/+TE
204 | hP/kw4P/7tiv//Tnzv/u2bL/48GA/8OEC78AAAAAAAAAAAAAAACbbAu/y4wN/+PAev/w3rr/0Zgm/8uM
205 | Df/MjQ7/zI0O/8uMDf/ft2n///////79+//NjxP/o3ELvwAAAABwTwlAzJAQ/9quUf/w37r/zpES/82Q
206 | EP/NkBD/zZAQ/82QEP/NkBD/4b1x//Tozf/058z/3LFX/86QEP9+WQpAypERgN63Yf/58uT/16c+/86U
207 | Ev/OlBL/zpQS/86UEv/OkxH/1aIz//Xq0f/Qlxr/0pwl//Xp0P/OlBL/zpQSgKh6Df/79uv///////ft
208 | 1//t2Kn/6c+U/+XGfv/gu2b/8eG9//7+/f/gvGf/z5cU/8+WE//u2qz/2Kk+/65/EP/MlhT/6dCS//ft
209 | 1v/ZrD//2Ks8/921U//gvWb/5cZ8//z47///////58qF/9CZFf/RmhX/5siB/+C8ZP/KlRT/zZkX/+C8
210 | YP/ozYn/0p0X/9KdF//SnRf/0p0X/9KdF//arkD/4sFs//Pmxf/lxnn/0Z0W/+bKgv/hvmb/y5gW/6qB
211 | FP/arz3/8OC0/9OgGP/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/Uoh7/7tuo/+/dr//37dX/3bdQ/7CG
212 | Ff/PoBqA1KMa//bs0P/YrDD/1KQb/9SkG//UpBv/1KQb/9SkG//UpBv/1KQb/9SiGP/69OX//////+nS
213 | jv/ToxuAblYPQNSmHf/hwF7/8uS6/9WnHv/Vpx3/1acd/9WnHf/Vpx3/1acd/9WnHf/Vpx3/9uzQ//fu
214 | 0//dt0f/fGEQQAAAAACefRa/1qoe/+nSiP/y5Lr/2rEx/9aqH//Xqh//16of/9aqH//ZsS//8uO2/+rV
215 | j//WqRz/poMXvwAAAAAAAAAAAAAAAMafHr/YrSD/48Zj//fv0//x4rH/6tOI/+nTh//x4q//9+/V/+TH
216 | Z//XrSD/y6MfvwAAAAAAAAAAAAAAAAAAAAAAAAAAoIIZv9iwI//ZsSL/4L9K/+XLbf/lzG3/4L9M/9mx
217 | I//ZsCP/pYYavwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxXRJA1K8jgLGRHf/VsCP/1bAj/7KS
218 | Hf/XsSOAd2ITQAAAAAAAAAAAAAAAAAAAAADwD6xB4AesQcADrEGAAaxBAACsQQAArEEAAKxBAACsQQAA
219 | rEEAAKxBAACsQQAArEGAAaxBwAOsQeAHrEHwD6xB
220 |
221 |
222 |
223 | 206, 17
224 |
225 |
226 | 323, 17
227 |
228 |
229 |
230 | AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAAAA
231 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
232 | AAAAAAAAc0sE/5tmBv+7egf/x4II/8eCCP+9ewf/nmcG/3ZNBP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
233 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
234 | AAB1TQX/w4EJ/82HCf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8mECf/JhAn/yYQJ/8yHCf/Gggn/e1EF/wAA
235 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
236 | AABlQwX/yYYK/8qGCv/Jhgr/yYYK/8mGCv/JhQn/yIMF/8iDBf/IgwX/yIMF/8mFCP/Jhgr/yYYK/8mG
237 | Cv/Jhgr/y4gK/25JBf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
238 | AAAAAAAApW8J/8yJC//KiAv/yogL/8mHCf/Jhwn/1J04/+G8d//r0aH/79q0/+/atP/r0qP/4r56/9Wf
239 | PP/Jhwv/yYcJ/8qIC//Jhwj/y4gK/6xzCf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
240 | AAAAAAAAAAAAALl9C//LiQz/y4kM/8uJC//Lig//4bt0//fu3f////////////79+//79+7/+/bu//78
241 | +v////////////jw4f/ivnr/16RD/+XFh//csFz/yokL/7+CDP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
242 | AAAAAAAAAAAAAAAAAAC5fwv/y4sN/8uLDf/KiQr/16VE//jv3v//////+fHj/+bHif/Woz7/zpEa/8uL
243 | Dv/Liw7/zpEZ/9WhO//lxIP/+O/e///////////////////////pzpr/yokJ/8CDDP8AAAAAAAAAAAAA
244 | AAAAAAAAAAAAAAAAAAAAAAAAo3EL/8yMDv/MjA7/y4oK/+G7cP/+/fv//Pjw/+G7cP/MjQ7/y4sL/8yM
245 | Dv/MjA7/zIwO/8yMDv/MjA7/zIwO/8uLC//KiQn/9erT//////////////////38+f/Okhr/zIwO/613
246 | C/8AAAAAAAAAAAAAAAAAAAAAAAAAAGFDB//OkA//zI4P/8uMC//hvHD///////bs1//Smij/zI0M/8yO
247 | D//Mjg//zI4P/8yOD//Mjg//zI4P/8yOD//Mjg//zI4P/8uLCP/y4cD//////////////////fr2/86S
248 | F//Mjg//zo8P/29NCP8AAAAAAAAAAAAAAAAAAAAAyo0P/82QEP/Mjw//2KhF//79+//27Nf/z5Qa/82Q
249 | D//NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zZAQ/82QEP/NkBD/zI4M/+jLkP//////////////
250 | ///+/v3/269S/8yPDv/NkBD/z5EQ/wAAAAAAAAAAAAAAAHBPCf/OkhH/zpER/86SE//4793//Pjw/9Od
251 | Kf/OkRD/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REf/OkRH/zpER/86REP/VojX//fv2//br
252 | 1P/ft2P/2q1M//r16f/69Of/0JUY/86REf/OkRH/flkK/wAAAAAAAAAAwosR/82SD//Tnin/6c6T////
253 | ///ivnD/zZIP/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS/86TEv/OkxL/zpMS//br
254 | 0//9+/f/1qQ3/86TEf/NkhD/3rhi///////mx4X/zZIP/86TEv/KkRH/AAAAAAAAAADTmBL/3LJV//37
255 | +P///////////+G8a//Okw//z5US/8+VE//PlRP/z5UT/8+VE//PlRP/z5UT/8+VE//PlBL/zpMQ/9GY
256 | G//ozI///////+TEfP/Okw//z5UT/8+VE//OkxD/9+3X//r05//PlhT/z5UT/9KXE/8AAAAAbE4K/8+U
257 | Dv/269L/////////////////+/br/+PCdv/fuF//2q1H/9akM//TnSP/0JgX/8+VEP/Okw3/zpMM/9en
258 | Of/37dj//v37//7+/f/z5cX/z5UR/8+WFP/PlhT/z5YU/8+VEv/kxXz//////9uuSv/PlhT/z5YU/3pZ
259 | C/+ZcA//z5cQ//jw3f////////////////////////////////////////////7+/f/8+fL/+fLh//Xp
260 | zf/w3rT/+fPk//////////////////Hguf/Plg//0JgU/9CYFP/QmBT/0JgU/9enN///////6MyL/8+X
261 | Ev/QmBT/oXYP/8CNE//QmBP/5cZ8/////////////////+rSl//Zqz3/3bZW/+LAbv/oy4f/7Nag//De
262 | s//058n/+PDd//z47////v7/////////////////+fHg/9CYEf/RmRX/0ZkV/9GZFf/RmRX/0pwb//36
263 | 9P/v3bH/0JYP/9GZFf+/jBP/0JoW/9GbFv/PmA//8uO///389//hvWb/0JoU/9GbFv/Rmxb/0ZsW/9Ca
264 | FP/QmRL/0JgQ/8+YD//QmRL/0ZoU//Pkwf/////////////////79+z/2Kk4/9CaFP/Rmxb/0ZsW/9Gb
265 | Fv/QmhP/+vPk//PlxP/PmA//0ZsW/8mWFf/QnBf/0p0X/9GaEf/x4Lb//Pjv/9KeGP/SnRf/0p0X/9Kd
266 | F//SnRf/0p0X/9KdF//SnRf/0p0X/9KdF//SnRf/1aQm//Ddr//48Nv/8N6x//379v/8+fL/37lY/9Gb
267 | E//SnRf/0p0X/9GcFP/68+T/9ObE/9CaEP/SnRf/ypgW/8CQFv/Snhj/0ZwT/+7ap//+/fv/1aMk/9Ke
268 | GP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0p4Y/9KeGP/Snhj/0ZwT/9GcE//RmxH/27JF//r1
269 | 6P/+/vz/5sl+/9GcFP/Snhj/06Ad//368//w37P/0ZsS/9KeGP+/kBb/mHMS/9OgGf/SoBj/58p+////
270 | ///cskb/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9OgGf/ToBn/06AZ/9Og
271 | Gf/ToBj/16gs//ft1P//////7tml/9WkIv/fulf//////+rRj//Snxf/06AZ/6F6E/9sUg3/1KIa/9Sh
272 | Gv/cs0T//////+nQjP/ToBf/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9ShGv/UoRr/1KEa/9Sh
273 | Gv/UoRr/1KEa/9ShGv/UoRr/1KMd//Dgs////////fv2////////////582D/9OgGP/UoRr/e14P/wAA
274 | AADZpxz/1KMb/9OjGv/58uD/+fLg/9SjGv/Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/1KMb/9Sj
275 | G//Uoxv/1KMb/9SjG//Uoxv/1KMb/9SjG//Uoxv/06AU//XqzP/////////////////8+fD/1aYh/9im
276 | HP8AAAAAAAAAAMWZGf/VpRz/1KQa/+jNgf//////5cdx/9SkGv/VpRz/1aUc/9WlHP/VpRz/1aUc/9Wl
277 | HP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/VpRz/1aUc/9WlHP/UoxX/9erL//////////////////7+
278 | /f/YrCz/zqAb/wAAAAAAAAAAblYP/9anHf/Vph3/1qgh//r05P/7+O3/2a0v/9WmHf/Vph3/1aYd/9Wm
279 | Hf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WmHf/Vph3/1aYd/9WlG//ozX//////////
280 | ////////9OfB/9WlGf98YRD/AAAAAAAAAAAAAAAAz6Md/9aoHv/VqB3/4L5X//7+/f/37tL/16oj/9ao
281 | Hv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qge/9aoHv/WqB7/1qkf//Xp
282 | xv///v7/8+a9/+zWlP/XqyX/1agd/wAAAAAAAAAAAAAAAAAAAABdSQ3/2qwf/9eqH//WqRv/6dCD////
283 | ///37dH/2rAv/9apHf/Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//16of/9eqH//Xqh//1qod/9mu
284 | Kv/16sj//////+vVkP/Vpxb/1qkc/9msH/9rVA//AAAAAAAAAAAAAAAAAAAAAAAAAACkghj/16sg/9er
285 | IP/Wqhz/6dGF//7+/f/7+Oz/5clu/9eqHf/Wqx7/16sg/9erIP/XqyD/16sg/9erIP/XqyD/1qse/9aq
286 | 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
321 |
322 |
323 |
--------------------------------------------------------------------------------
/frmInstall.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SyncThingTray
2 | {
3 | partial class frmInstall
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmInstall));
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.btnCurrent = new System.Windows.Forms.Button();
35 | this.txtCurrent = new System.Windows.Forms.TextBox();
36 | this.btnNew = new System.Windows.Forms.Button();
37 | this.txtNew = new System.Windows.Forms.TextBox();
38 | this.label2 = new System.Windows.Forms.Label();
39 | this.label3 = new System.Windows.Forms.Label();
40 | this.btnExecutable = new System.Windows.Forms.Button();
41 | this.txtExecutable = new System.Windows.Forms.TextBox();
42 | this.btnInstall = new System.Windows.Forms.Button();
43 | this.dlgSelectFolder = new System.Windows.Forms.FolderBrowserDialog();
44 | this.dlgOpenFile = new System.Windows.Forms.OpenFileDialog();
45 | this.label4 = new System.Windows.Forms.Label();
46 | this.imlHelp = new System.Windows.Forms.ImageList(this.components);
47 | this.label6 = new System.Windows.Forms.Label();
48 | this.label7 = new System.Windows.Forms.Label();
49 | this.btnUninstall = new System.Windows.Forms.Button();
50 | this.chkAdvanced = new System.Windows.Forms.CheckBox();
51 | this.label5 = new System.Windows.Forms.Label();
52 | this.cmbStartup = new System.Windows.Forms.ComboBox();
53 | this.label8 = new System.Windows.Forms.Label();
54 | this.cmbAccount = new System.Windows.Forms.ComboBox();
55 | this.label9 = new System.Windows.Forms.Label();
56 | this.label10 = new System.Windows.Forms.Label();
57 | this.label11 = new System.Windows.Forms.Label();
58 | this.cmbPriority = new System.Windows.Forms.ComboBox();
59 | this.txtLogin = new System.Windows.Forms.TextBox();
60 | this.txtPassword = new System.Windows.Forms.TextBox();
61 | this.btnSave = new System.Windows.Forms.Button();
62 | this.tipHelp = new System.Windows.Forms.ToolTip(this.components);
63 | this.chkAutoRestart = new System.Windows.Forms.CheckBox();
64 | this.label12 = new System.Windows.Forms.Label();
65 | this.numMaxAutoDuration = new System.Windows.Forms.NumericUpDown();
66 | this.cmbMaxAutoDuration = new System.Windows.Forms.ComboBox();
67 | this.label15 = new System.Windows.Forms.Label();
68 | this.numMaxAutoCount = new System.Windows.Forms.NumericUpDown();
69 | ((System.ComponentModel.ISupportInitialize)(this.numMaxAutoDuration)).BeginInit();
70 | ((System.ComponentModel.ISupportInitialize)(this.numMaxAutoCount)).BeginInit();
71 | this.SuspendLayout();
72 | //
73 | // label1
74 | //
75 | this.label1.AutoSize = true;
76 | this.label1.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
77 | this.label1.Location = new System.Drawing.Point(12, 16);
78 | this.label1.Name = "label1";
79 | this.label1.Size = new System.Drawing.Size(133, 14);
80 | this.label1.TabIndex = 0;
81 | this.label1.Text = "Existing Configuration:";
82 | //
83 | // btnCurrent
84 | //
85 | this.btnCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
86 | this.btnCurrent.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
87 | this.btnCurrent.Location = new System.Drawing.Point(599, 12);
88 | this.btnCurrent.Name = "btnCurrent";
89 | this.btnCurrent.Size = new System.Drawing.Size(24, 23);
90 | this.btnCurrent.TabIndex = 1;
91 | this.btnCurrent.Text = "...";
92 | this.btnCurrent.UseVisualStyleBackColor = true;
93 | this.btnCurrent.Click += new System.EventHandler(this.btnCurrent_Click);
94 | //
95 | // txtCurrent
96 | //
97 | this.txtCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
98 | | System.Windows.Forms.AnchorStyles.Right)));
99 | this.txtCurrent.Location = new System.Drawing.Point(181, 12);
100 | this.txtCurrent.Name = "txtCurrent";
101 | this.txtCurrent.Size = new System.Drawing.Size(412, 23);
102 | this.txtCurrent.TabIndex = 0;
103 | this.txtCurrent.TextChanged += new System.EventHandler(this.txtCurrent_TextChanged);
104 | //
105 | // btnNew
106 | //
107 | this.btnNew.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
108 | this.btnNew.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
109 | this.btnNew.Location = new System.Drawing.Point(599, 41);
110 | this.btnNew.Name = "btnNew";
111 | this.btnNew.Size = new System.Drawing.Size(24, 23);
112 | this.btnNew.TabIndex = 3;
113 | this.btnNew.Text = "...";
114 | this.btnNew.UseVisualStyleBackColor = true;
115 | this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
116 | //
117 | // txtNew
118 | //
119 | this.txtNew.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
120 | | System.Windows.Forms.AnchorStyles.Right)));
121 | this.txtNew.Location = new System.Drawing.Point(181, 41);
122 | this.txtNew.Name = "txtNew";
123 | this.txtNew.Size = new System.Drawing.Size(412, 23);
124 | this.txtNew.TabIndex = 2;
125 | this.txtNew.TextChanged += new System.EventHandler(this.txtNew_TextChanged);
126 | //
127 | // label2
128 | //
129 | this.label2.AutoSize = true;
130 | this.label2.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
131 | this.label2.Location = new System.Drawing.Point(12, 45);
132 | this.label2.Name = "label2";
133 | this.label2.Size = new System.Drawing.Size(86, 14);
134 | this.label2.TabIndex = 0;
135 | this.label2.Text = "Configuration:";
136 | //
137 | // label3
138 | //
139 | this.label3.AutoSize = true;
140 | this.label3.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
141 | this.label3.Location = new System.Drawing.Point(12, 74);
142 | this.label3.Name = "label3";
143 | this.label3.Size = new System.Drawing.Size(125, 14);
144 | this.label3.TabIndex = 0;
145 | this.label3.Text = "Syncthing Executable:";
146 | //
147 | // btnExecutable
148 | //
149 | this.btnExecutable.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
150 | this.btnExecutable.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
151 | this.btnExecutable.Location = new System.Drawing.Point(599, 70);
152 | this.btnExecutable.Name = "btnExecutable";
153 | this.btnExecutable.Size = new System.Drawing.Size(24, 23);
154 | this.btnExecutable.TabIndex = 5;
155 | this.btnExecutable.Text = "...";
156 | this.btnExecutable.UseVisualStyleBackColor = true;
157 | this.btnExecutable.Click += new System.EventHandler(this.btnExecutable_Click);
158 | //
159 | // txtExecutable
160 | //
161 | this.txtExecutable.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
162 | | System.Windows.Forms.AnchorStyles.Right)));
163 | this.txtExecutable.Location = new System.Drawing.Point(181, 70);
164 | this.txtExecutable.Name = "txtExecutable";
165 | this.txtExecutable.Size = new System.Drawing.Size(412, 23);
166 | this.txtExecutable.TabIndex = 4;
167 | this.txtExecutable.TextChanged += new System.EventHandler(this.txtExecutable_TextChanged);
168 | //
169 | // btnInstall
170 | //
171 | this.btnInstall.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
172 | this.btnInstall.Enabled = false;
173 | this.btnInstall.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
174 | this.btnInstall.Location = new System.Drawing.Point(474, 99);
175 | this.btnInstall.Name = "btnInstall";
176 | this.btnInstall.Size = new System.Drawing.Size(149, 23);
177 | this.btnInstall.TabIndex = 8;
178 | this.btnInstall.Text = "Save and Install Service";
179 | this.btnInstall.UseVisualStyleBackColor = true;
180 | this.btnInstall.Click += new System.EventHandler(this.btnInstall_Click);
181 | //
182 | // dlgOpenFile
183 | //
184 | this.dlgOpenFile.DefaultExt = "exe";
185 | this.dlgOpenFile.FileName = "syncthing.exe";
186 | this.dlgOpenFile.Filter = "Executable|*.exe";
187 | this.dlgOpenFile.Title = "Select the syncthing executable";
188 | //
189 | // label4
190 | //
191 | this.label4.Image = ((System.Drawing.Image)(resources.GetObject("label4.Image")));
192 | this.label4.Location = new System.Drawing.Point(151, 12);
193 | this.label4.Name = "label4";
194 | this.label4.Size = new System.Drawing.Size(24, 23);
195 | this.label4.TabIndex = 9;
196 | this.tipHelp.SetToolTip(this.label4, "Path to directory where the current configuration used by syncthing is located. F" +
197 | "ill this information ONLY if you plan to move your configuration");
198 | //
199 | // imlHelp
200 | //
201 | this.imlHelp.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
202 | this.imlHelp.ImageSize = new System.Drawing.Size(23, 23);
203 | this.imlHelp.TransparentColor = System.Drawing.Color.Transparent;
204 | //
205 | // label6
206 | //
207 | this.label6.Image = ((System.Drawing.Image)(resources.GetObject("label6.Image")));
208 | this.label6.Location = new System.Drawing.Point(151, 70);
209 | this.label6.Name = "label6";
210 | this.label6.Size = new System.Drawing.Size(24, 23);
211 | this.label6.TabIndex = 9;
212 | this.tipHelp.SetToolTip(this.label6, "Path to the syncthing executable");
213 | //
214 | // label7
215 | //
216 | this.label7.Image = ((System.Drawing.Image)(resources.GetObject("label7.Image")));
217 | this.label7.Location = new System.Drawing.Point(151, 41);
218 | this.label7.Name = "label7";
219 | this.label7.Size = new System.Drawing.Size(24, 23);
220 | this.label7.TabIndex = 9;
221 | this.tipHelp.SetToolTip(this.label7, "Path to the directory where the syncthing configuration will be copied to or wher" +
222 | "e the syncthing configuration already exist");
223 | //
224 | // btnUninstall
225 | //
226 | this.btnUninstall.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
227 | this.btnUninstall.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
228 | this.btnUninstall.Location = new System.Drawing.Point(543, 159);
229 | this.btnUninstall.Name = "btnUninstall";
230 | this.btnUninstall.Size = new System.Drawing.Size(80, 23);
231 | this.btnUninstall.TabIndex = 8;
232 | this.btnUninstall.Text = "Uninstall";
233 | this.btnUninstall.UseVisualStyleBackColor = true;
234 | this.btnUninstall.Click += new System.EventHandler(this.btnUninstall_Click);
235 | //
236 | // chkAdvanced
237 | //
238 | this.chkAdvanced.Appearance = System.Windows.Forms.Appearance.Button;
239 | this.chkAdvanced.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold);
240 | this.chkAdvanced.Location = new System.Drawing.Point(354, 99);
241 | this.chkAdvanced.Name = "chkAdvanced";
242 | this.chkAdvanced.Size = new System.Drawing.Size(114, 23);
243 | this.chkAdvanced.TabIndex = 10;
244 | this.chkAdvanced.Text = "Advanced Options";
245 | this.chkAdvanced.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
246 | this.chkAdvanced.UseVisualStyleBackColor = true;
247 | this.chkAdvanced.CheckedChanged += new System.EventHandler(this.chkAdvanced_CheckedChanged);
248 | //
249 | // label5
250 | //
251 | this.label5.AutoSize = true;
252 | this.label5.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
253 | this.label5.Location = new System.Drawing.Point(12, 163);
254 | this.label5.Name = "label5";
255 | this.label5.Size = new System.Drawing.Size(93, 14);
256 | this.label5.TabIndex = 0;
257 | this.label5.Text = "Service Startup:";
258 | //
259 | // cmbStartup
260 | //
261 | this.cmbStartup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
262 | this.cmbStartup.FormattingEnabled = true;
263 | this.cmbStartup.Items.AddRange(new object[] {
264 | "Automatic (Delayed Start)",
265 | "Automatic",
266 | "Manual",
267 | "Disabled"});
268 | this.cmbStartup.Location = new System.Drawing.Point(128, 159);
269 | this.cmbStartup.Name = "cmbStartup";
270 | this.cmbStartup.Size = new System.Drawing.Size(190, 23);
271 | this.cmbStartup.TabIndex = 11;
272 | //
273 | // label8
274 | //
275 | this.label8.AutoSize = true;
276 | this.label8.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
277 | this.label8.Location = new System.Drawing.Point(12, 192);
278 | this.label8.Name = "label8";
279 | this.label8.Size = new System.Drawing.Size(98, 14);
280 | this.label8.TabIndex = 0;
281 | this.label8.Text = "Service Account:";
282 | //
283 | // cmbAccount
284 | //
285 | this.cmbAccount.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
286 | this.cmbAccount.FormattingEnabled = true;
287 | this.cmbAccount.Items.AddRange(new object[] {
288 | "Local System",
289 | "Local Service",
290 | "Network Service",
291 | "User"});
292 | this.cmbAccount.Location = new System.Drawing.Point(128, 188);
293 | this.cmbAccount.Name = "cmbAccount";
294 | this.cmbAccount.Size = new System.Drawing.Size(190, 23);
295 | this.cmbAccount.TabIndex = 11;
296 | this.cmbAccount.SelectedIndexChanged += new System.EventHandler(this.cmbAccount_SelectedIndexChanged);
297 | //
298 | // label9
299 | //
300 | this.label9.AutoSize = true;
301 | this.label9.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
302 | this.label9.Location = new System.Drawing.Point(324, 192);
303 | this.label9.Name = "label9";
304 | this.label9.Size = new System.Drawing.Size(41, 14);
305 | this.label9.TabIndex = 0;
306 | this.label9.Text = "Login:";
307 | //
308 | // label10
309 | //
310 | this.label10.AutoSize = true;
311 | this.label10.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
312 | this.label10.Location = new System.Drawing.Point(324, 221);
313 | this.label10.Name = "label10";
314 | this.label10.Size = new System.Drawing.Size(65, 14);
315 | this.label10.TabIndex = 0;
316 | this.label10.Text = "Password:";
317 | //
318 | // label11
319 | //
320 | this.label11.AutoSize = true;
321 | this.label11.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
322 | this.label11.Location = new System.Drawing.Point(12, 243);
323 | this.label11.Name = "label11";
324 | this.label11.Size = new System.Drawing.Size(110, 14);
325 | this.label11.TabIndex = 0;
326 | this.label11.Text = "Syncthing Priority:";
327 | //
328 | // cmbPriority
329 | //
330 | this.cmbPriority.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
331 | this.cmbPriority.FormattingEnabled = true;
332 | this.cmbPriority.Items.AddRange(new object[] {
333 | "Real Time",
334 | "High",
335 | "Above Normal",
336 | "Normal",
337 | "Below Normal",
338 | "Idle"});
339 | this.cmbPriority.Location = new System.Drawing.Point(128, 239);
340 | this.cmbPriority.Name = "cmbPriority";
341 | this.cmbPriority.Size = new System.Drawing.Size(190, 23);
342 | this.cmbPriority.TabIndex = 11;
343 | this.cmbPriority.SelectedIndexChanged += new System.EventHandler(this.cmbPriority_SelectedIndexChanged);
344 | //
345 | // txtLogin
346 | //
347 | this.txtLogin.Enabled = false;
348 | this.txtLogin.Location = new System.Drawing.Point(395, 188);
349 | this.txtLogin.Name = "txtLogin";
350 | this.txtLogin.Size = new System.Drawing.Size(228, 23);
351 | this.txtLogin.TabIndex = 2;
352 | this.txtLogin.TextChanged += new System.EventHandler(this.txtNew_TextChanged);
353 | //
354 | // txtPassword
355 | //
356 | this.txtPassword.Enabled = false;
357 | this.txtPassword.Location = new System.Drawing.Point(395, 217);
358 | this.txtPassword.Name = "txtPassword";
359 | this.txtPassword.Size = new System.Drawing.Size(228, 23);
360 | this.txtPassword.TabIndex = 2;
361 | this.txtPassword.TextChanged += new System.EventHandler(this.txtNew_TextChanged);
362 | //
363 | // btnSave
364 | //
365 | this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
366 | this.btnSave.Enabled = false;
367 | this.btnSave.Font = new System.Drawing.Font("Cambria", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
368 | this.btnSave.Location = new System.Drawing.Point(474, 99);
369 | this.btnSave.Name = "btnSave";
370 | this.btnSave.Size = new System.Drawing.Size(149, 23);
371 | this.btnSave.TabIndex = 8;
372 | this.btnSave.Text = "Save Configuration";
373 | this.btnSave.UseVisualStyleBackColor = true;
374 | this.btnSave.Visible = false;
375 | this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
376 | //
377 | // tipHelp
378 | //
379 | this.tipHelp.AutomaticDelay = 0;
380 | this.tipHelp.AutoPopDelay = 0;
381 | this.tipHelp.InitialDelay = 25;
382 | this.tipHelp.IsBalloon = true;
383 | this.tipHelp.ReshowDelay = 0;
384 | this.tipHelp.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
385 | //
386 | // chkAutoRestart
387 | //
388 | this.chkAutoRestart.AutoSize = true;
389 | this.chkAutoRestart.Location = new System.Drawing.Point(16, 101);
390 | this.chkAutoRestart.Name = "chkAutoRestart";
391 | this.chkAutoRestart.Size = new System.Drawing.Size(147, 19);
392 | this.chkAutoRestart.TabIndex = 12;
393 | this.chkAutoRestart.Text = "Auto restart syncthing";
394 | this.chkAutoRestart.UseVisualStyleBackColor = true;
395 | this.chkAutoRestart.CheckedChanged += new System.EventHandler(this.chkAutoRestart_CheckedChanged);
396 | //
397 | // label12
398 | //
399 | this.label12.AutoSize = true;
400 | this.label12.Location = new System.Drawing.Point(238, 130);
401 | this.label12.Name = "label12";
402 | this.label12.Size = new System.Drawing.Size(175, 15);
403 | this.label12.TabIndex = 16;
404 | this.label12.Text = "shutdown occur in a period of ";
405 | //
406 | // numMaxAutoDuration
407 | //
408 | this.numMaxAutoDuration.Enabled = false;
409 | this.numMaxAutoDuration.Location = new System.Drawing.Point(419, 127);
410 | this.numMaxAutoDuration.Maximum = new decimal(new int[] {
411 | 240,
412 | 0,
413 | 0,
414 | 0});
415 | this.numMaxAutoDuration.Name = "numMaxAutoDuration";
416 | this.numMaxAutoDuration.Size = new System.Drawing.Size(45, 23);
417 | this.numMaxAutoDuration.TabIndex = 14;
418 | //
419 | // cmbMaxAutoDuration
420 | //
421 | this.cmbMaxAutoDuration.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
422 | this.cmbMaxAutoDuration.Enabled = false;
423 | this.cmbMaxAutoDuration.FormattingEnabled = true;
424 | this.cmbMaxAutoDuration.Items.AddRange(new object[] {
425 | "seconds",
426 | "minutes",
427 | "hours"});
428 | this.cmbMaxAutoDuration.Location = new System.Drawing.Point(470, 127);
429 | this.cmbMaxAutoDuration.Name = "cmbMaxAutoDuration";
430 | this.cmbMaxAutoDuration.Size = new System.Drawing.Size(86, 23);
431 | this.cmbMaxAutoDuration.TabIndex = 15;
432 | //
433 | // label15
434 | //
435 | this.label15.AutoSize = true;
436 | this.label15.Location = new System.Drawing.Point(13, 129);
437 | this.label15.Name = "label15";
438 | this.label15.Size = new System.Drawing.Size(166, 15);
439 | this.label15.TabIndex = 16;
440 | this.label15.Text = "Stop the service if more than ";
441 | //
442 | // numMaxAutoCount
443 | //
444 | this.numMaxAutoCount.Enabled = false;
445 | this.numMaxAutoCount.Location = new System.Drawing.Point(185, 127);
446 | this.numMaxAutoCount.Maximum = new decimal(new int[] {
447 | 20,
448 | 0,
449 | 0,
450 | 0});
451 | this.numMaxAutoCount.Name = "numMaxAutoCount";
452 | this.numMaxAutoCount.Size = new System.Drawing.Size(47, 23);
453 | this.numMaxAutoCount.TabIndex = 13;
454 | //
455 | // frmInstall
456 | //
457 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
458 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
459 | this.ClientSize = new System.Drawing.Size(635, 155);
460 | this.Controls.Add(this.cmbMaxAutoDuration);
461 | this.Controls.Add(this.numMaxAutoDuration);
462 | this.Controls.Add(this.chkAutoRestart);
463 | this.Controls.Add(this.label15);
464 | this.Controls.Add(this.cmbPriority);
465 | this.Controls.Add(this.label12);
466 | this.Controls.Add(this.numMaxAutoCount);
467 | this.Controls.Add(this.cmbAccount);
468 | this.Controls.Add(this.cmbStartup);
469 | this.Controls.Add(this.chkAdvanced);
470 | this.Controls.Add(this.label6);
471 | this.Controls.Add(this.label7);
472 | this.Controls.Add(this.label4);
473 | this.Controls.Add(this.txtExecutable);
474 | this.Controls.Add(this.txtPassword);
475 | this.Controls.Add(this.txtLogin);
476 | this.Controls.Add(this.txtNew);
477 | this.Controls.Add(this.txtCurrent);
478 | this.Controls.Add(this.btnUninstall);
479 | this.Controls.Add(this.btnInstall);
480 | this.Controls.Add(this.btnExecutable);
481 | this.Controls.Add(this.btnNew);
482 | this.Controls.Add(this.label11);
483 | this.Controls.Add(this.label10);
484 | this.Controls.Add(this.label9);
485 | this.Controls.Add(this.label8);
486 | this.Controls.Add(this.label5);
487 | this.Controls.Add(this.label3);
488 | this.Controls.Add(this.btnCurrent);
489 | this.Controls.Add(this.label2);
490 | this.Controls.Add(this.label1);
491 | this.Controls.Add(this.btnSave);
492 | this.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
493 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
494 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
495 | this.MaximizeBox = false;
496 | this.Name = "frmInstall";
497 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
498 | this.Text = "Syncthing Service Configuration";
499 | ((System.ComponentModel.ISupportInitialize)(this.numMaxAutoDuration)).EndInit();
500 | ((System.ComponentModel.ISupportInitialize)(this.numMaxAutoCount)).EndInit();
501 | this.ResumeLayout(false);
502 | this.PerformLayout();
503 |
504 | }
505 |
506 | #endregion
507 |
508 | private System.Windows.Forms.Label label1;
509 | private System.Windows.Forms.Button btnCurrent;
510 | private System.Windows.Forms.TextBox txtCurrent;
511 | private System.Windows.Forms.Button btnNew;
512 | private System.Windows.Forms.TextBox txtNew;
513 | private System.Windows.Forms.Label label2;
514 | private System.Windows.Forms.Label label3;
515 | private System.Windows.Forms.Button btnExecutable;
516 | private System.Windows.Forms.TextBox txtExecutable;
517 | private System.Windows.Forms.Button btnInstall;
518 | private System.Windows.Forms.FolderBrowserDialog dlgSelectFolder;
519 | private System.Windows.Forms.OpenFileDialog dlgOpenFile;
520 | private System.Windows.Forms.Label label4;
521 | private System.Windows.Forms.ImageList imlHelp;
522 | private System.Windows.Forms.Label label6;
523 | private System.Windows.Forms.Label label7;
524 | private System.Windows.Forms.Button btnUninstall;
525 | private System.Windows.Forms.CheckBox chkAdvanced;
526 | private System.Windows.Forms.Label label5;
527 | private System.Windows.Forms.ComboBox cmbStartup;
528 | private System.Windows.Forms.Label label8;
529 | private System.Windows.Forms.ComboBox cmbAccount;
530 | private System.Windows.Forms.Label label9;
531 | private System.Windows.Forms.Label label10;
532 | private System.Windows.Forms.Label label11;
533 | private System.Windows.Forms.ComboBox cmbPriority;
534 | private System.Windows.Forms.TextBox txtLogin;
535 | private System.Windows.Forms.TextBox txtPassword;
536 | private System.Windows.Forms.Button btnSave;
537 | private System.Windows.Forms.ToolTip tipHelp;
538 | private System.Windows.Forms.CheckBox chkAutoRestart;
539 | private System.Windows.Forms.Label label12;
540 | private System.Windows.Forms.NumericUpDown numMaxAutoDuration;
541 | private System.Windows.Forms.ComboBox cmbMaxAutoDuration;
542 | private System.Windows.Forms.Label label15;
543 | private System.Windows.Forms.NumericUpDown numMaxAutoCount;
544 | }
545 | }
--------------------------------------------------------------------------------