From 82b42f1ca43496bf3bdd3dee067ad10f1f94103b Mon Sep 17 00:00:00 2001 From: Dominic Beger Date: Wed, 30 May 2018 13:23:48 +0200 Subject: [PATCH 01/33] Fix #54 --- .../Resources/nUpdate UpdateInstaller.exe | Bin 114688 -> 114688 bytes nUpdate.UpdateInstaller/Updater.cs | 4 ++-- nUpdate.UserInterfaceTest/MainDialog.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe b/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe index a446b1bd6ffd267df116887c473c5c0adfbd86ea..b0a01a8d5f32167ec0a3182bf2864ffed6902cf5 100644 GIT binary patch delta 244 zcmZo@U~gz(pU}a~*}=E5dm%ex>||XI%@9kbe{2>E3~a?N3=CWvu0TSKsalGGfhFG! z$i64V4dJopy92pU86%JkgBAk=1EUO(00KTf22lwhmw~~Qf!AsCDvmYb5|+$ol~WiT znboB_7%wukh_NwTWLPixiD7eIf)gJzGXuls&3U1=0-;+ar%kwHIlaimCnHN)>Us{x$ Z8dH>7kY7A~xdr3Xi3Tj&dn_4C+5nRZLJI%@ delta 258 zcmZo@U~gz(pU}Zsa7k%OW`0awXhBM1NovgG4^86J4_h!E-QHu#SkeXn&RR(1 diff --git a/nUpdate.UpdateInstaller/Updater.cs b/nUpdate.UpdateInstaller/Updater.cs index a7f6060f..6645bd87 100644 --- a/nUpdate.UpdateInstaller/Updater.cs +++ b/nUpdate.UpdateInstaller/Updater.cs @@ -128,6 +128,8 @@ public void RunUpdate() return; } + ThreadPool.QueueUserWorkItem(arg => RunUpdateAsync()); + try { _progressReporter.Initialize(); @@ -137,8 +139,6 @@ public void RunUpdate() _progressReporter.InitializingFail(ex); _progressReporter.Terminate(); } - - ThreadPool.QueueUserWorkItem(arg => RunUpdateAsync()); } /// diff --git a/nUpdate.UserInterfaceTest/MainDialog.cs b/nUpdate.UserInterfaceTest/MainDialog.cs index 04cf99ad..c3c8863d 100644 --- a/nUpdate.UserInterfaceTest/MainDialog.cs +++ b/nUpdate.UserInterfaceTest/MainDialog.cs @@ -14,7 +14,7 @@ public MainDialog() { InitializeComponent(); - var manager = new UpdateManager(new Uri("http://localhost/dyn/updates.json"), "rQ7p8WZF5vafxiVfqpX+ZSxsSoAJsXk8M81d2rgO5Al5ywQmkhJh6u3rpwkiJ+1yJf8LqKj5FSjhMMOlMH0R1RRCGJIft6lGj0AuZUP5brq5uo5Yp18VqbxaAU17xeRZcatQq6hqdN0FY3t0E0dH0Vm1MBAA2WgLx9TtHCksYNaUQUbxseSHKB4tzg6Qsqfe8jk/uMmODTLlVd/8G/SJXp524cT9pJUiFrW2FxLUJPZouoOr2dcWdCvyl1cLIKVk3mQL5L4XF8DBQXZ5gkDul+CrpynoBKtgtRgxqiahyBIGV884s9Pqb4+tJ9OoEoY+4oa1lQhcsQeurFbNzyqVBtjNZt9311IuXIalG+U6PlBPCCYepASa0xKCQ+U//nGYkpEgAGFAHVPU1olYMuNbxTBImFVVqbhb45HHqZClRyxhQrYfQArWB0nVC6OjrvbVAq9VSY9sMUEeVyTJPo5nRJrnPPAsF2t7CCtEjz+GPc32ZnX3Si/wjuLVQvULMyMCXKN/ALfSxHQ1CnEkv0Ym+0IZymyaF4LZvDoO+YHj50+2shaOouvEtm+zdt7TOx7ObRpItGFkvA/b5CjXZT1vhqleN9Q+FpKBCIuuXk9CEsxTtMp5UilOP1S6p0qacp0o2HlhXtkUq+wK7A0d1w+SjcBBwVQceFcQCTWz/VmGcV9U9DXQI1tnYPSYN8iwp3d442LooWQObJdDbwOfcCFznsgR7oy0d6CLdp5oSjB8CbW7mQKvSqGhS4yQlKrBVvOOT+gpKTTjypxZ4IQjBja5/VgJQaAg1tH0wOjkV/44UU/SdUxGiEElDytIvzCaYkhqASE2n7ekeGTSR74SfhjKbsmdypFzSvCCSNfjLCG5RkkcJOiyawBwf6NT2FD3Fc4a9hMOKY8mu0JPeAuSJUEY5e0cB0peJieyaq++fE+mSAGeQOVE7MkD98IMb4P/dEruIjzSrb1Y2AJXp4PODckd5XS+OR3fcHJTP2vxyGjaUMnZFLcB5AiPcdjX2qnXGwnr8/NesOLpvIZUmrxd75io3Uo/6lX7HD3v9SLcusykzrMyVrjD5h2G0+m/yojtWwrEVNPJqU7on01/50+h0/MPBTu8K/QPL+ggV6ekVrgi8VOq2qw//fj1NXJLS0+KYmcgZM1MGs1rTGrBCRDoAySDPezCCUETv7pghrStpH+UKfPdiTf22HIfvvo6H87ht4DPmF03bfGQUqbFjMyDQjHbu2n94usllVUbrGk+fjyhtx3/BsdCu4ql7eqJExu37FFnC5+xpmRPlQWvFu/9dq37L47oFlroITJWe87vBQn6hbvVAMi7ZoptefhR/d1cdfzFZEBtIP0Ms4g4uv9QvUNNmQ==AQAB", new CultureInfo("en")); + var manager = new UpdateManager(new Uri("http://localhost/nupdate/updates.json"), "sK3GI4HI8Qd+33LTWXdhSLs/DMX+GZw/Onsh7J71rPUR7UHabuzr03LaUvzQhZfLMvi8V+RKXYz3/6s/ILc0c44IUJ1e9j2Hwq4sgsguQmnOKEcJzOyqA/0lNuf7/2UeyM/478G5UksoFeop4tirMHF5zqQnlxSjcWbCIvzFpkqYKI9vTjgirtFwnGknbXcArN9a5FXDtdZXNUwSO0NP7SIifIKv8Rzwq4d4PnAqhlawafHpJCLyUOd2erUvchUD3h+Q7yUZUWd8/UN5M81wZqA/CthJx2yM2JuclpQgc+5fv7uvcGe0tEep1Fa0e71cXt8CtLNLlWv2lttATE4VxIOzhbiUfLz+BCQBE/dUmBFn3crSLmJHnaqOqIWFx6y5Q5wJReHSKPqRtskuV0Wqy0CwHglaCy1lY8fPJSITZbfXGLGaKstUZN53YWC4QDfQIA5wj6c+TOMvF1yI0IuwV/4M7MtO2veFTXPxHUcAmJMcubwDJnAeyH7bkxLPMTFzBSGGOMdDFs0vvs7z0ZXwn6NCdmgVlgDdD32wd704IiTuskjBKB2HwZxp8ppI7kbCmGuOQTdc5R6qW5IKcvEeEAyM7o/7qvbRXtWrVbfiD9uPE2n3Pt9DIYZbtAHObxs+7XU67yMYWn7KyAL3BE+/5g7V/PkLsWD4jynv23MZnxfQ0Lw70Dw2zZjiLK10pzXRVCJNC5DoZGyocF/JaAqyAxOYoVqleFHvV6G9JmawxtY9w2L++c3NkOVhpks8aiJkjiZ/KR+GHSXHHKFrtg80eyn0Nqmycpq40jEQWqoo3z5dLifFFCjwPG8R6gF7ZK1Kw4CB/sFp7qps5C84F6HRk22bG+YXmUhDOVE9Npagq7reL5dbsoiuoQPEbzuVc2ADI/6RzNLtlnE/RLD2Jl7QW0qc5sVJrdS45x5bQRnQFz6FgSjuZ6hMxOjRIrJHB9RIZoiFqaqZzWOKANvkpI6dlb/Vv01hc1ETsjdsqUFvqZ0ltlMs9BxP0Hl6tiQs15Q0u6HPOiJ50wnXInLQPlKX1kYas1rsChV3tNwzOl75+LNReWwj2HZgBV97dWvk6i5wZcnZJL4+PKf4r9a3Csqi1cygM4U6kESrxAjH4dDwTXfhFsZ0pwbxAfeatcLw9MWFdUc3ZEi2FbxbSOOUFD2HyIQrFR3aBQ9WmXJAmzNW96t47KGVoepPRlAQqwD3TJWkZVfh0bWaZtG9RsifNDz/BUabfqbzPvwEkQI9ShhPApip3lx8ryKgulLpAlVGYWmvtnfSxba1Ah0f8iSEoJIhfdFeahvRoNpxvsk9Bt/Y1TL08LulkYh17xusR4zR3T4i8j8qOrnm4bMTDGrORLQ+OQ==AQAB", new CultureInfo("en")); manager.UseDynamicUpdateUri = true; // manager.HttpAuthenticationCredentials = new NetworkCredential("trade", "test123"); _updaterUI = new UpdaterUI(manager, SynchronizationContext.Current); From f38061e47d97ca4c09cb078e9caa0a66af5d8489 Mon Sep 17 00:00:00 2001 From: Dominic Beger Date: Wed, 30 May 2018 13:33:06 +0200 Subject: [PATCH 02/33] Update version to v3.3.1 --- README.md | 10 +++++----- nUpdate.Administration/Program.cs | 2 +- .../Properties/AssemblyInfo.cs | 4 ++-- .../UI/Dialogs/InfoDialog.Designer.cs | 2 +- .../Properties/AssemblyInfo.cs | 4 ++-- nUpdate.Internal/Properties/AssemblyInfo.cs | 4 ++-- .../Resources/nUpdate UpdateInstaller.exe | Bin 114688 -> 114688 bytes nUpdate.ProvideTAP/Properties/AssemblyInfo.cs | 4 ++-- nUpdate.Test/Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- nUpdate.WithoutTAP/Properties/AssemblyInfo.cs | 4 ++-- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index d3dc523f..774d4e5e 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ # nUpdate - .NET Update Solution -[![Release](https://img.shields.io/badge/release-v3.3-blue.svg)](https://github.com/ProgTrade/nUpdate/releases) -[![NuGet](https://img.shields.io/badge/nuget%20nUpdate.ProvideTAP-v3.3-red.svg)](https://www.nuget.org/packages/nUpdate.ProvideTAP/) -[![NuGet](https://img.shields.io/badge/nuget%20nUpdate.WithoutTAP-v3.3-red.svg)](https://www.nuget.org/packages/nUpdate.WithoutTAP/) +[![Release](https://img.shields.io/badge/release-v3.3.1-blue.svg)](https://github.com/ProgTrade/nUpdate/releases) +[![NuGet](https://img.shields.io/badge/nuget%20nUpdate.ProvideTAP-v3.3.1-red.svg)](https://www.nuget.org/packages/nUpdate.ProvideTAP/) +[![NuGet](https://img.shields.io/badge/nuget%20nUpdate.WithoutTAP-v3.3.1-red.svg)](https://www.nuget.org/packages/nUpdate.WithoutTAP/) [![Issues](https://img.shields.io/github/issues/ProgTrade/nUpdate.svg)](https://github.com/ProgTrade/nUpdate/issues) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/ProgTrade/nUpdate/master/LICENSE) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dominic%2ebeger%40hotmail%2ede&lc=DE&item_name=nUpdate&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest) @@ -41,7 +41,7 @@ You can get the necessary libraries and applications from the current [releases] If you want to use nUpdate with the Taskbased Asynchronous Pattern including `async` and `await`, then install this package: ``` -PM> Install-Package nUpdate.ProvideTAP -Version 3.3.0 +PM> Install-Package nUpdate.ProvideTAP -Version 3.3.1 ``` ##### Trouble installing nUpdate.ProvideTAP? @@ -53,7 +53,7 @@ It may be that Visual Studio shows you a warning like `The primary reference "nU Otherwise, if you want to use the Eventbased Asynchronous Pattern, make sure to install this package: ``` -PM> Install-Package nUpdate.WithoutTAP -Version 3.3.0 +PM> Install-Package nUpdate.WithoutTAP -Version 3.3.1 ``` ## Web diff --git a/nUpdate.Administration/Program.cs b/nUpdate.Administration/Program.cs index 0255d9ba..d1fd2e89 100644 --- a/nUpdate.Administration/Program.cs +++ b/nUpdate.Administration/Program.cs @@ -57,7 +57,7 @@ public static class Program /// /// The version string shown in all dialog titles. /// - public static string VersionString => "nUpdate Administration v3.3.0"; + public static string VersionString => "nUpdate Administration v3.3.1"; private static void Exit(object sender, EventArgs e) { diff --git a/nUpdate.Administration/Properties/AssemblyInfo.cs b/nUpdate.Administration/Properties/AssemblyInfo.cs index a2536b12..1747d16b 100644 --- a/nUpdate.Administration/Properties/AssemblyInfo.cs +++ b/nUpdate.Administration/Properties/AssemblyInfo.cs @@ -38,6 +38,6 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] [assembly: NeutralResourcesLanguage("")] \ No newline at end of file diff --git a/nUpdate.Administration/UI/Dialogs/InfoDialog.Designer.cs b/nUpdate.Administration/UI/Dialogs/InfoDialog.Designer.cs index 8cd6b20a..cb8fe3f2 100644 --- a/nUpdate.Administration/UI/Dialogs/InfoDialog.Designer.cs +++ b/nUpdate.Administration/UI/Dialogs/InfoDialog.Designer.cs @@ -107,7 +107,7 @@ private void InitializeComponent() this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(75, 13); this.label13.TabIndex = 20; - this.label13.Text = "v3.3.0"; + this.label13.Text = "v3.3.1"; // // controlPanel1 // diff --git a/nUpdate.Client.GuiInterface/Properties/AssemblyInfo.cs b/nUpdate.Client.GuiInterface/Properties/AssemblyInfo.cs index 27ee9cf9..7151913d 100644 --- a/nUpdate.Client.GuiInterface/Properties/AssemblyInfo.cs +++ b/nUpdate.Client.GuiInterface/Properties/AssemblyInfo.cs @@ -37,5 +37,5 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] diff --git a/nUpdate.Internal/Properties/AssemblyInfo.cs b/nUpdate.Internal/Properties/AssemblyInfo.cs index b4ecaed2..b19bf735 100644 --- a/nUpdate.Internal/Properties/AssemblyInfo.cs +++ b/nUpdate.Internal/Properties/AssemblyInfo.cs @@ -38,8 +38,8 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] [assembly: InternalsVisibleTo("nUpdate.Shared")] [assembly: InternalsVisibleTo("nUpdate.ProvideTAP")] [assembly: InternalsVisibleTo("nUpdate.WithoutTAP")] \ No newline at end of file diff --git a/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe b/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe index b0a01a8d5f32167ec0a3182bf2864ffed6902cf5..758c78cb4922f287da1c55e8fd0839185eea5c79 100644 GIT binary patch delta 121 zcmZo@U~gz(pU}ZHse5A=QywGZ=H9$&TY)Eye(GN@C%J8{EsJOhj&R*9vBry!(QtF} zuCKLB6T7EJSujcoY>htmm3d=<$5IYEu?3U$?YFmBFwUywWMp6lLIwuL?dsbYH!?CB YZoj#m@jH;7esL$GIgrb_i}5=v04Jy{L;wH) delta 121 zcmZo@U~gz(pU}a?*|D*UDUXq1b8lX?tw88j$!Qbr*tqSv#sC0Ui1*4Qe>B@kH^PV=Ii$%`LXrxrfZ*Q?+oK?%oz`zWIK(JkX8{QWHbkIId?IBX9WPv{wqlU diff --git a/nUpdate.ProvideTAP/Properties/AssemblyInfo.cs b/nUpdate.ProvideTAP/Properties/AssemblyInfo.cs index 6a015e0b..e0a5349f 100644 --- a/nUpdate.ProvideTAP/Properties/AssemblyInfo.cs +++ b/nUpdate.ProvideTAP/Properties/AssemblyInfo.cs @@ -35,5 +35,5 @@ // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] diff --git a/nUpdate.Test/Properties/AssemblyInfo.cs b/nUpdate.Test/Properties/AssemblyInfo.cs index 9fe3860c..5568e01b 100644 --- a/nUpdate.Test/Properties/AssemblyInfo.cs +++ b/nUpdate.Test/Properties/AssemblyInfo.cs @@ -37,5 +37,5 @@ // durch Einsatz von '*', wie in nachfolgendem Beispiel: // [Assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] diff --git a/nUpdate.UpdateInstaller/Properties/AssemblyInfo.cs b/nUpdate.UpdateInstaller/Properties/AssemblyInfo.cs index ccf38b4e..de751b57 100644 --- a/nUpdate.UpdateInstaller/Properties/AssemblyInfo.cs +++ b/nUpdate.UpdateInstaller/Properties/AssemblyInfo.cs @@ -37,5 +37,5 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] diff --git a/nUpdate.WithoutTAP/Properties/AssemblyInfo.cs b/nUpdate.WithoutTAP/Properties/AssemblyInfo.cs index f37783b5..1e49b26c 100644 --- a/nUpdate.WithoutTAP/Properties/AssemblyInfo.cs +++ b/nUpdate.WithoutTAP/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, // indem Sie "*" wie unten gezeigt eingeben: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.3.1.0")] +[assembly: AssemblyFileVersion("3.3.1.0")] From 6c8be7a1b75f31b7286ef162dc5f3d885a8372b3 Mon Sep 17 00:00:00 2001 From: Dominic Beger Date: Thu, 31 May 2018 12:38:52 +0200 Subject: [PATCH 03/33] Add JetBrains as supporter to the ReadMe --- README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 774d4e5e..e6d2d7d6 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,8 @@ nUpdate is a modern update system for .NET applications. Providing high security and an easy-to-use user interface, it is the perfect solution for your software. -nUpdate is in a very advanced state. Its development began in autumn 2013 and the project has grown up until now. It contains a lot of features and provides you with everything you'll need to manage your updates. - -Also, nUpdate is designed to fit in with all operating systems since Windows Vista and its components can be used in a very flexible way. It offers you the possibility to completely customize the functionality and user interfaces. This flexiblity is based on interfaces, service providers and the Event-based or Task-based aynchronous pattern. nUpdate will also take care of your clients by using intelligent algorithms that will prevent your users from being stressed out by having to do a lot of work manually and repeatedly, such as installing every single update on its own. Instead, nUpdate connects all updates, installs them in one go and does still take care of the version order to avoid any conflicts between the packages and makes sure that the data is installed in exactly the way you wanted. +![](https://www.nupdate.net/img/new-updates.png) +![](https://www.nupdate.net/img/updates-download.png) ## Features @@ -29,7 +28,6 @@ Also, nUpdate is designed to fit in with all operating systems since Windows Vis - Supports very large update packages - ... - ## Installation You can get the necessary libraries and applications from the current [releases](https://github.com/ProgTrade/nUpdate/releases). The nUpdate library itself can also be installed in your application using the NuGet package manager. @@ -80,7 +78,6 @@ Have a look at the [develop]-branch for the newest changes. [nUpdate]:http://www.nupdate.net/ [@nUpdateLib]:http://twitter.com/nUpdateLib -## Screenshots +## Supported by -![](https://www.nupdate.net/img/new-updates.png) -![](https://www.nupdate.net/img/updates-download.png) + From ee71c1360b371b4e8720e04ff369d641a23813bb Mon Sep 17 00:00:00 2001 From: Dominic Beger Date: Tue, 19 Jun 2018 11:17:20 +0200 Subject: [PATCH 04/33] Add Italian as language --- .../Core/Localization/LocalizationHelper.cs | 5 +- nUpdate.Internal/Core/Localization/it-IT.json | 63 +++++++++++++++++++ nUpdate.Internal/nUpdate.Internal.csproj | 1 + 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 nUpdate.Internal/Core/Localization/it-IT.json diff --git a/nUpdate.Internal/Core/Localization/LocalizationHelper.cs b/nUpdate.Internal/Core/Localization/LocalizationHelper.cs index 40805b76..818030bd 100644 --- a/nUpdate.Internal/Core/Localization/LocalizationHelper.cs +++ b/nUpdate.Internal/Core/Localization/LocalizationHelper.cs @@ -15,7 +15,7 @@ internal class LocalizationHelper { internal static CultureInfo[] IntegratedCultures => new[] { - new CultureInfo("de-AT"), new CultureInfo("de-CH"), new CultureInfo("de-DE"), new CultureInfo("zh-CN"), + new CultureInfo("de-AT"), new CultureInfo("de-CH"), new CultureInfo("de-DE"), new CultureInfo("zh-CN"), new CultureInfo("it-IT"), new CultureInfo("en") }; @@ -72,8 +72,7 @@ internal static IEnumerable GetLocalizedEnumerationValues(LocalizationPr internal static bool IsIntegratedCulture(CultureInfo cultureInfo, Dictionary localizationFilePaths) { - string localizationFilePath; - localizationFilePaths.TryGetValue(cultureInfo, out localizationFilePath); + localizationFilePaths.TryGetValue(cultureInfo, out var localizationFilePath); return IntegratedCultures.Contains(cultureInfo) || localizationFilePath != null; } } diff --git a/nUpdate.Internal/Core/Localization/it-IT.json b/nUpdate.Internal/Core/Localization/it-IT.json new file mode 100644 index 00000000..6a764e77 --- /dev/null +++ b/nUpdate.Internal/Core/Localization/it-IT.json @@ -0,0 +1,63 @@ +{ + "CancelButtonText": "Annulla", + "ContinueButtonText": "Continua", + "InstallButtonText": "Installa", + "CloseButtonText": "Chiudi", + "UpdateSearchDialogHeader": "Ricerca aggiornamenti...", + "NewUpdateDialogMultipleUpdatesHeader": "{0} aggiornamenti disponibili.", + "NewUpdateDialogSingleUpdateHeader": "{0} nuovo aggiornamento disponibile.", + "NewUpdateDialogInfoText": "New updates can be downloaded for {0}.", + "NewUpdateDialogAvailableVersionsText": "Versioni disponibili: {0}", + "NewUpdateDialogCurrentVersionText": "Versione corrente: {0}", + "NewUpdateDialogSizeText": "Dimensione del pacchetto: {0}", + "NewUpdateDialogChangelogText": "Changelog:", + "NewUpdateDialogAccessText": "Accessi:", + "NewUpdateDialogRegistryAccessText": "Registro", + "NewUpdateDialogFilesAccessText": "File system", + "NewUpdateDialogProcessesAccessText": "Processi", + "NewUpdateDialogServicesAccessText": "Servizi", + "NoUpdateDialogHeader": "Non ci sono aggiornamenti disponibili.", + "NoUpdateDialogInfoText": "L'applicazione è già aggiornata.", + "UpdateDownloadDialogLoadingHeader": "Download degli aggiornamenti...", + "UpdateDownloadDialogLoadingInfo": "Attendere mentre gli aggiornamenti\nsono in download... ({0}%)", + "InstallerExtractingFilesText": "\"Estrazione dei file...\"", + "InstallerCopyingText": "\"Copia {0}...\"", + "InstallerInitializingErrorCaption": "\"Errore durante l'inizializzaione dei dati.\"", + "InstallerUpdatingErrorCaption": "\"Errore durante l'aggiornamento dell'applicazione.\"", + "InstallerFileInUseError": + "Impossibile sovrascrivere il file '{0}' perché in uso da un altro processo. Terminare tutte le applicazioni che bloccano il processo e premere \"OK\".", + "FileRenamingOperationText": "\"Rinomina il file \"{0}\" in \"{1}\"...\"", + "FileDeletingOperationText": "\"Rimozione del file \"{0}\"...\"", + "RegistrySubKeyCreateOperationText": "\"Creazione della chiave di registro \"{0}\"...\"", + "RegistrySubKeyDeleteOperationText": "\"Rimozione della chiave di registro \"{0}\"...\"", + "RegistryNameValuePairSetValueOperationText": "\"Impostazione di \"{0}\" nel registro in \"{1}\"...\"", + "RegistryNameValuePairDeleteValueOperationText": "\"Elimnazione di nome-valore \"{0}\"...\"", + "ProcessStartOperationText": "\"Avvio del processo \"{0}\"...\"", + "ProcessStopOperationText": "\"Terminazione del processo \"{0}\"...\"", + "ServiceStartOperationText": "\"Avvio del servizio \"{0}\"...\"", + "ServiceStopOperationText": "\"Terminazione del servizio \"{0}\"...\"", + "UpdateSearchErrorCaption": "Errore durante la ricerca degli aggiornamenti.", + "UnfulfilledRequirementErrorCaption": "Dipendenze insoddisfatte.", + "UnfulfilledRequirementErrorText": + "L'installazione di alcuni aggiornamenti non può essere completata a causa della mancanza delle seguenti dipendenze:", + "OperatingSystemText": "Sistema operativo:", + "DotNetFrameworkText": ".NET Framework:", + "RequiredVersionText": "Versione richiesta:", + "PackageValidityCheckErrorCaption": "Errore durante la verifica della firma del pacchetto.", + "PackageNotFoundErrorText": "Il pacchetto non è stato trovato.", + "InvalidSignatureErrorCaption": "Firma non valida del pacchetto.", + "SignatureNotMatchingErrorText": + "nUpdate eliminerà i pacchetti non riconosciuti senza possibilità di recupero.", + "InvalidSignatureErrorText": "La firma del pacchetto non è una firma RSA valida.", + "SearchProcessRunningExceptionText": "È già in corso la ricerca di aggiornamenti.", + "DownloadingProcessRunningExceptionText": "È già in corso il download di un pacchetto.", + "NetworkConnectionExceptionText": "Nessuna connessione ad Internet disponibile.", + "PackageSizeCalculationExceptionText": + "Impossibile calcolare le dimensioni del pacchetto. Il pacchetto dell'aggiornamento potrebbe non essere presente.", + "InvalidJsonExceptionText": + "Il file contenete le informazioni di aggiornamento non è un file JSON valido. Le informazioni non possono essere processate.", + "StatisticsScriptExceptionText": + "Errore durante il trasferimento dei dati al server delle statistiche. Comunicare il seguente errore allo sviluppatore. Risposta dallo script PHP: {0}", + "PackageFileNotFoundExceptionText": "Il pacchetto dell'aggiornamento \"{0}\" non è stato trovato.", + "MainFolderCreationExceptionText": "Impossibile creare la cartella principale. {0}" +} \ No newline at end of file diff --git a/nUpdate.Internal/nUpdate.Internal.csproj b/nUpdate.Internal/nUpdate.Internal.csproj index e54c6d44..f1690618 100644 --- a/nUpdate.Internal/nUpdate.Internal.csproj +++ b/nUpdate.Internal/nUpdate.Internal.csproj @@ -129,6 +129,7 @@ + From d88fa2e20c9f281bbd39beee1dc1b3355713094c Mon Sep 17 00:00:00 2001 From: Dominic Beger Date: Wed, 4 Jul 2018 12:27:53 +0200 Subject: [PATCH 05/33] Fix #55 --- .../Resources/nUpdate UpdateInstaller.exe | Bin 114688 -> 115200 bytes nUpdate.Shared/Updating/UpdateManager.cs | 7 ++----- nUpdate.UpdateInstaller/Updater.cs | 2 ++ 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe b/nUpdate.Internal/Resources/nUpdate UpdateInstaller.exe index 758c78cb4922f287da1c55e8fd0839185eea5c79..931a1be7f6c393f65ff84b0d98a5e9bd0c22cb9d 100644 GIT binary patch delta 4203 zcmZ9P32+ou8pr>y=Oo>^2$=*XnM@9HP3{;SLO60PiGsOEFd#@YL;}SovBP14I>ev> zq!f7WfNp@uA&0>z6B3XhNl?qJQa7l(tW~RcZI)HmMT%VzmD<-mFAd{V&FlVs|Nr~m z_j>x9uHLZ0v|*!Z+oqVnm-8M3|9puUh$I8ZCBU=Z;LMusM;DOGl#m2N-vWXNn*U1* zT}TrAik!@4XRchjg*Zqa?I#Ijh<-t0qU|+IVxJQB6=1-!T6W$FDA6py*yD*71`MQ{ zerB5HpDN0K0-9UW0KYaGYz`x!3Fa7KGV#ncCm0-^1kH&ofnRD$uvOlvQ5K^^8s##2 z)3e(@pO9gCG2nk>*z?!GZ8~;X9#UZ-?|M#!_vwWwfi^{^3DX3+H!_t}&<`WC$ci1d zc+yJ~Y+2+2U1Vz@|Dxw?=>pNwYqqt5zmBeoDi)G-^h8v;FkMH-qUH?*{Z?P5ZTT`2xKamn}r;Y4+4KVV0iOO>O5Xf1Wx)_??~_wZC;D^ZyX?9QC#4FafnG`4$Y4#f3I~!E zNOGu9<0!LM8^*79gdn$S5Gu&K>4;+yGe@Q*U?Z>A;M!%gGPXvIF24Plw7cbE#&vjpZ{n{HDM?(`((FzltT z(i5F`X$jP&NHWhqM~la@oT6Zo%UQ&G~RBQ>-(V=^1tGV%*oGFe{BhL(6X zp-pc|50a1i#tcfV-!~SZ8b{P1y_HdH_>`Sap-Zx6(9XVolD?jUPO zXCP}!qg|bf}?71gjVEDs{VFdN`1ul`@j$5xRGV zB}Z8$SynP93r#(&a?xZ>GnyjO%#KJ|NuR7{)x^kbCGU4L>WSM^K9dU3dzeR9-@#fj z(at)Cw`MzIwLj%osXqTGd6o9&r;|76#r#uK2K|88>iN*G1cKN$VvDQqEn>$>D?P^x zGW=c6cn0iW^sx{lY#36h9a~Ha9bi4rwD1pO73xu`9pB@!-?-MHYEkG@HEP}*{i9zL z{>|z9#4%G8u5tQ&;&rC|qLSNuI{B8L9Xi)Nx0kR(RB3zoC$XilBTgkZitIYkj#`a^ z#5f$*$R;M@l16D_s!!Qj$aLObAq%s-WG+gaC1#=6=~6{=d14X6axMngW+EFkoFZ&j z89mG?F{luCVFf2=kcE-VDaU%Bn1eP>h1S0ra?ru4IJgjZ<2gfqsltvDAwnrOlOIO!!^by!e} zt~s|SmSIpOH;$Vc#4?{>yBy!D8by?~Q7re-DzK|q$>K&y#yWik<|$8oxZJ2_I3Kvz zD}EEYPG5~am9`^w;u`S*T;tl$p-+f4K1mm2_FV70X3H|uVw7m~thfZ5I6Z24%Jh)W zyrtOY)m%sol=Vw-nOp6FFNn36J>OFX|TS(CH|)yZBGAm`4hC@eU4jF3b7h@mwT58 ziS_7LVgLtPq{3e?TE` z|8`=7N@FB6a6RcnpGxgWjWc2sM(=QL!Z+NhbowUz$VqAR&A7!$Y4quvA=M~Lj1i^N zx4_Ct>GZ8g=A?A`^Kh!<#>e(6;`2B_gBMs`cRnL_V2kQd%GFCd(Ca00gegFBV}R3C zQwXCWPLBsnmUiNOP8|U@M&~*GIkXVF@ENDiLM@EG9w%KcUcz@Sj^FAo`@Mu~D!F0I zTqC@Us)fqN+*lS7C;br_>idHmuUImrE?}{uQFMphBkhJ$CGT@*k59ktL6NF;pc{G8 z9+Yv)5elTeOjDm99cUHuq;5@oT2~;wf(N+ONJ^xASj8z{Un=d#8cwh2>!bsk7HBAy z4q_YES_~_sSMfckB4eF&2>K;T*&WzoY?Tf}TB1HbI&i_@l8$I;M3hQLk;1JP$qMN; zbaL`z3-)MfR_j}(W9Z`A4Z$V7u4Vav721nIu4S-d-ayzx-sNu?>ZCW-ENuTBsAtt2 zM+O&PWW{*2%l3mlPwLaIOr@bfI)O6o>^I~|{hBt#SRf7fT>O(*#GSF&Cf%m%WSex# z>vZwncndAu8l-D9zl9D?G5SXHX`iHnpj_L^v_T*34EA%aff#Y-H`+T~+kS`U^0wv~ z+_ltuXbGgW=gw7VG@ro@P8OkCdfR8gv(VLgbM}%(^I0El2q9i=B}SMy zi=7COgci2pZ{{dC%k9&)|Bx#e*r)Q0Y=%|{V02yGe?tdl0e81a!e)%xh8iE3^5!zmPEmvBm{^OjVMqogbol6WfFsO z7+u1{L0m*m2?_?C2r3{E#L_Jlfvr_nWl^({EnO~GrIg*;_j+C$#;Ka_{(b-d``-87 z^fz7Iw#M4lX5F|hZqt)Nvmibf5eJ220WJbO;R{}v-t|%)>7;}tnWxneMA4l$)94J6 z6xctOxg5;pq8o^liM&lOkhs{s=}cmuGWL~V#)60OiJnJ z)^XG!+o(&9l|F!XmYigEvb4>~Y(QXo+OSBi)Sw(jEU(b=8Qt$aIJA(E#q>(h&t$Q8 zAb4W{JGF*ZnaNV`2jRUY=?tOn=nUy!g!V+I6GFd=&LN{{h&_?arep0nWG$UXRf(EnmPyAY`bbQv^tnV&$7D+1OZ4ZM8tIxur#Ldm5W3PajfBxNjx3V0DYlwq z)0)_mEX&ggHkuY^BNg7_I7K24(~5)%dN_+bMNcH;MDGhg^P=@^QPQe0fNA8S-Nv=H zmIjT^mCgjv;?Wt>l>pi@x?QAH5{F1X1yEaJEK#T{aezeAn51x$PF+cRNw)U_yAGRU zLbLV)KkR3RMbYe#u4rv6(Bfd%D<#V!J3DLd zTWDZrvg3Wj8O!aX*|3{GRAmjI+y4Db^IJM+1ogQO0nf^PH9yKYsF*->lo3R?Tq#Q)avMn z!k0)LJyDoR8tIk7HzO7V0`avq=$!|Iuw}%T*4|aZ&hO6io-E25>P}8%!2UHChgx9A zA)VT>!OCef>v^Vye-zJYn@;Wc9zO&QY8|>3gFU)N<@K@G0%P!%ptHjVtTE^p^wscR znD&EC9{FhM{{kKO(XFFz3I~4EsVn?^d^sE#F_us7L5U+kaiG$m5G4W68e~_J@tHvx zO1fX!If!-LT0{;qeI%D8PgHU+*5%ekxiYzg;Upmj*(V?uWrCvY*BMm_N)9Q;9hf1= z6=GxbfS|m{yOli57gQYinK=(Ff=Y)KV+>Xasv2fvw8jNKe>=VmuT;jOQy1IeWi$@k z1zl!zC%OgAjHy({0MNZMxqeQg;wUYpa`9lxYM`4McAg(069A9 zI@3O3#O5C$Yit%2!&Jzv1EhzE#fTE*NV$O$)C-asO$HV8B)ezI(4$j3Dn`~TW$4q% zSIphGC^TNo6inwgo+xGt9^vF>t61Y~RHk5?A=+>cx_yM}P8-V6Ir-MW3LMbMgV(Hc zl?uOKyAprZHHw(Xg-WHLR)uw?Jc|cqS*@lj6!51!+#b|2tie?sJ@_`P)l`c;cX6=` z>BE;Q)6uV!2fu|qqSX5(Z9vu(?)0G9_Mo)^E`y#>?!|IJ57|~*@ADfs8*M(#jr3s6 zG#g(Et0VYNN+YtS`jTE_f2j}n4Q#^wy2gJ|kJ5xzAIUanG3LN6D4y-w9IO+xFX?&Z zA#4lm`B}lCFO%WRJH7!AgpjkSN z5i~cFYm)@M%!*lp?{pdJ*hqgcp1yM_GeZ5B3QfZ4G5~NYL`2QR)`F zA*dtB&gdOMXTpl{EIttQd6Mk@0Dm0a=yD>-5%cdrEkD&#d%hkPT6IzRTp86ub z5L9AmQupCMf;L!IsNJ~Ppg%u4@Tu9Y?l;mXC|6%X)V+L79ry>Cr@o9V}=4k2!4#dwWv zyKE{@dySo`HW#U{W1?^#HW#Re4K2b_q#p6x{5Np7aK>Y!dW(J`8`U>`PPgcdx6mZ4 zApr~Jx6mRe&a_ZI>X-BwI)v8Av}1nSaZsVnB^Dh2oz^R~uG=)XuQiV&VYY8;T6FP@ zPQDxJ_i4Tm&IMQ~AIBv@Hfe|Yw%>#&@T1Ur$U^yqpVo(fMt#2dILX95Kk*%e`b3m6 z?HxbuB;tiOgJ~y`tCO$LQ-01HGteUw?F2{bM!tfAB6pFsU=GOT3y(0HO%c%wE5n*{gYVO-aq`vp)VQ;ML}`z48Rx z4w^afNWY87WO%Q5@n$3NF~4?n#oDC4>0501r2a@y0r|B item.Value))}\"", @@ -405,7 +402,7 @@ public void InstallPackage() $"\"{Application.ExecutablePath}\"", $"\"{Application.ProductName}\"", $"\"{Convert.ToBase64String(Encoding.UTF8.GetBytes(Serializer.Serialize(_packageOperations)))}\"", - $"\"{installerUiAssemblyPath}\"", + $"\"{(UseCustomInstallerUserInterface ? CustomInstallerUiAssemblyPath : string.Empty)}\"", _lp.InstallerExtractingFilesText, _lp.InstallerCopyingText, _lp.FileDeletingOperationText, diff --git a/nUpdate.UpdateInstaller/Updater.cs b/nUpdate.UpdateInstaller/Updater.cs index 6645bd87..4c740555 100644 --- a/nUpdate.UpdateInstaller/Updater.cs +++ b/nUpdate.UpdateInstaller/Updater.cs @@ -109,6 +109,8 @@ private IProgressReporter GetProgressReporter() ? Assembly.GetExecutingAssembly() : Assembly.LoadFrom(Program.ExternalGuiAssemblyPath); IServiceProvider provider = ServiceProviderHelper.CreateServiceProvider(assembly); + if (provider == null) + throw new Exception("There is no service provider available."); return (IProgressReporter) provider.GetService(typeof(IProgressReporter)); } From 617331537837a3e928d6ba59fb1b621abec69eed Mon Sep 17 00:00:00 2001 From: NoFear23m Date: Wed, 25 Jul 2018 20:33:22 +0200 Subject: [PATCH 06/33] Add WPF user interface --- nUpdate.Internal/Properties/AssemblyInfo.cs | 4 +- nUpdate.WPFUpdateInstaller/App.config | 6 + nUpdate.WPFUpdateInstaller/App.xaml | 9 + nUpdate.WPFUpdateInstaller/App.xaml.cs | 22 + .../InstallerServiceProvider.cs | 36 + nUpdate.WPFUpdateInstaller/MainWindow.xaml | 16 + nUpdate.WPFUpdateInstaller/MainWindow.xaml.cs | 75 ++ nUpdate.WPFUpdateInstaller/Program.cs | 196 +++ .../ProgressReporterService.cs | 46 + .../Properties/AssemblyInfo.cs | 55 + .../Properties/Resources.Designer.cs | 71 ++ .../Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../Trade-Updater-Logo-v3.ico | Bin 0 -> 31064 bytes .../nUpdate.WPFUpdateInstaller.csproj | 124 ++ nUpdate.WPFUserInterface.Test/App.config | 6 + nUpdate.WPFUserInterface.Test/App.xaml | 12 + nUpdate.WPFUserInterface.Test/App.xaml.cs | 17 + nUpdate.WPFUserInterface.Test/MainWindow.xaml | 13 + .../MainWindow.xaml.cs | 42 + .../Properties/AssemblyInfo.cs | 57 + .../Properties/Resources.Designer.cs | 71 ++ .../Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 30 + .../Properties/Settings.settings | 7 + .../ServiceInjector.cs | 12 + .../Services/DialogWindowService.cs | 26 + .../Services/MessageBoxService.cs | 14 + .../Services/ServiceInjector.cs | 16 + .../Trade-Updater-Logo-v3.ico | Bin 0 -> 31064 bytes .../nUpdate.WPFUserInterface.Test.csproj | 125 ++ nUpdate.WPFUserInterface/App.config | 6 + nUpdate.WPFUserInterface/App.xaml | 9 + nUpdate.WPFUserInterface/App.xaml.cs | 18 + nUpdate.WPFUserInterface/Extensions.cs | 29 + .../Properties/Annotations.cs | 1065 +++++++++++++++++ .../Properties/AssemblyInfo.cs | 57 + .../Properties/Resources.Designer.cs | 63 + .../Properties/Resources.resx | 117 ++ .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../ServiceInterfaces/IDialogWindowService.cs | 12 + .../ServiceInterfaces/IMessageboxService.cs | 36 + .../ServiceInterfaces/ServiceContainer.cs | 40 + .../Services/DialogWindowService.cs | 32 + .../Services/MessageBoxService.cs | 15 + .../Services/ServiceInjector.cs | 17 + .../Trade-Updater-Logo-v3.ico | Bin 0 -> 31064 bytes .../UI/UserControls/uclChangelogView.xaml | 78 ++ .../UI/UserControls/uclChangelogView.xaml.cs | 28 + .../UI/UserControls/uclDownloadUpdate.xaml | 35 + .../UI/UserControls/uclDownloadUpdate.xaml.cs | 15 + .../UI/UserControls/uclInstallUpdates.xaml | 33 + .../UI/UserControls/uclInstallUpdates.xaml.cs | 15 + .../UI/UserControls/uclUpdateSearch.xaml | 27 + .../UI/UserControls/uclUpdateSearch.xaml.cs | 15 + .../UI/Windows/DialogWindow.xaml | 27 + .../UI/Windows/DialogWindow.xaml.cs | 43 + .../UpdateConfiguration.cs | 79 ++ nUpdate.WPFUserInterface/UpdateManager.cs | 304 +++++ nUpdate.WPFUserInterface/UpdaterUI.cs | 121 ++ .../ViewModel/ChangelogViewModel.cs | 133 ++ .../ViewModel/DownloadUpdateViewModel.cs | 126 ++ .../ViewModel/Interfaces/IDialogViewModel.cs | 14 + .../ViewModel/RelayCommand.cs | 38 + .../ViewModel/UpdateSearchViewModel.cs | 85 ++ .../ViewModel/UpdateUiBaseViewModel.cs | 34 + .../ViewModel/ViewModelBase.cs | 58 + .../nUpdate.WPFUserInterface.csproj | 164 +++ nUpdate.sln | 43 + 71 files changed, 4442 insertions(+), 1 deletion(-) create mode 100644 nUpdate.WPFUpdateInstaller/App.config create mode 100644 nUpdate.WPFUpdateInstaller/App.xaml create mode 100644 nUpdate.WPFUpdateInstaller/App.xaml.cs create mode 100644 nUpdate.WPFUpdateInstaller/InstallerServiceProvider.cs create mode 100644 nUpdate.WPFUpdateInstaller/MainWindow.xaml create mode 100644 nUpdate.WPFUpdateInstaller/MainWindow.xaml.cs create mode 100644 nUpdate.WPFUpdateInstaller/Program.cs create mode 100644 nUpdate.WPFUpdateInstaller/ProgressReporterService.cs create mode 100644 nUpdate.WPFUpdateInstaller/Properties/AssemblyInfo.cs create mode 100644 nUpdate.WPFUpdateInstaller/Properties/Resources.Designer.cs create mode 100644 nUpdate.WPFUpdateInstaller/Properties/Resources.resx create mode 100644 nUpdate.WPFUpdateInstaller/Properties/Settings.Designer.cs create mode 100644 nUpdate.WPFUpdateInstaller/Properties/Settings.settings create mode 100644 nUpdate.WPFUpdateInstaller/Trade-Updater-Logo-v3.ico create mode 100644 nUpdate.WPFUpdateInstaller/nUpdate.WPFUpdateInstaller.csproj create mode 100644 nUpdate.WPFUserInterface.Test/App.config create mode 100644 nUpdate.WPFUserInterface.Test/App.xaml create mode 100644 nUpdate.WPFUserInterface.Test/App.xaml.cs create mode 100644 nUpdate.WPFUserInterface.Test/MainWindow.xaml create mode 100644 nUpdate.WPFUserInterface.Test/MainWindow.xaml.cs create mode 100644 nUpdate.WPFUserInterface.Test/Properties/AssemblyInfo.cs create mode 100644 nUpdate.WPFUserInterface.Test/Properties/Resources.Designer.cs create mode 100644 nUpdate.WPFUserInterface.Test/Properties/Resources.resx create mode 100644 nUpdate.WPFUserInterface.Test/Properties/Settings.Designer.cs create mode 100644 nUpdate.WPFUserInterface.Test/Properties/Settings.settings create mode 100644 nUpdate.WPFUserInterface.Test/ServiceInjector.cs create mode 100644 nUpdate.WPFUserInterface.Test/Services/DialogWindowService.cs create mode 100644 nUpdate.WPFUserInterface.Test/Services/MessageBoxService.cs create mode 100644 nUpdate.WPFUserInterface.Test/Services/ServiceInjector.cs create mode 100644 nUpdate.WPFUserInterface.Test/Trade-Updater-Logo-v3.ico create mode 100644 nUpdate.WPFUserInterface.Test/nUpdate.WPFUserInterface.Test.csproj create mode 100644 nUpdate.WPFUserInterface/App.config create mode 100644 nUpdate.WPFUserInterface/App.xaml create mode 100644 nUpdate.WPFUserInterface/App.xaml.cs create mode 100644 nUpdate.WPFUserInterface/Extensions.cs create mode 100644 nUpdate.WPFUserInterface/Properties/Annotations.cs create mode 100644 nUpdate.WPFUserInterface/Properties/AssemblyInfo.cs create mode 100644 nUpdate.WPFUserInterface/Properties/Resources.Designer.cs create mode 100644 nUpdate.WPFUserInterface/Properties/Resources.resx create mode 100644 nUpdate.WPFUserInterface/Properties/Settings.Designer.cs create mode 100644 nUpdate.WPFUserInterface/Properties/Settings.settings create mode 100644 nUpdate.WPFUserInterface/ServiceInterfaces/IDialogWindowService.cs create mode 100644 nUpdate.WPFUserInterface/ServiceInterfaces/IMessageboxService.cs create mode 100644 nUpdate.WPFUserInterface/ServiceInterfaces/ServiceContainer.cs create mode 100644 nUpdate.WPFUserInterface/Services/DialogWindowService.cs create mode 100644 nUpdate.WPFUserInterface/Services/MessageBoxService.cs create mode 100644 nUpdate.WPFUserInterface/Services/ServiceInjector.cs create mode 100644 nUpdate.WPFUserInterface/Trade-Updater-Logo-v3.ico create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclChangelogView.xaml create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclChangelogView.xaml.cs create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclDownloadUpdate.xaml create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclDownloadUpdate.xaml.cs create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclInstallUpdates.xaml create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclInstallUpdates.xaml.cs create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclUpdateSearch.xaml create mode 100644 nUpdate.WPFUserInterface/UI/UserControls/uclUpdateSearch.xaml.cs create mode 100644 nUpdate.WPFUserInterface/UI/Windows/DialogWindow.xaml create mode 100644 nUpdate.WPFUserInterface/UI/Windows/DialogWindow.xaml.cs create mode 100644 nUpdate.WPFUserInterface/UpdateConfiguration.cs create mode 100644 nUpdate.WPFUserInterface/UpdateManager.cs create mode 100644 nUpdate.WPFUserInterface/UpdaterUI.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/ChangelogViewModel.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/DownloadUpdateViewModel.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/Interfaces/IDialogViewModel.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/RelayCommand.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/UpdateSearchViewModel.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/UpdateUiBaseViewModel.cs create mode 100644 nUpdate.WPFUserInterface/ViewModel/ViewModelBase.cs create mode 100644 nUpdate.WPFUserInterface/nUpdate.WPFUserInterface.csproj diff --git a/nUpdate.Internal/Properties/AssemblyInfo.cs b/nUpdate.Internal/Properties/AssemblyInfo.cs index b19bf735..3b311c5f 100644 --- a/nUpdate.Internal/Properties/AssemblyInfo.cs +++ b/nUpdate.Internal/Properties/AssemblyInfo.cs @@ -42,4 +42,6 @@ [assembly: AssemblyFileVersion("3.3.1.0")] [assembly: InternalsVisibleTo("nUpdate.Shared")] [assembly: InternalsVisibleTo("nUpdate.ProvideTAP")] -[assembly: InternalsVisibleTo("nUpdate.WithoutTAP")] \ No newline at end of file +[assembly: InternalsVisibleTo("nUpdate.WithoutTAP")] +[assembly: InternalsVisibleTo("nUpdate.WPFUserInterface")] +[assembly: InternalsVisibleTo("nUpdate.WPFUpdateInstaller")] \ No newline at end of file diff --git a/nUpdate.WPFUpdateInstaller/App.config b/nUpdate.WPFUpdateInstaller/App.config new file mode 100644 index 00000000..8324aa6f --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/nUpdate.WPFUpdateInstaller/App.xaml b/nUpdate.WPFUpdateInstaller/App.xaml new file mode 100644 index 00000000..4086e0ab --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/nUpdate.WPFUpdateInstaller/App.xaml.cs b/nUpdate.WPFUpdateInstaller/App.xaml.cs new file mode 100644 index 00000000..28377b99 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/App.xaml.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace nUpdate.WPFUpdateInstaller +{ + /// + /// Interaktionslogik für "App.xaml" + /// + public partial class App : Application + { + private void Application_Startup(object sender, StartupEventArgs e) + { + //MessageBox.Show("Huhu"); + Program.Main(e.Args); + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/InstallerServiceProvider.cs b/nUpdate.WPFUpdateInstaller/InstallerServiceProvider.cs new file mode 100644 index 00000000..efa4bfab --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/InstallerServiceProvider.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using nUpdate.UpdateInstaller.Client.GuiInterface; +using nUpdate.WPFUpdateInstaller; + + +[assembly: ServiceProvider(typeof(InstallerServiceProvider))] + +namespace nUpdate.WPFUpdateInstaller +{ + public class InstallerServiceProvider : IServiceProvider + { + private readonly Dictionary _services; + + public InstallerServiceProvider() + { + _services = new Dictionary(); + InitializeServices(); + } + + public object GetService(Type serviceType) + { + if (serviceType == null) + throw new ArgumentNullException(nameof(serviceType)); + return !_services.TryGetValue(serviceType, out var service) ? null : service; + } + + private void InitializeServices() + { + var application = new App(); + application.InitializeComponent(); + + _services.Add(typeof(IProgressReporter), new ProgressReporterService()); + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/MainWindow.xaml b/nUpdate.WPFUpdateInstaller/MainWindow.xaml new file mode 100644 index 00000000..af7b5159 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/MainWindow.xaml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/nUpdate.WPFUpdateInstaller/MainWindow.xaml.cs b/nUpdate.WPFUpdateInstaller/MainWindow.xaml.cs new file mode 100644 index 00000000..c5c52db6 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/MainWindow.xaml.cs @@ -0,0 +1,75 @@ +using System; +using System.IO; +using System.Windows; +using System.Windows.Media.Imaging; +using nUpdate.Internal.Core; +using nUpdate.UpdateInstaller.Client.GuiInterface; + +namespace nUpdate.WPFUpdateInstaller +{ + /// + /// Interaktionslogik für MainWindow.xaml + /// + public partial class MainWindow : IProgressReporter + { + + + public MainWindow() + { + InitializeComponent(); + } + + public void Initialize() + { + ShowDialog(); + using(MemoryStream memory = new MemoryStream()) + { + var bitmap = IconHelper.ExtractAssociatedIcon(Program.ApplicationExecutablePath).ToBitmap(); + bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Png); + memory.Position = 0; + BitmapImage bitmapImage = new BitmapImage(); + bitmapImage.BeginInit(); + bitmapImage.StreamSource = memory; + bitmapImage.CacheOption = BitmapCacheOption.OnLoad; + bitmapImage.EndInit(); + Icon = bitmapImage; + } + Title = Program.AppName; + copyingLabel.Text = Program.ExtractFilesText; + } + + + public void ReportUnpackingProgress(float progress, string currentFile) + { + Dispatcher.Invoke(() => + { + extractProgressBar.Value = (int) progress; + copyingLabel.Text = string.Format(Program.CopyingText, currentFile); + }); + } + + public void ReportOperationProgress(float progress, string currentOperation) + { + Dispatcher.Invoke(() => + { + extractProgressBar.Value = (int) progress; + copyingLabel.Text = $"{currentOperation}"; + }); + } + + public void Fail(Exception ex) + { + Dispatcher.Invoke(new Action(() => MessageBox.Show(ex.Message,"Error",MessageBoxButton.OK,MessageBoxImage.Error))); + } + + public void InitializingFail(Exception ex) + { + Dispatcher.Invoke(new Action(() => MessageBox.Show(ex.Message,"Initialisation Fail",MessageBoxButton.OK,MessageBoxImage.Error))); + } + + public void Terminate() + { + Dispatcher.Invoke(Close); + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/Program.cs b/nUpdate.WPFUpdateInstaller/Program.cs new file mode 100644 index 00000000..9c0e46d9 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Program.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Windows; +using nUpdate.Internal.Core.Operations; +using nUpdate.UpdateInstaller.Core; + +namespace nUpdate.WPFUpdateInstaller +{ + internal static class Program + { + /// + /// The program folder where the updated files should be copied to. + /// + public static string AimFolder { get; set; } + + /// + /// The path of the program's executable file. + /// + public static string ApplicationExecutablePath { get; set; } + + /// + /// The name of the program. + /// + public static string AppName { get; set; } + + /// + /// Gets or sets the arguments to handle over to the application. + /// + public static List Arguments { get; set; } + + /// + /// The text of the "Copying..."-label. + /// + public static string CopyingText { get; set; } + + /// + /// The path of the external GUI assembly. + /// + public static string ExternalGuiAssemblyPath { get; set; } + + /// + /// The text of the "Extracting files..."-label. + /// + public static string ExtractFilesText { get; set; } + + /// + /// The text of the file delete information. + /// + public static string FileDeletingOperationText { get; set; } + + /// + /// The text of the error that a file is currently being used by another program. + /// + public static string FileInUseError { get; set; } + + /// + /// The text of the file rename information. + /// + public static string FileRenamingOperationText { get; set; } + + /// + /// The caption of the initializing error message. + /// + public static string InitializingErrorCaption { get; set; } + + /// + /// Gets or sets a value indicating whether the host application has been closed, or not. + /// + public static bool IsHostApplicationClosed { get; set; } + + /// + /// The operations to perform. + /// + public static Dictionary> Operations { get; set; } + + /// + /// The paths of the package files. + /// + public static string[] PackageFilePaths { get; set; } + + /// + /// The text of the process start information. + /// + public static string ProcessStartOperationText { get; set; } + + /// + /// The text of the process stop information. + /// + public static string ProcessStopOperationText { get; set; } + + /// + /// The text of the registry name-value-pair value deleting information. + /// + public static string RegistryNameValuePairDeleteValueOperationText { get; set; } + + /// + /// The text of the registry name-value-pair value setting information. + /// + public static string RegistryNameValuePairSetValueOperationText { get; set; } + + /// + /// The text of the registry sub key creation information. + /// + public static string RegistrySubKeyCreateOperationText { get; set; } + + /// + /// The text of the registry sub key deletion information. + /// + public static string RegistrySubKeyDeleteOperationText { get; set; } + + /// + /// Gets or sets a value indicating whether the host application should be restarted, or not. + /// + public static bool RestartHostApplication { get; set; } + + /// + /// The text of the service start information. + /// + public static string ServiceStartOperationText { get; set; } + + /// + /// The text of the service stop information. + /// + public static string ServiceStopOperationText { get; set; } + + /// + /// The caption of the updating error message. + /// + public static string UpdatingErrorCaption { get; set; } + + private static void HandlerMethod(object sender, UnhandledExceptionEventArgs e) + { + if (e.ExceptionObject is ThreadAbortException) + return; + if (e.ExceptionObject is Exception exception) MessageBox.Show(exception.InnerException?.ToString() ?? exception.ToString()); + Application.Current.Shutdown(); + } + + /// + /// Der Haupteinstiegspunkt für die Anwendung. + /// + [STAThread] + internal static void Main(string[] args) + { + AppDomain.CurrentDomain.UnhandledException += HandlerMethod; + + if (args.Length != 1) + { + MessageBox.Show("Updating the application has failed."); + return; + } + + var appArguments = args[0].Split('|'); + + try + { + PackageFilePaths = appArguments[0].Split('%'); + AimFolder = appArguments[1]; + ApplicationExecutablePath = appArguments[2]; + AppName = appArguments[3]; + Operations = + Serializer.Deserialize>>( + Encoding.UTF8.GetString(Convert.FromBase64String(appArguments[4]))); + ExternalGuiAssemblyPath = appArguments[5]; + ExtractFilesText = appArguments[6]; + CopyingText = appArguments[7]; + FileDeletingOperationText = appArguments[8]; + FileRenamingOperationText = appArguments[9]; + RegistrySubKeyCreateOperationText = appArguments[10]; + RegistrySubKeyDeleteOperationText = appArguments[11]; + RegistryNameValuePairDeleteValueOperationText = appArguments[12]; + RegistryNameValuePairSetValueOperationText = appArguments[13]; + ProcessStartOperationText = appArguments[14]; + ProcessStopOperationText = appArguments[15]; + ServiceStartOperationText = appArguments[16]; + ServiceStopOperationText = appArguments[17]; + UpdatingErrorCaption = appArguments[18]; + InitializingErrorCaption = appArguments[19]; + Arguments = Serializer.Deserialize>( + Encoding.UTF8.GetString(Convert.FromBase64String(appArguments[20]))); + // Arguments-property can't be "null" as UpdateManager creates an instance of a List and handles that over + IsHostApplicationClosed = Convert.ToBoolean(appArguments[21]); + RestartHostApplication = Convert.ToBoolean(appArguments[22]); + FileInUseError = appArguments[23]; + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(),"Error",MessageBoxButton.OK,MessageBoxImage.Error); + } + + + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/ProgressReporterService.cs b/nUpdate.WPFUpdateInstaller/ProgressReporterService.cs new file mode 100644 index 00000000..a55d5bac --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/ProgressReporterService.cs @@ -0,0 +1,46 @@ +using nUpdate.UpdateInstaller.Client.GuiInterface; +using System; + + +namespace nUpdate.WPFUpdateInstaller +{ + public class ProgressReporterService : IProgressReporter + { + private readonly MainWindow _mainWindow; + + public ProgressReporterService() + { + _mainWindow = new MainWindow(); + } + + public void Fail(Exception ex) + { + _mainWindow.Fail(ex); + } + + public void Initialize() + { + _mainWindow.Initialize(); + } + + public void InitializingFail(Exception ex) + { + _mainWindow.InitializingFail(ex); + } + + public void ReportOperationProgress(float progress, string currentOperation) + { + _mainWindow.ReportOperationProgress(progress, currentOperation); + } + + public void ReportUnpackingProgress(float progress, string currentFile) + { + _mainWindow.ReportUnpackingProgress(progress, currentFile); + } + + public void Terminate() + { + _mainWindow.Terminate(); + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/Properties/AssemblyInfo.cs b/nUpdate.WPFUpdateInstaller/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..572a4723 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("WPFUpdateInstaller for nUpdate")] +[assembly: AssemblyDescription("Ein Installer mit WPF UI im Standarddesign")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("SPS")] +[assembly: AssemblyProduct("nUpdate.WPFUpdateInstaller")] +[assembly: AssemblyCopyright("Copyright © 2018 Sascha Patschka")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie +//ImCodeVerwendeteKultur in der .csproj-Datei +//in einer fest. Wenn Sie in den Quelldateien beispielsweise Deutsch +//(Deutschland) verwenden, legen Sie auf \"de-DE\" fest. Heben Sie dann die Auskommentierung +//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile, +//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher + //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, + // oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.) + ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs + //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, + // designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.) +)] + + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.1.0.0")] +[assembly: AssemblyFileVersion("0.1.0.0")] diff --git a/nUpdate.WPFUpdateInstaller/Properties/Resources.Designer.cs b/nUpdate.WPFUpdateInstaller/Properties/Resources.Designer.cs new file mode 100644 index 00000000..70b6543c --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion: 4.0.30319.42000 +// +// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn +// der Code neu generiert wird. +// +//------------------------------------------------------------------------------ + +namespace nUpdate.WPFUpdateInstaller.Properties +{ + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse + // über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("nUpdate.WPFUpdateInstaller.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/Properties/Resources.resx b/nUpdate.WPFUpdateInstaller/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/nUpdate.WPFUpdateInstaller/Properties/Settings.Designer.cs b/nUpdate.WPFUpdateInstaller/Properties/Settings.Designer.cs new file mode 100644 index 00000000..271a919b --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace nUpdate.WPFUpdateInstaller.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/nUpdate.WPFUpdateInstaller/Properties/Settings.settings b/nUpdate.WPFUpdateInstaller/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/nUpdate.WPFUpdateInstaller/Trade-Updater-Logo-v3.ico b/nUpdate.WPFUpdateInstaller/Trade-Updater-Logo-v3.ico new file mode 100644 index 0000000000000000000000000000000000000000..405788905cb9b1ce81c1845c283a5870546f8e04 GIT binary patch literal 31064 zcmeHw2Ut}(*X}xqf?~mn6|rC$9RU?lP&i-%QS4*KE&_sp^m-I&iuB&4_gR*2fzye z1O++aX$%0%UI60afa&}YJrE$07m&X*%nzV4l=5@J2YUm28iN_2V}J-Ki~~@ez?Bz) zXiWQBH9mS6&1TV&3oc0j8n62oe*C){8n8){W~>tcPP^A_iG3j)#Bo5{U&x zMMaoE*uOvsy+Xnt8b$wn?fC6`I83xN>fu=b95((=x)G+^8yg!N*>(PM!bWzT&Yp&` zIBwXEhV6}(8QIwz8_{2Ox}hO5*xS=z8a6aMU}(&d;G`cwhE5$i`PF)c?F}z*gKU0d zLqj#L%IxwC&3mTv+p8V;B5Y)+riNvs8pg%|z;9=0PUUIPo`$hPSYM9AFs&dre-I4{*c$G{W#e zS31px-=5a)FAm25sRtNTgysGxgn95G4dT)}fbo=?0pvQ+$B{Oku#k$7>XAr2Et=4A zPRFtc5_g;z;WgL&>T%A`8O_k`8)J+yb|W2i=o_h_hrXd2?IarJ_;&0*qG5X+ee^zH z$AjGgWMg6b8e%>=SZ!>1wO#1*V+T>6w^D5)im|Hu&wG3;z2gApj{*Z2_F#BL-o6#UXT`1VrpZ|G->` zP@4+%wYt4s59a+fHk%CMeX-L(TgIwMDkgqo%ijFLRV*Leh&QJ!<8!dzY4JJfrF(FNl z3F$}VA;WMfNVM+Xttu4?@`SgAie(4l#Bbkl>&R@eYR| z#bz%g+wOx>)(WU{+zLe}c0rk!HdJ^YhRZ&O;i|`eDD%~WDqkJA6$~;ckpI)Fz&U8_Dia zm+1|xsA8~=ItNFi&w_0XUdNt;Ej= zP*DeI<@X??st&R%Y9YP)0c2l&0L9lHLeb49P=5O%l-+v)WNj%B-77#`Yk{OZ0dnPC z*Yj{Dh=DS!0d>#;J8*#rNQQGz1rOjIyclOM;o#nC|AmyU)@x(Zj_ z@&j<o?b&A7J0IwFm#U@4Kzr;=A+zKKr(9+q?PqZ2tkbqnm&KjvsKUJ@{33s&d>; z&J}t+9Y$iXn_q2Dr`x$_C+CV@eEpN&rLWrFy?gf{^>F)pIE>zpzuo-m`_=GgzuImj z`ip;hIvPak!GDnLc1g_N$GJMF-s$)By7@KK)$w=VY@Xf=4&bE*{(kM$)zve*>hDh7 zvDv*CjNa0=?7+AFbm#Bs>Fs%3suw?lEkHwGIB!pH8q~0z>e! zo8L=r`tV@_RH7e0e;>YShx|iAPSfA6AH2Y43)gu$SXv$)P6bdx)7;!TGz{Ho?$2rV zRY*5~Af{T47&vesO7zza3rnEvU5*_}2s_<_KOrH3HF5~$7wCTk0|_Z987b6HNX8$| z->`1};N;}wlOu5lg%SgfAj_Ha=yH=OGyZT~LQnqGR7c?ug)bNDx(4i=7*TzV9Oa}$5M%L zy1~K0p=oJJNuhYr!xi`7FANPmF>@?OKr1vfG$svQ7+!E3y$b8W4iJ{;BsP9LTS7h} zEG#h#U1DNbkDr1s`12DY6(>!cNF{zVNK8)7$~u#k%IRG?An^AKb|_6wHk^zCR6_h{ za%$e0Gr6fL$=I#QoIhv2((z0dCmo8np1l?kE3QXg#`7yjg6eT86iO!}PJ&HX<=(v^q2EW_XDJU_CO3>JI)^T7)DVs=hW z;OcS$PPn+hDR(z;@$|&Kq8}tj1%k8xX>bgT1DDfD;2f3=&Jii#6rBl2BXV&cSBU$z z0yq_O23#Xkz%4QZ+@o>-7n=b-aT(wnp9yZb|MN-6hTx=Z2#bt>u;eTVOU;4H(I=rg z))6kpyFy)>8{En8h1x7X_P&r6jdhB{ePJB#3uDfKO~M8Cp3pYoBG@Nf0>^|ha8E2| z?+G1KFTqLN6FMU~Wme(-?-ICXRDvgxZ&npJWmJPZ?gPD$T(fZxhT*4jmp2dPSEBqLls86sCzKCI`81R-_iTz%GnKf?%YEB1IS(5*n$E-@ zw%5(dl;@^sNzcXF& z?_6iPva*trlEQLjCC-mhr?0HUNq1L9w`!vJ3gvCe$}8DF+t`1V-P!eXU#Yuob#Dfb z#8%xe-O5h+BS+Ts;bSm*&E9_G$PokfFJ7SQls~d|GJjt_K0e;rdPW9@+#f?DgU<8~ zQw8asg^zcVilG^G7VKX$LoZJGJ5<*R;*O)Q*yb(fRu&c(Nc7j-f|KrLVYN$?Zer$I z9Y=e(ofX${)2-}wi}vp?&~KidgR`fnGuPH@QsbFJJY=^cK$YE`0(Ki%q@HMv6(*>8AeI7PM$h-(!t)&!46L?T)NW1Y5h21W^ki|} zu>cD67C`Qig-~E93q@!L_tyUdf($o6jP7Dc&|3^C21_B`bQOe}ZG$NDZE)Ir2c%nW z06!}=IBOygPRETQ-pK$?pE8ATCo_m~vw$+|)o{g29ke|;_U9vhsi2Q!fHnjZTsN49 zWP({(9@?1m!S;kbxHz8xmTxrJ1}A_=NI3Y0$HJ-5RJKjn71shTF`3|*a0bew9pP@A zEgX$G3wDWUC-*Aa zYOh0RP8me!UWCxXt7xme4l!r1Kvd~nh%LqEcIj>Cmkc0K1uziTnj&NfEFu!HjjRO| zq6-J^jZgRCv3xe z8fTAWCtN4Q;5q?KoaE|YAh#rd+*=Feu`ZC8u0YB9=|-cGEGud`7pMiDAWAv&Da(#dcyi4q^42VGI$eMI47= z6=B|9JQA`B3i1lF3K(8Hw{P#^3zn={tb{)pUN1eO&)6mF)~%op!yD!a@r{;Sx>P}4 zUY_#9{E-4#MXx zeuMFyH-Tmz!)^qY9yX{lv)$dtmN8t1>DceL#hX_ek7TBmJ@r{K|Mof2E$$PD$&mg_ zo}9it+&z1wlHnQ=2eqnM`=qYKmo9pqc;RwcFDVu)an$3KK9aL9DGQh6?X1wRx%nn2 z=xuCbY+_BqnT<`Y4hPP}#%UAn+l8y|?abeb_vUWbW2nC1SU~`uUJMWs|Dg-!lFd5g z{<7)9NfT0QquaJEepcqTaGRItlZ^N+(rdHjZyO(QbGhKNQo~WmL(;0hm+OF=<$;s@ z)8#&|Q_IiWAAep$uwjP2zo>_7sZzYeboZM+9)~1v>B*T{+zpfwIJ`@i1qv4)8nliX zQnoK_?4(m=ledg@cONiW_^@JO+^XOD^nD`jyKsg1j1Xm;RGdWDdm8bmqWRHY>jXHxgq*U&vXxvW~PRj6^0QLNSe_k?rQ5il{?4anmg#Q1fPIsQHe9;qKx4Uo4OnwKSa&D7yJ(i^`+xCyzQy*QFm; zS_*PUfi*BI@ot@mN4VWJv)2A2G!9;G*?yztfbNWw3cx(I`(a$iyPeNomA-hSp3igl zZ197EL*km@yewe$nc)y@=^z~(^}zD9blpsCezYE#D=C>jdE)kZyWA`Dz>jO5`IkPF zuYK_mPhks^U61qf7cCwkSG#V`!uhvmUYXST+p#fkWmZMeqyC(hccaC$e8H;lX;TY6 zX0O^~2TO`|lEf4Plg7`eb4VJW_A&eSa|0RnMWF_*{tlB9Dl6p!gU4&~ziPX(<&V8p z{wxUXKdy0VpFV~&%IbWAN`8AUS$?`QD|yG8bFanU9!psauKSCv`Nlk1qGx1!(OEjU z>73D+to&PZKD>}%iD^%sz~D*d&yQa26+Z4ojDmseglzMgq;pxLvD`Q36CHwsdK>rS zu^%Q-Gk$Zzq3EX~ugq^e)7|*YOi=T_@&$=)4l)f|nh%e`L|eBunaLBSBBo@IdYgOe zPU_9!3dW-EwSyV8dLM{Ebs?K{e z$7OxIb?VX782_VNgU)D9>f2Y4)#tjdFeyS(xn}WG!818n68@V<@}Dw5M8z z$wqIo1%-1D55GwqHFL%ySCx+E*IPcPGzK<*me}TeSM{~wL#db6S3X&TLP;Cnr#DXL z!$lQtvQy%6c0|w^Tj@IafW*BY=c$T4%oNHEY(DjQSJ-$# zs0)ADan)^TthME6otDG{L1D%T7Y;4bHcNR`+OTxIW2?Lf+~1OH*f4AV^Fl`@1snD3 zhTE!hUK))O* zW!Ove-1nw~afrP+clbJAZoBwqVV-*TKdXZsWpm~7qCWDh?CxNpYk2?apDu-hRJ^Mu z@Fwfr3ld%8Wq7Ry8zku5E8U9BN3#TTBbpPMinGTbuqd-&Fmy`Kwtfn5*_%^X?O&`E zn3NT8ZOI9}hcb@2yErYYd$;n_=UA-m>Y3TZ%Flk--P1v@Zs?3RCdopY{kIG* zl3NUk3qJcNOnvy?*!tQ>^5LFo<5`)Hw?}E)wN`uzStwd?!zZCsOU$snIsdt}u3Uew zEZ^qaRf@myWSilT-rlc1p{{LTUx)JCd+8}Jv!q-KPG?7zw2Rk9Zd*IkJxZ8M{l$W_ zWO;Y7+S)4a7UnE`KJE3{K-g+1RpT+xGeG41YtdXolYMpl^-|+jN{XF``Z!|Mn<>G5 z_apf08=vQeUR`lbs~01A@rm=1_mck%x`~w-ex#al(BxItUB7*9EyGn?#};l-npZea zOJDkgK}YEHd;4x1j0;cPGrwUGzlfrn<^fB+8(tw{$-RuQ?sund^SG3L<;7Ay7Z>htfNq&cuDWoDytj~zgDj{>luu( z?H@CjO<%S(AhAwr?9^98XWWZ1mlh;HiLIP^-21M+`a>%XQ?+6(VDKutT~r?4H*bjk z*gqa9L!n9PmWe4hRBGys&e*=5FTG&VU{~qF#69-$enw6!6XxB2^^AwXdvYQx@C5wP zXPn)}<{?Gp+wR^Q+jiITxrW~J?H@00D2n>HaDMP=cgr_zbHYRCE5)Nk)tdJ@ZvrAT zrH?t4^sD8sf1VV4XrkK(Yb*U`l2CVf^6BUg8xNa#w+-WG_1b6hc_{EG4xGB-T1sek!lwzWvy+ED zu6|urD>L=^{P-dp*s7|nJ?+H#)!FLSQ%Ibe#`4Is8=pP9AQNF)eI-b4u{>k)Tps(y zFw;eGPvxm#)g#lM&+k`S##pXuxo47t(x6=Ry&oIYA}_I$Z?xoC)lQM?%~Q|2Am>A5 z;nvIT#mrf}I?aW_A!ejc)T`jvv!>R`iBDQII8<7$X|;*&vH138Uk~2eHQS$$WUl+& z+qmL>J}eewN$$JqI!#&SQTwi4^*r+%^*#*Qaw6x<`)5WCHLhyTJ0+yY*-G!65qr3@ z-KE0!v20Giz9KP$nf-Zo+0Im+p=M>_TRmN&cA>4viPz!FDh@9NaJoGE`y$;j1G zyZm;`iuR;??(Yr!wJqI!?;5#3P7zH=eA%&G1PT;~nA{1didP>XJ#f;o;YH<_S4rH) zc35$jDPf}1@bRT@!1e;oCx>|NeGtowy?c4e8V2K?&CID;bML=@BPn0Hdr1h-{6DV_ z+Q#o7Q}Eud@u`hQqkGAKN$cAJZ(iGB#A{mA&>&=9Zz}V2-Sz{sK&wgXsobd1EO_nu z{9xXrj;&2^k|&5W((`WBMw_>ct!s9FaDM2}vXc!rj_iE)?Dwd)52u`iL{AOPUp0-N zCFilKz`SytX14j(HM@A4ADtw(;?1)kjj@{Dw&8Z`wYAIHOt4x77qnV}EoCi6TQqr?h zo_uOjTOWOuV?;Dyh^dQ|~wiCJO7HoWyC_=`sMbvqQ;l*5;8w$-J9=iu!dwIZeNiP~*t z?+llV-oC20>ZQTRPoGB>=#TS%AQ#~R>5DBNsXcksi!p!s#Ky)2!G*zb)<+8j>Q4#H zJG`O5hApYGe7JhYBmF?5=9O*z>wJl<@4^fBB*`)+ES%I3(AvV6eMbJG5hJhT?9-tV z6D5tW+*D2&T80OwPb(hCyr2H$J+FGfn<`cPokIMq!+Xk%-vm5qs}*@12dZ@$CJw_U z(L$bVnmQ$7vdc36w);~o?|;rIzmwhP!K94#$9F%dm}c~CWP$N=)ek~OiBFzhdC<|X zzU6YF<@@F3NzeI13_?w(sF_)49kcl4H?Q&b3oTWxV+;HBWtuewe|lS_z=XGJ3I-&6 z@OpnlyjqG;J;rLt)#O)Wtn^IY-kVYOcD=!izLi7dBsZxwd_MoG(*15!>KKLsw1t`f z?p3+1qiBYFsr>s@ko3mXJfm^aD3948RppmM zLc`be4H?Wjv>v=CK+|M*nP(Qe7YXt8vKU(Qs!B^^g07KN$3c^aE)!W!ZJKpj?GxAB zR~8GN?owFmmos&JDPuF<8msrrzp{4ghIyy#up{{E>k~`Ih;A{oc;xIg^#y;(q*j|} z5tUNg|4GMx6x2r7wIomx;rqbwPli6 z*1b!+86w_Q4$E8Oq(l?N+(CpX=02())M?iKeb zOSp`mRrSEKLu2;s3&y-_wo2UmvpqYKSMkNk*8$M>Mb@RakJhz(4 zmwTU|tS(eupCz0><#$lAYc&nCE)~izd91`7)vsU3=1Hsx{2~X3EV-ZhJkgG4!N`m2 zKxT4T?ii~-Zy8SB#`7+ydDL62HrDoSC2ti%uC6%37$!74F4E4{?ofu@Edhq{0E?~F z2}bQZM5Op71{b~EF$mWvUdE=6oQ3Z?MfMhatiGuIoYcX^zD5nN-5q=HvdmekoAP;N zQMJqEy^w!&XZ~miPG&?mo4^*4TvZyl8vT^Z=LeZ2rK2K)?ZfI|` zxyr>INc){}DYjzu3?U)S6|4!lJiBC*hkA{4XtfltKEin2-qJKiskW7BZ29NbM(s@z zQ?p*gPR(E4)<5n*VU;njc;%lKO+4A>W*S~`-LHN*VP}U^(rSUm?O+zv5frt$U1D#m zg!K@nOzAV}oec>q$HWZTHB*M+;k zov#dLJyi%9do1?DWfkSbGc6XGJki33KU*s4I%s@utlq!vO_NcIS-_|@iYw@{=wVH% z$t+e~!}h}s)7@tozidABIA6PcM%^*tw_|qL7*|zfl}X-s{Wdyoq|DJRcRdO!1y4L~NCkOKGvW{}9nrQWQ_L&x&rGde7>K?3G-c%7P3b~~k8*i%Y zxj8Q)t9>!Dsyyb^Ie$H-;ux`$yY8Ab%R}R7A2a~$bax3N)mK$!r`^AQ!^m)2!sv#A z!9)9)=?GRUS6aS1sv)h%<1=@EzqER(H@+^DSi4kSZP_xi(vA0QbXeS9G{C-ZH0}GZtpN&`a-?6$YRp2VW@l@6a9pWv1ySjSW}~fD`X+&|hWZHXdf1=Mm0ylrEZF|;mhfdyR#5+@{1xWyP4mQM z`-mG}T~3Q@d#BZ@no;juf%TTjMhZ^QJm&4QLQ!`#8QbuutEp-QR}H?G}*xudq_5E(+|bU1Hc2C09_@Hj`EC_~&+8-0hkqcMLtG41%*}1+JIdiMAg3 zKj4s9T}EMzlvi(F&^wCl)?Cn*2I|ct-@f`iy_0*Q80(IyVO4b4B-W#4n|Pj9?w731 z@@QVrFx~3rZWKExmt=WiB74~1QZ4Wg(zMD>GE$$-$(be%Nv&PT~H|zMt0dL|X&X&q?5A-4+%ca+v`^Xc^1o=Y{KZ0OutYd9rNNZryCL zeKS2icep5A9Ad(7OxWAB&A?QYIa(HTj?c{q+-^4*MxOo<`Z;UF1Q_#Jpvd`Ll}XjI zhiW4tC*kKW`*2J!m06Fp`b04n<(W$zo^V^i?9Rt!_f=00fyaU-j1A6eO=chE%q1tW z#?HrmmVoAcRsYe9?FTYfF|(g*Xs)Ms+r^k>B-M>3ASYt&%$gv+QO}fr_u*p7r zEVJgi3KjY2K2qFfHTZT*4=JK8E`?kH->Da=!FIFeHqe{Lpca{02nrDXYz1O?8?T(7d-yu0pov}twRM4y3 zC?S6Dn-6)4mJ2eTEpJ@j>j5uQ$-9>+A74wJ`KAn=U1;n)`q+7ds}OVls#9Ft@BWB8}G@7NKm{s8k*+V!XO(dRWSIU+6Rd3eM{b_^VOPibVwHB(dbgp{Ermc=-) zT)N<>TYK~9wT)OvLZ#Hs!s?jI{pYr%JQH$0`d0hKT;7lgGmbtV&@>105N+g{mJq9V zZ;EG8;kZ%bbIwJXXQWtH1Uo(!@+=M#M&@126+DxkFnwONy^^d1&R{hHva<;9$x97IV8E#C9$YkA`+~>NHl>!Kdc(JS; zR?9c`l3{{lNKN0ihtWz4>gyYKJTko6_GXp0_-npQ?1eoM5tg5ppD&)Xv1Q1+0~~dn#JiGZrt7RpKw=Tlb_$!def?2DS0>@Y`-!pffXSZ1TG`u3}YZ z8FKX!YlT?bH#}CeI^?=-V02j)V^znt#Mjenr@=fITRYl+Rnej$Rx43{Gj`MDN4j#Y zkL+tI|8P~)U(Rzp-p9bTR2wDId8Nz zPXH0+h^M7TdKMK_EHBsEiy0mL+wU83!UX;$k9$`y60cXY0{-E9FJ0QeR*6B+%kUQ8 zWK|g4&JfwK!P`47l3Rz@uRf&7!SNF*!-vPJ_pC)&R!vn02>zz=+l;Q3NpJeI`Sy5F zSgN(rQ)4vhD?%$crI9E5`n@;oLLXglT+6NrFE&yUHj>tk9hS5;B?``Ll^lRI5yV;h ze5DGf-eY9`=!&#)8pw|HS+hRO&lcOl{-Qv=xmhl|&ev;h# zM_;H}WT&OYDN()6_=f&tUOdnrNGrp{_UTVAj;rFgneXtR^9N56xkrvU>uyQc-T9w>7Yw2`8SbTANf4Kg- zzUfVx?(yW`L|UGS#PA2(U)MLI3BQmg|0dG*N+O0qKQ?}j_-8iZ*WKjbL^?jHSpU2q z8vptMSxxw5I{7z|o?qGz*WVy8y9vLDApa)9uQQ0z54OKyP)-xRk%{;FzlpMlQAqv| zjUS_sGfnsv3i)?Y&JWk$_;hZQ$>}rX?+8&Eh-q-v-=_ba+CX0vy@--h~_~M z9pf*2U(5Z9uz7d^_IJS#jeoQ7f+nk|BGQu(Rf8Zh2|;8P61Zy?3E1^J!7tdzspBSu z6@KOm-kx&5>e@20=!ffX9#PbUZ*mhZSx4j$L{K3?d*_hg-Lps#CDeiHfe10g$<~x0 zN=O$!SMFE(tmv~pTz`wm;wJpEj8H-Z6M|?jBxL^_f?o%c5G1MtR}XeypbpMOpmIbFd(Y z5JT*eF8)%oNhtl{`X7tTZ$d;M5~0N;h+sqz$%sVkm+01GFGr8l*eBfn2-+`65G9Eq zN)bV19)bur#3AL$nR|r!p!Dmk^zZAc_=;Iv_!!P=~Me2*rEb z!{5J)pDXt(eMBZA=HbOZH2#mrmo_0X5#bUdE0JieMFhY6A^1fyTMw=d^xg==``a@h zpo^c%xnx%p&)lnD5RK#J`Ln)bdgV{l|6-F%_7$uHhY;XP}byj<{IIWPfRL_)0QRi>T@_c zpdM@;I{O3B%Lt-nb@5ZVfT9|L2v8*B3Ww-5jpOF|vp(%Fiys_6wuzUTJo0W3F8Rf! z5&SZp;8$Y=5!Oij!A?E6eS!5yB(E-hDu)PH1QD%BVkgmS8pqA^XMIH1!gbb=v*YUljt>#;b#e#5H*b?>BtiNQjZ{FK$jkD9Z;88jd=u7*t+xOx6heDkp4RM*TqeE(#>vWhJmiAZY|Hqp2S=p;mZBPqIaB<+wS zLG-=9=n=0eMG!r%i=WCNDjV@kyG*<@aUR0C1JT#maojwA);}I~zRfzSL?1s2V*F$M z(SBiB7LEUrX)cW zMB?S^&*tUIoJy%6h-g5(aW17kB^t*~|5+dF6#Bif!>#|xoN56?Tu56kIi?W#k+`H>B$S_$D~@}= zyz9g__Zr)$*EEis{*(SCmy}YW@71|yx^q^Q2qGKSxMW=+h=52CeUjwq%_oSC`At32 z^yCPlJra~5REEx#{slJ)A|JASdQIbK+D}ntb-QzBwIzOn&(pJh-@CRdEaY{|x#ot{ z;huAiAPOZZI3i6D*^}g<4u8=D#}guW5=5Y6*V7Z*JFvKh_!r(}`}CT|{p@oWpIgt| z^KQ=mUVXon?v{UD!6WxZ1ASH^(j`H(QBrth0l_b`|Dp$HOi7Vcla&O~HVL9vl90k{ z1W_kRaPduoXp;odD2XTD4;;d^-I?!`$C)dMzNr=TE6AUA0q1H4c;(&H^vu7(^2;ba znrFG{Lb1Ly!LP~xqDRkr1Cdxss;LS=v{QoUr$~ngBA^mPLnTqR9E!A2Cy0>Brtsqj z2_-~LC85?FLKIbkh^i#SWOH)p_E`cyUHNYal;|&9Qeq(e@~nY0Ve5f?LHi>g`{SEq ziaS^R&2xjj9{Fl5^4ImPcxlp3F+6|&&t0aLBHuX!XQxgzE9dm}2)w_dVV{-%4?weLty3 z%mIngq{F|a{kc6@V!UwT1w)zi^M=xGs0%4U>KapD-5Xtf@i)(nZ?36&jw!WYU;oa2 z7+-269dh1C<`WX(_C=Q-be{UEFM8hNJ=Y>>xTa#S3vq4Oy}reD73zU|reEIv+c%jAxBbl4nAMC#9(t~|(NOR_?Z|Q;e27AuM@szQD6`_*^VC zkQK%Ho1h*Su`k|n?~Sg$_-ahix$29);LcNAJ$kIuagO@0)}PxKR#w1s)@0%E^F|9~ z&l|`bK4&QHiF(AG)nAZ+DBNr+)L)Q_&%P|2Z?p1rq_R*4HsQK33)h8NxVFv0zR1cr zG&d_vYi@e#p}EPpXR-@D@@wXQZe4%GC#X-wfjPaeTm9CDOLYD%w36fhChf%d9z=OF zwI=iVVje$I-v7-!6sds_%f9tgiSeEOp#SAQ>iMoyU$!r2*_VTa_?2&E*_VTe*zJ=d z6vX&0zrHg}GotY{BkEH@>Qm@M>JwI{PZ1DlnA7g`JuML=CKA5-g@5rqtzWX@U}yEq z{}=`5GLQIYvHsgc%lTI2X}O4kNDvM2zeY5FTF$r2&tcJbQ#9P-{%b_@KjNSB&GHQb zb6AM{Na#B?|1F~V({jG0KaJP*O(Tdr`ClWN|KF95#⪚7 z2qKIUL_{TsZu(2kZiG=y|Sn>{)_nssxc|yUvx_=a_r(JQ>f#|C94%nm;Y)TjiUD6|#=w**2oM z5=5URUFUf8EVc7I6;W{sBFv(_vzXW>mi{yykH3KLhWvf`h#E@}?Uo>-F8geheZGt5 ziS$gAo=wy9P(;Tih&uZ}It!)ezh+^@-_+j%>xGE41QBToqS&&}XxZm!Jfmdgc&=X@*u)p zm#v3h)41;u&HwMqFJU>MosXW$c*SKBL?0%Ia@=(;N82LclsP+{@*wIhL4;d2(Q6v_ zJ)-$rM3j6}f2*hx7Cpa1lwE?zza(B)p1oJ>c|I8AWXVpaJfT=7qU^GXUembm5zU{L z1K)7wp+#1<31!4Sshl8UF-gGkxwahc8K0knDLb9=AUZG!DnNT861}Ez-y@noo&$Ze z{9_SkHy?{U*Np$+h9Gh>f&|O6_s`tDGu<~MvNNISY#z*uo+H+5-@In;A}&2`VJB#79}wg+=ZqzRAk$+=+oYyglVgu=mT$?PlkJGaXL{IOmhYb7tD-F-UQt%uvNtek! z501w(;kd)HBo@!+qqSs76ux6X-}8t#D0LD6;=fxyw|yut+A36#UUKb`J?+BO*7CKj zhr#usz|r79_=Lt+L@(8j}CVI(7b z!FZwKd4mNSXAKq@p&iS(Ku^l7KySWPuC5dd?N+R;!;-8lElCz4@Uqem&9h3?lr&4# zkX-z;{m(7;zv)wJLD7Hs-xj|mU;pKQUmS#Hi$Q3z7=&#w2u&7)5N>%8Et}dYs98b; ziEF1|eq)BF-(cb1b&jr2y5f(Lo`1$tJ>NpayG0WTexsx9otlFC>!u$iO^<{I9iPl) zTzNgejI5vh{-R0WKUv=YM?17T=F;G7By2lD9jZmW4>rBy9g|_B)F7-9$ul zCWy}b&G#y86H1$`BF}co+s74UA>uQ>11ZOTXAqI638Fm{SA5>N;(KUczgu@QwW7%? zrd!@2wIU0Vp$Vc@v)84FPK|4?%LLJ!*+kEAd#*uoz1d_PbAeMneq(k#t~3^rrU@cl zv)>s)lxu>h(uA&IDB=2t*!CcsxY7?tV=li*?mUulzw$0t}X5&qBi>(mTIt+Ao?{yq-s3Jz5eAHI-Zf^nt`I! zcb$>bwToAF<<`vO+tYBqX{XO*MC&Gq$W0K5n;;@L2|Z;>5S^O@pEPa`bTIhlf6}36 zRrpLR#xvUv`dp>?&^eRNmvqji^EIx!TVf7MsBkp@>)$ftg;UNONe7hZOFzPV{>;;p z`jm5cUQ?#FWK-IqxlKtLbKWPY&sP4cWOvLRS4F<_dJCrEGgiJxPi86BLor)RQW5K+ jn4&pnX{MI=@Gfq~6r3QwPb}nNQ?DsdkMs_y8R`E3n8#p+ literal 0 HcmV?d00001 diff --git a/nUpdate.WPFUpdateInstaller/nUpdate.WPFUpdateInstaller.csproj b/nUpdate.WPFUpdateInstaller/nUpdate.WPFUpdateInstaller.csproj new file mode 100644 index 00000000..fd50d2e6 --- /dev/null +++ b/nUpdate.WPFUpdateInstaller/nUpdate.WPFUpdateInstaller.csproj @@ -0,0 +1,124 @@ + + + + + Debug + AnyCPU + {E2E8A9EA-9A0D-4C3C-8DFE-30339FCE1810} + Library + nUpdate.WPFUpdateInstaller + nUpdate.WPFUpdateInstaller + v4.6 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + Trade-Updater-Logo-v3.ico + + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + + MainWindow.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + {5E63208A-8F06-4B99-A41D-F469BE4CFD00} + nUpdate.UpdateInstaller.Client.GuiInterface + + + {EFB71D69-EBF9-4F60-B776-DE443730A3DD} + nUpdate.Internal + + + {2BBC927A-B18C-4BFE-8325-D9387F217095} + nUpdate.UpdateInstaller + + + + + + + \ No newline at end of file diff --git a/nUpdate.WPFUserInterface.Test/App.config b/nUpdate.WPFUserInterface.Test/App.config new file mode 100644 index 00000000..8324aa6f --- /dev/null +++ b/nUpdate.WPFUserInterface.Test/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/nUpdate.WPFUserInterface.Test/App.xaml b/nUpdate.WPFUserInterface.Test/App.xaml new file mode 100644 index 00000000..ab2c48ce --- /dev/null +++ b/nUpdate.WPFUserInterface.Test/App.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/nUpdate.WPFUserInterface.Test/App.xaml.cs b/nUpdate.WPFUserInterface.Test/App.xaml.cs new file mode 100644 index 00000000..7e7f1785 --- /dev/null +++ b/nUpdate.WPFUserInterface.Test/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace nUpdate.WPFUserInterface.Test +{ + /// + /// Interaktionslogik für "App.xaml" + /// + public partial class App : Application + { + } +} diff --git a/nUpdate.WPFUserInterface.Test/MainWindow.xaml b/nUpdate.WPFUserInterface.Test/MainWindow.xaml new file mode 100644 index 00000000..ef7727e2 --- /dev/null +++ b/nUpdate.WPFUserInterface.Test/MainWindow.xaml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/nUpdate.WPFUserInterface/UI/UserControls/uclChangelogView.xaml.cs b/nUpdate.WPFUserInterface/UI/UserControls/uclChangelogView.xaml.cs new file mode 100644 index 00000000..49c8f1bf --- /dev/null +++ b/nUpdate.WPFUserInterface/UI/UserControls/uclChangelogView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace nUpdate.WPFUserInterface.UI.UserControls +{ + /// + /// Interaktionslogik für uclChangelogView.xaml + /// + public partial class uclChangelogView : UserControl + { + public uclChangelogView() + { + InitializeComponent(); + } + } +} diff --git a/nUpdate.WPFUserInterface/UI/UserControls/uclDownloadUpdate.xaml b/nUpdate.WPFUserInterface/UI/UserControls/uclDownloadUpdate.xaml new file mode 100644 index 00000000..164fd9d1 --- /dev/null +++ b/nUpdate.WPFUserInterface/UI/UserControls/uclDownloadUpdate.xaml @@ -0,0 +1,35 @@ + + + + + + +