Willkommen bei nUpdate,
nUpdate ist ein umfangreiches Updatesystem für .NET-Anwendungen, mit dem man seine Programme automatisiert und bequem aktualisieren kann. Die Updatepakete werden hierbei mit SHA512-Hashes und 8192 Bit starken RSA-Schlüsselpaaren signiert. Damit ist eine Absicherung gegen das Einschleusen von Malware durch einen Angreifer und gleichzeitig eine Integritätsprüfung möglich.
Aktuelle Version:
v4.0.0
Features:
Web:
nupdate.net
GitHub
Verwendete Programmiersprachen und IDE:
C#, PHP und SQL; Visual Studio 2022 Community
Lizenz:
OpenSource, MIT
Systemanforderungen:
Systemveränderungen:
Klassendiagramme:
Bekannte Probleme:
Eigene Benutzeroberfläche im nUpdate UpdateInstaller
Es muss ein neues Projekt erstellt werden, Typ "Klassenbibiliothek". Dieses muss das mitgelieferte nUpdate.Client.GuiInterface referenzieren und das
Implementiert alle Methoden,
Beispielsweise könnte das so aussehen (das ist der integrierte Dialog im nUpdate UpdateInstaller):
Dann braucht Ihr einen Service, z. B. so:
... und dann noch einen ServiceProvider, Beispiel wieder der integrierte:
[b]Danksagung:
Danke an @nafets für das Icon.
Danke an @Artentus für den ExplorerNavigationButton.
Download:
Neueste Versionen: Auf GitHub
NuGet):
Grüße
nUpdate ist ein umfangreiches Updatesystem für .NET-Anwendungen, mit dem man seine Programme automatisiert und bequem aktualisieren kann. Die Updatepakete werden hierbei mit SHA512-Hashes und 8192 Bit starken RSA-Schlüsselpaaren signiert. Damit ist eine Absicherung gegen das Einschleusen von Malware durch einen Angreifer und gleichzeitig eine Integritätsprüfung möglich.
Aktuelle Version:
v4.0.0
Features:
- Erstellung von Updatepaketen mit den regulären Einstellungen (Version, Beschreibung, Änderungen, zu ersetzende Dateien, ...) und erweiterten Einstellungen (notwendiges Update, Architektur, nicht unterstützte Versionen, ...).
- Update Operations für flexibles Ausführen von Operationen während der Updateinstallation (Dateien löschen oder umbenennen, Prozesse oder Dienste starten, Zugriff auf die Registry oder Ausführen von C#-Skripten für komplett eigene Operationen)
- Vollständige Anpassungsmöglichkeit der Benutzeroberfläche beim Client möglich, gewährleistet durch ServiceProvider, Schnittstellen und dem EAP bzw. TAP
- Design im Aero-Stil, das auch auf höheren Systemen noch gut aussieht und sich gut integriert
- Integrierte Benutzeroberfläche in der Bibliothek; Erstellung eigener Oberflächen ist dennoch möglich
- Paketverwaltung und Fernwartung: Hinzufügen, Bearbeiten und Löschen von Paketen
- Paket-Log verfügbar
- Statistiken verfügbar, um in einer Diagrammansicht die verschiedenen Downloads der Pakete zu erfassen und auszuwerten
- Unterstützung sehr großer Pakete (bis 18.446.744.073.709.551.616 Bytes :P)
- Signierung der Pakete für den Schutz vor Angreifern und der Einschleusung von Malware (auch bei kompromittierten Servern)
- Flexible Updatekonfiguration, die jederzeit durch das einfache JSON-Format angepasst werden kann
- Mehrere Sprachen in der Bibliothek verfügbar: Deutsch, Englisch und Französisch
- ...
Web:
nupdate.net
GitHub
Verwendete Programmiersprachen und IDE:
C#, PHP und SQL; Visual Studio 2022 Community
Lizenz:
OpenSource, MIT
Systemanforderungen:
- .NET 4.6.1, Windows 7, 8/8.1, 10 und eine .NET Standard 2.0-kompatible .NET-Version für die
nUpdate
-Bibliothek - FTP-Server, Webspace
- optional: MySQL-Datenbank und PHP
Systemveränderungen:
- Registryeintrag für die ".nupdproj"-Extension in der Administration (optional)
Klassendiagramme:
Bekannte Probleme:
- Die Statistikerfassung ist teils noch etwas verbuggt, wenn man Daten diesbezüglich im Projekt ändert
- Generell sind die Statistiken noch in einem Beta-Zustand und nicht ausgereift
- Das Bearbeiten von Projekten führt manchmal noch zu Problemen
Es muss ein neues Projekt erstellt werden, Typ "Klassenbibiliothek". Dieses muss das mitgelieferte nUpdate.Client.GuiInterface referenzieren und das
IProgressReporter
-Interface implementieren sowie dann einen IServiceProvider
.Implementiert alle Methoden,
InitializingFail
kann theoretisch leer bleiben, weil bei einem Fehler beim Initialisieren zu 95% eh nicht mit der angegebenen Form gearbeitet werden kann, ihr könnt es aber sicherheitshalber mal machen.Beispielsweise könnte das so aussehen (das ist der integrierte Dialog im nUpdate UpdateInstaller):
C#-Quellcode
- public partial class MainForm : Form, IProgressReporter
- {
- private bool _allowCancel;
- private bool _dataSet;
- public MainForm()
- {
- InitializeComponent();
- }
- public void Initialize()
- {
- Icon = Icon.ExtractAssociatedIcon(Program.ApplicationExecutablePath);
- Text = Program.AppName;
- copyingLabel.Text = Program.ExtractFilesText;
- ShowDialog(); // We currently only have an instance, so we show the form as a modal dialog now.
- }
- public void ReportUnpackingProgress(float percentage, string currentFile)
- {
- Invoke(new Action(() =>
- {
- if (!_dataSet)
- {
- extractProgressBar.Style = ProgressBarStyle.Blocks;
- percentageLabel.Visible = true;
- _dataSet = true;
- }
- extractProgressBar.Value = (int) percentage;
- copyingLabel.Text = String.Format(Program.CopyingText, currentFile);
- percentageLabel.Text = String.Format("{0}%", Math.Round(percentage, 1));
- }));
- }
- public void ReportOperationProgress(float percentage, string currentOperation)
- {
- Invoke(new Action(() =>
- {
- extractProgressBar.Value = (int) percentage;
- copyingLabel.Text = String.Format("{0}", currentOperation);
- percentageLabel.Text = String.Format("{0}%", Math.Round(percentage, 1));
- }));
- }
- public void Fail(Exception ex)
- {
- Invoke(
- new Action(
- () =>
- Popup.ShowPopup(this, SystemIcons.Error, Program.UpdatingErrorCaption,
- ex, PopupButtons.Ok)));
- }
- public void InitializingFail(Exception ex)
- {
- Popup.ShowPopup(this, SystemIcons.Error, Program.InitializingErrorCaption, ex,
- PopupButtons.Ok);
- }
- public void Terminate()
- {
- _allowCancel = true;
- Invoke(new Action(Close));
- }
- private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (!_allowCancel)
- e.Cancel = true;
- }
- }
Dann braucht Ihr einen Service, z. B. so:
C#-Quellcode
- using System;
- using nUpdate.UpdateInstaller.Client.GuiInterface;
- using nUpdate.UpdateInstaller.UI.Dialogs;
- namespace nUpdate.UpdateInstaller
- {
- public class ProgressReporterService : IProgressReporter
- {
- private readonly MainForm _mainForm;
- public ProgressReporterService()
- {
- _mainForm = new MainForm();
- }
- public void Fail(Exception ex)
- {
- _mainForm.Fail(ex);
- }
- public void Initialize()
- {
- _mainForm.Initialize();
- }
- public void InitializingFail(Exception ex)
- {
- _mainForm.InitializingFail(ex);
- }
- public void ReportOperationProgress(float progress, string currentOperation)
- {
- _mainForm.ReportOperationProgress(progress, currentOperation);
- }
- public void ReportUnpackingProgress(float progress, string currentFile)
- {
- _mainForm.ReportUnpackingProgress(progress, currentFile);
- }
- public void Terminate()
- {
- _mainForm.Terminate();
- }
- }
- }
... und dann noch einen ServiceProvider, Beispiel wieder der integrierte:
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using nUpdate.UpdateInstaller;
- using nUpdate.UpdateInstaller.Client.GuiInterface;
- [assembly: ServiceProvider(typeof(InstallerServiceProvider))]
- namespace nUpdate.UpdateInstaller
- {
- public class InstallerServiceProvider : IServiceProvider
- {
- private readonly Dictionary<Type, object> _services;
- public InstallerServiceProvider()
- {
- _services = new Dictionary<Type, object>();
- InitializeServices();
- }
- private void InitializeServices()
- {
- _services.Add(typeof(IProgressReporter), new ProgressReporterService());
- }
- public object GetService(Type serviceType)
- {
- if (serviceType == null)
- throw new ArgumentNullException("serviceType");
- object service;
- return !_services.TryGetValue(serviceType, out service) ? null : service;
- }
- }
- }
[b]Danksagung:
Danke an @nafets für das Icon.
Danke an @Artentus für den ExplorerNavigationButton.
Download:
Neueste Versionen: Auf GitHub
NuGet):
PM> Install-Package nUpdate -Version 4.0.0
PM> Install-Package nUpdate.UI.WindowsForms -Version 4.0.0
PM> Install-Package nUpdate.UI.WPF -Version 4.0.0
Grüße
#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da
Dieser Beitrag wurde bereits 88 mal editiert, zuletzt von „Trade“ ()