diff --git a/dist/Git-Manager-GUI-Setup-2.2.0.exe.sha256 b/dist/Git-Manager-GUI-Setup-2.2.0.exe.sha256
new file mode 100644
index 0000000..77a8692
--- /dev/null
+++ b/dist/Git-Manager-GUI-Setup-2.2.0.exe.sha256
@@ -0,0 +1 @@
+573763bb3b211a522220f4706864fcfbc1fe5f8467a7e68054c6e02aed71d5dc Git-Manager-GUI-Setup-2.2.0.exe
diff --git a/installer/App.xaml b/installer/App.xaml
new file mode 100644
index 0000000..c5ffef1
--- /dev/null
+++ b/installer/App.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/installer/App.xaml.cs b/installer/App.xaml.cs
new file mode 100644
index 0000000..d75c0e0
--- /dev/null
+++ b/installer/App.xaml.cs
@@ -0,0 +1,99 @@
+using System.IO;
+using System.Windows;
+using System.Windows.Media;
+using Microsoft.Win32;
+
+namespace GitManagerSetup;
+
+public partial class App : Application
+{
+ private static Mutex? _single;
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ base.OnStartup(e);
+ bool has(string arg) => e.Args.Any(a => a.Equals(arg, StringComparison.OrdinalIgnoreCase));
+
+ // Das Deinstallationsprogramm ist das Setup ohne angehängte App → ohne Anhang immer Deinstallation
+ bool uninstall = has("--uninstall") || !Payload.Exists;
+ bool silent = has("/S");
+ bool update = has("--update");
+ bool launch = has("/launch");
+ var dirArg = e.Args.FirstOrDefault(a => a.StartsWith("/D=", StringComparison.OrdinalIgnoreCase))?.Substring(3);
+
+ _single = new Mutex(true, "GitManagerGUI-Setup", out bool first);
+ if (!first)
+ {
+ Shutdown(0);
+ return;
+ }
+
+ // Stille Installation/Deinstallation für Skripte:
+ // Git-Manager-GUI-Setup.exe /S [/D=Ordner] [/launch] bzw. --uninstall /S
+ if (silent)
+ {
+ var progress = new Progress<(double, string)>(_ => { });
+ try
+ {
+ if (uninstall) Installer.Uninstall(removeData: false, progress);
+ else
+ {
+ var dir = dirArg ?? Installer.InstalledDir ?? Installer.DefaultDir;
+ Installer.Install(dir, desktopLink: Installer.InstalledDir is null || Installer.DesktopLinkExists,
+ progress, waitForExit: true);
+ if (launch) System.Diagnostics.Process.Start(Path.Combine(dir, Installer.ExeName));
+ }
+ Shutdown(0);
+ }
+ catch (Exception ex)
+ {
+ // ohne Oberfläche: Fehler für Skripte nachvollziehbar ablegen
+ try { File.WriteAllText(Path.Combine(Path.GetTempPath(), "Git-Manager-GUI-Setup.log"), $"[{DateTime.Now}] {ex}"); } catch { }
+ Shutdown(1);
+ }
+ return;
+ }
+
+ ApplyTheme();
+ var mode = uninstall ? SetupMode.Uninstall : update ? SetupMode.Update : SetupMode.Install;
+ new MainWindow(mode).Show();
+ }
+
+ protected override void OnExit(ExitEventArgs e)
+ {
+ try { _single?.ReleaseMutex(); } catch { }
+ base.OnExit(e);
+ }
+
+ /// Hell/Dunkel wie in Windows eingestellt.
+ private void ApplyTheme()
+ {
+ bool light = ReadDword(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme") != 0;
+ Resources.MergedDictionaries[0] = new ResourceDictionary
+ {
+ Source = new Uri($"pack://application:,,,/Themes/Colors.{(light ? "Light" : "Dark")}.xaml"),
+ };
+ if (!light)
+ {
+ // im Dunkeln das Cyan der App, damit Text und Fortschrittsbalken gut lesbar bleiben
+ var a = Color.FromRgb(0x4C, 0xB8, 0xF5);
+ Resources["AccentBrush"] = new SolidColorBrush(a);
+ Resources["AccentHoverBrush"] = new SolidColorBrush(Color.FromRgb(0x67, 0xC6, 0xF8));
+ Resources["OnAccentBrush"] = new SolidColorBrush(Color.FromRgb(0x04, 0x10, 0x1F));
+ Resources["AccentSubtleBrush"] = new SolidColorBrush(Color.FromArgb(0x30, a.R, a.G, a.B));
+ Resources["AccentSubtleStrokeBrush"] = new SolidColorBrush(Color.FromArgb(0x60, a.R, a.G, a.B));
+ }
+ }
+
+ private static int ReadDword(string key, string name)
+ {
+ try
+ {
+ using var k = Registry.CurrentUser.OpenSubKey(key);
+ return k?.GetValue(name) is int i ? i : -1;
+ }
+ catch { return -1; }
+ }
+}
+
+public enum SetupMode { Install, Update, Uninstall }
diff --git a/installer/GitManagerSetup.csproj b/installer/GitManagerSetup.csproj
new file mode 100644
index 0000000..68ae1fb
--- /dev/null
+++ b/installer/GitManagerSetup.csproj
@@ -0,0 +1,46 @@
+
+
+ WinExe
+
+ net48
+ true
+ true
+ latest
+ enable
+ enable
+ AnyCPU
+ false
+ false
+ Git-Manager-GUI-Setup
+ GitManagerSetup
+ ..\assets\icon.ico
+ app.manifest
+ Git Manager GUI Setup
+ Git Manager GUI Setup
+ Installiert Git Manager GUI
+ M_Viper
+ M_Viper
+ Copyright (c) M_Viper
+ de-DE
+
+ 0.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/installer/Installer.cs b/installer/Installer.cs
new file mode 100644
index 0000000..429a020
--- /dev/null
+++ b/installer/Installer.cs
@@ -0,0 +1,501 @@
+using System.Diagnostics;
+using System.IO;
+using System.IO.Compression;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using Microsoft.Win32;
+
+namespace GitManagerSetup;
+
+/// Installation/Deinstallation – nur für den aktuellen Benutzer, ohne Administratorrechte.
+public static class Installer
+{
+ public const string AppName = "Git Manager GUI";
+ public const string Publisher = "M_Viper";
+ // productName aus package.json → so heißt die EXE im entpackten Electron-Ordner
+ public const string ExeName = "Git Manager GUI.exe";
+ private const string ProcessName = "Git Manager GUI";
+ // Gleicher Name wie beim früheren NSIS-Setup (electron-builder), damit eine alte Installation sauber ersetzt wird
+ public const string UninstallerName = "Uninstall Git Manager GUI.exe";
+ // wie "appId" in package.json – gleiche Taskleisten-/Benachrichtigungs-Zuordnung wie bisher
+ public const string AppUserModelId = "com.viper.gitmanager";
+
+ // Schlüssel vom alten electron-builder-Setup (Version 2.1.7) übernommen → in "Apps" bleibt es ein einziger Eintrag
+ private const string KeyId = "4156cc7f-a3e7-5b1d-9238-0af3e0f54ecd";
+ private const string UninstallKey = @"Software\Microsoft\Windows\CurrentVersion\Uninstall\" + KeyId;
+ private const string LegacyAppKey = @"Software\" + KeyId;
+ private const string RunKey = @"Software\Microsoft\Windows\CurrentVersion\Run";
+ private const string FileListName = "install-files.txt";
+
+ public static string Version
+ {
+ get
+ {
+ var info = typeof(Installer).Assembly.GetCustomAttribute()?.InformationalVersion;
+ if (!string.IsNullOrEmpty(info)) return info!.Split('+')[0];
+ var v = typeof(Installer).Assembly.GetName().Version!;
+ return $"{v.Major}.{v.Minor}.{v.Build}";
+ }
+ }
+
+ /// Pfad dieses Setups (bzw. des Deinstallationsprogramms).
+ public static string SelfPath => Assembly.GetExecutingAssembly().Location;
+
+ public static string DefaultDir =>
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Programs", AppName);
+
+ /// App-Daten: Zugangsdaten (verschlüsselt), Einstellungen, Favoriten, Verlauf, Backup-Einstellung.
+ public static string DataDir =>
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "git-manager-gui");
+
+ private static string StartMenuLink =>
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), AppName + ".lnk");
+
+ private static string DesktopLink =>
+ Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), AppName + ".lnk");
+
+ // ---------- vorhandene Installation ----------
+
+ private static string? RegValue(string name)
+ {
+ using var k = Registry.CurrentUser.OpenSubKey(UninstallKey);
+ return k?.GetValue(name) as string;
+ }
+
+ /// Ordner einer vorhandenen Installation (dieses Setups oder des alten NSIS-Setups), oder null.
+ public static string? InstalledDir
+ {
+ get
+ {
+ var dir = RegValue("InstallLocation");
+ if (string.IsNullOrWhiteSpace(dir))
+ {
+ // altes NSIS-Setup trägt keinen InstallLocation ein → aus dem Deinstallationsbefehl ablesen
+ var m = Regex.Match(RegValue("UninstallString") ?? "", "^\"([^\"]+)\"");
+ dir = m.Success ? Path.GetDirectoryName(m.Groups[1].Value) : null;
+ }
+ return dir is not null && File.Exists(Path.Combine(dir, ExeName)) ? dir : null;
+ }
+ }
+
+ /// Stammt die vorhandene Installation noch vom alten NSIS-Setup?
+ public static bool IsLegacyInstall =>
+ InstalledDir is not null && (RegValue("UninstallString") ?? "").IndexOf("--uninstall", StringComparison.OrdinalIgnoreCase) < 0;
+
+ public static string? InstalledVersion => RegValue("DisplayVersion");
+
+ public static bool DesktopLinkExists => File.Exists(DesktopLink);
+
+ public static bool IsRunning(string? dir) => AppProcesses(dir, InstalledDir).Any();
+
+ // ---------- Installieren ----------
+
+ /// nach einem Update aus der App: ihr erst Zeit geben, sich selbst zu beenden
+ public static void Install(string dir, bool desktopLink, IProgress<(double, string)> progress, bool waitForExit = false)
+ {
+ if (!Environment.Is64BitOperatingSystem)
+ throw new InvalidOperationException("Git Manager GUI benötigt ein 64-Bit-Windows (Windows 10 oder 11).");
+
+ var oldDir = InstalledDir;
+ progress.Report((0.02, "Git Manager GUI wird beendet …"));
+ CloseRunningApp(waitForExit ? 20000 : 0, dir, oldDir);
+
+ using var zip = Payload.OpenArchive();
+ var topLevel = TopLevelNames(zip);
+
+ progress.Report((0.05, "Alte Version wird entfernt …"));
+ Directory.CreateDirectory(dir);
+ RemoveAppFiles(dir, topLevel);
+ if (oldDir is not null && !SamePath(oldDir, dir))
+ {
+ // Installation wurde in einen anderen Ordner verlegt → alten Ordner aufräumen
+ var oldExe = Path.Combine(oldDir, ExeName);
+ DeleteIfPointsTo(StartMenuLink, oldExe);
+ DeleteIfPointsTo(DesktopLink, oldExe);
+ RemoveAppFiles(oldDir, topLevel);
+ try { Directory.Delete(oldDir); } catch { } // nur wenn leer
+ }
+
+ Extract(zip, dir, p => progress.Report((0.08 + p * 0.8, "Dateien werden kopiert …")));
+
+ progress.Report((0.9, "Deinstallationsprogramm wird angelegt …"));
+ var exe = Path.Combine(dir, ExeName);
+ var uninstaller = Path.Combine(dir, UninstallerName);
+ if (!SamePath(SelfPath, uninstaller))
+ {
+ MoveAside(uninstaller);
+ CopyStub(uninstaller);
+ }
+ File.WriteAllLines(Path.Combine(dir, FileListName), topLevel.Concat([UninstallerName, FileListName]));
+
+ progress.Report((0.94, "Verknüpfungen werden angelegt …"));
+ Shortcut.Create(StartMenuLink, exe, "Repositories auf Gitea und GitHub verwalten", AppUserModelId);
+ if (desktopLink) Shortcut.Create(DesktopLink, exe, "Repositories auf Gitea und GitHub verwalten", AppUserModelId);
+ else DeleteIfPointsTo(DesktopLink, exe);
+
+ progress.Report((0.97, "Windows wird eingerichtet …"));
+ Registry.CurrentUser.DeleteSubKeyTree(UninstallKey, throwOnMissingSubKey: false); // Reste des alten Setups
+ Registry.CurrentUser.DeleteSubKeyTree(LegacyAppKey, throwOnMissingSubKey: false);
+ using (var k = Registry.CurrentUser.CreateSubKey(UninstallKey))
+ {
+ long size = DirSize(dir) / 1024;
+ k.SetValue("DisplayName", AppName);
+ k.SetValue("DisplayVersion", Version);
+ k.SetValue("Publisher", Publisher);
+ k.SetValue("DisplayIcon", $"{exe},0");
+ k.SetValue("InstallLocation", dir);
+ k.SetValue("UninstallString", $"\"{uninstaller}\" --uninstall");
+ k.SetValue("QuietUninstallString", $"\"{uninstaller}\" --uninstall /S");
+ k.SetValue("URLInfoAbout", "https://git.viper.ipv64.net/M_Viper/Git-Manager-Gui");
+ k.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd"));
+ k.SetValue("EstimatedSize", (int)Math.Min(int.MaxValue, size), RegistryValueKind.DWord);
+ k.SetValue("NoModify", 1, RegistryValueKind.DWord);
+ k.SetValue("NoRepair", 1, RegistryValueKind.DWord);
+ }
+
+ progress.Report((0.98, "Installation wird abgeschlossen …"));
+ Vorwaermen(exe);
+
+ progress.Report((1.0, "Fertig"));
+ }
+
+ ///
+ /// Startet die App einmal kurz mit "--gm-vorwaermen" – sie beendet sich
+ /// damit sofort wieder (siehe main.js). Windows Defender prüft eine neue,
+ /// noch unbekannte EXE beim ersten Start mehrere Sekunden lang (gemessen: ~8 s);
+ /// das passiert so während des Fortschrittsbalkens und nicht erst beim Klick
+ /// auf "Fertigstellen". Das Ergebnis merkt sich Windows, der echte Start ist
+ /// danach sofort da.
+ ///
+ private static void Vorwaermen(string exe)
+ {
+ try
+ {
+ using var p = Process.Start(new ProcessStartInfo(exe, "--gm-vorwaermen")
+ {
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ WorkingDirectory = Path.GetDirectoryName(exe)!,
+ });
+ if (p != null && !p.WaitForExit(30000)) { try { p.Kill(); } catch { } }
+ }
+ catch { /* nur eine Beschleunigung – Fehler sind egal */ }
+ }
+
+ private static List TopLevelNames(ZipArchive zip) =>
+ zip.Entries
+ .Select(e => e.FullName.Replace('\\', '/').Split('/')[0])
+ .Where(n => n.Length > 0)
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .ToList();
+
+ private static void Extract(ZipArchive zip, string dir, Action report)
+ {
+ var root = Path.GetFullPath(dir).TrimEnd('\\') + "\\";
+ long total = Math.Max(1, zip.Entries.Sum(e => e.Length)), done = 0;
+ var buffer = new byte[1 << 20];
+ int lastPercent = -1;
+
+ foreach (var entry in zip.Entries)
+ {
+ var target = Path.GetFullPath(Path.Combine(dir, entry.FullName));
+ if (!target.StartsWith(root, StringComparison.OrdinalIgnoreCase)) continue; // nie außerhalb des Ordners schreiben
+ if (entry.Name.Length == 0)
+ {
+ Directory.CreateDirectory(target);
+ continue;
+ }
+ Directory.CreateDirectory(Path.GetDirectoryName(target)!);
+ long before = done;
+ Retry(target, () =>
+ {
+ done = before;
+ MoveAside(target);
+ using var src = entry.Open();
+ using var dst = File.Create(target);
+ int n;
+ while ((n = src.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ dst.Write(buffer, 0, n);
+ done += n;
+ int percent = (int)(done * 100 / total);
+ if (percent != lastPercent)
+ {
+ lastPercent = percent;
+ report(Math.Min(1.0, (double)done / total));
+ }
+ }
+ });
+ }
+ report(1.0);
+ }
+
+ /// Setup ohne angehängte App als Deinstallationsprogramm ablegen (nur ein paar hundert KB).
+ private static void CopyStub(string path)
+ {
+ long length = Payload.StubLength;
+ using var src = File.OpenRead(SelfPath);
+ using var dst = File.Create(path);
+ var buffer = new byte[81920];
+ long left = length;
+ while (left > 0)
+ {
+ int n = src.Read(buffer, 0, (int)Math.Min(buffer.Length, left));
+ if (n <= 0) break;
+ dst.Write(buffer, 0, n);
+ left -= n;
+ }
+ }
+
+ // ---------- Deinstallieren ----------
+
+ public static void Uninstall(bool removeData, IProgress<(double, string)> progress)
+ {
+ // Nur im eingetragenen Installationsordner löschen – nie dort, wo das Setup zufällig liegt (z. B. Downloads)
+ var dir = InstalledDir;
+ var exe = dir is null ? "" : Path.Combine(dir, ExeName);
+
+ progress.Report((0.1, "Git Manager GUI wird beendet …"));
+ CloseRunningApp(0, dir);
+
+ progress.Report((0.3, "Verknüpfungen werden entfernt …"));
+ DeleteIfPointsTo(StartMenuLink, exe);
+ DeleteIfPointsTo(DesktopLink, exe);
+
+ progress.Report((0.45, "Windows-Einträge werden entfernt …"));
+ RemoveAutostart(exe);
+ Registry.CurrentUser.DeleteSubKeyTree(UninstallKey, throwOnMissingSubKey: false);
+ Registry.CurrentUser.DeleteSubKeyTree(LegacyAppKey, throwOnMissingSubKey: false);
+ // Name/Logo für Windows-Benachrichtigungen (legt Electron selbst an)
+ Registry.CurrentUser.DeleteSubKeyTree(@"Software\Classes\AppUserModelId\" + AppUserModelId, throwOnMissingSubKey: false);
+
+ if (removeData && Directory.Exists(DataDir))
+ {
+ progress.Report((0.6, "Zugangsdaten und Einstellungen werden in den Papierkorb gelegt …"));
+ try
+ {
+ Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(DataDir,
+ Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs,
+ Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin);
+ }
+ catch { }
+ }
+
+ progress.Report((0.8, "Dateien werden entfernt …"));
+ if (dir is null) { progress.Report((1.0, "Fertig")); return; }
+ RemoveAppFiles(dir, null);
+
+ // Das laufende Deinstallationsprogramm kann sich nicht selbst löschen → kurz nach dem Beenden per cmd.
+ // rmdir ohne /s entfernt den Ordner nur, wenn er danach leer ist.
+ var self = SelfPath;
+ if (IsUnder(self, dir))
+ {
+ Process.Start(new ProcessStartInfo("cmd.exe",
+ $"/c ping 127.0.0.1 -n 3 > nul & del /f /q \"{self}\" & del /f /q \"{Path.Combine(dir, "*.old")}\" & rmdir \"{dir}\"")
+ {
+ CreateNoWindow = true, UseShellExecute = false, WindowStyle = ProcessWindowStyle.Hidden,
+ });
+ }
+ else
+ {
+ TryDelete(Path.Combine(dir, UninstallerName));
+ try { Directory.Delete(dir); } catch { } // nur wenn leer
+ }
+ progress.Report((1.0, "Fertig"));
+ }
+
+ /// Autostart-Einträge entfernen, die die App selbst gesetzt hat (Name vergibt Electron).
+ private static void RemoveAutostart(string exe)
+ {
+ if (exe.Length == 0) return;
+ using var run = Registry.CurrentUser.OpenSubKey(RunKey, writable: true);
+ if (run is null) return;
+ foreach (var name in run.GetValueNames())
+ {
+ if (run.GetValue(name) is string cmd && cmd.IndexOf(exe, StringComparison.OrdinalIgnoreCase) >= 0)
+ run.DeleteValue(name, throwOnMissingValue: false);
+ }
+ }
+
+ // ---------- Dateien ----------
+
+ ///
+ /// Entfernt die App-Dateien aus einem Installationsordner. Gelöscht wird nur, was nachweislich zur App gehört:
+ /// Einträge aus der Dateiliste der letzten Installation bzw. die Namen aus dem neuen Paket –
+ /// Ordner nur, wenn sie eindeutig von Electron stammen. Fremde Dateien im Ordner bleiben unangetastet.
+ ///
+ private static void RemoveAppFiles(string dir, IEnumerable? extraNames)
+ {
+ if (!Directory.Exists(dir)) return;
+ CleanupOldFiles(dir);
+ var listFile = Path.Combine(dir, FileListName);
+ var fromList = File.Exists(listFile) ? File.ReadAllLines(listFile).Where(l => l.Trim().Length > 0).ToList() : [];
+ var names = fromList.Concat(extraNames ?? []).Concat([UninstallerName, FileListName])
+ .Distinct(StringComparer.OrdinalIgnoreCase);
+
+ foreach (var name in names)
+ {
+ if (name.IndexOfAny(['\\', '/', ':']) >= 0 || name is "." or "..") continue;
+ var path = Path.Combine(dir, name);
+ if (SamePath(path, SelfPath)) continue; // das laufende Deinstallationsprogramm räumt cmd weg
+
+ if (Directory.Exists(path))
+ {
+ bool ours = fromList.Contains(name, StringComparer.OrdinalIgnoreCase)
+ || (name.Equals("resources", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(path, "app.asar")))
+ || (name.Equals("locales", StringComparison.OrdinalIgnoreCase) && File.Exists(Path.Combine(path, "en-US.pak")));
+ if (ours) Retry(path, () => Directory.Delete(path, recursive: true));
+ }
+ else if (File.Exists(path))
+ {
+ Retry(path, () => MoveAside(path));
+ }
+ }
+ }
+
+ ///
+ /// Längster Pfad im Paket. Windows erlaubt (ohne Sonderfreigabe) nur 259 Zeichen pro Pfad –
+ /// der Installationsordner darf deshalb höchstens Zeichen lang sein.
+ ///
+ private static int? _longestEntry;
+ public static int MaxDirLength
+ {
+ get
+ {
+ if (_longestEntry is null)
+ {
+ try
+ {
+ using var zip = Payload.OpenArchive();
+ _longestEntry = zip.Entries.Count == 0 ? 0 : zip.Entries.Max(e => e.FullName.Length);
+ }
+ catch { _longestEntry = 0; }
+ }
+ return 259 - 1 - _longestEntry.Value;
+ }
+ }
+
+ private static void Retry(string path, Action action)
+ {
+ for (int attempt = 1; ; attempt++)
+ {
+ try
+ {
+ action();
+ return;
+ }
+ catch (PathTooLongException ex)
+ {
+ throw new IOException($"Der Installationsordner ist zu lang. Bitte einen kürzeren Ordner wählen (höchstens {MaxDirLength} Zeichen).", ex);
+ }
+ catch (Exception ex) when ((ex is IOException || ex is UnauthorizedAccessException) && attempt < 10)
+ {
+ Thread.Sleep(500);
+ }
+ catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException)
+ {
+ throw new IOException($"„{Path.GetFileName(path)}“ wird noch verwendet. Bitte Git Manager GUI beenden " +
+ "(auch das Symbol im Infobereich neben der Uhr) und erneut versuchen.", ex);
+ }
+ }
+ }
+
+ ///
+ /// Vorhandene Datei löschen oder – falls sie noch geöffnet ist (Explorer, Virenscanner) – beiseite umbenennen.
+ /// Umbenennen klappt unter Windows auch bei geöffneten Dateien, überschreiben nicht.
+ ///
+ private static void MoveAside(string path)
+ {
+ if (!File.Exists(path)) return;
+ try { File.Delete(path); return; } catch { }
+ File.Move(path, $"{path}.{Guid.NewGuid():N}.old");
+ }
+
+ private static void CleanupOldFiles(string dir)
+ {
+ if (!Directory.Exists(dir)) return;
+ foreach (var f in Directory.GetFiles(dir, "*.old", SearchOption.AllDirectories))
+ try { File.Delete(f); } catch { }
+ }
+
+ private static void TryDelete(string path)
+ {
+ try { if (File.Exists(path)) File.Delete(path); } catch { }
+ }
+
+ private static void DeleteIfPointsTo(string link, string target)
+ {
+ if (!File.Exists(link) || target.Length == 0) return;
+ if (!SamePath(Shortcut.Target(link) ?? "", target)) return;
+ // Explorer/Indexdienst halten Verknüpfungen manchmal kurz fest → mehrmals versuchen
+ for (int i = 0; i < 10 && File.Exists(link); i++)
+ {
+ try { File.Delete(link); }
+ catch { Thread.Sleep(300); }
+ }
+ }
+
+ // ---------- Prozesse ----------
+
+ private static IEnumerable AppProcesses(params string?[] dirs)
+ {
+ var roots = dirs.Where(d => !string.IsNullOrEmpty(d)).Select(d => d!).ToList();
+ if (roots.Count == 0) yield break;
+ // die App (mehrere Electron-Prozesse) und das mitgelieferte Git, falls gerade ein Upload läuft
+ foreach (var p in Process.GetProcessesByName(ProcessName).Concat(Process.GetProcessesByName("git")))
+ {
+ string? file = null;
+ try { file = p.MainModule?.FileName; } catch { }
+ if (file is not null && roots.Any(r => IsUnder(file, r))) yield return p;
+ }
+ }
+
+ private static void CloseRunningApp(int waitMs, params string?[] dirs)
+ {
+ var until = DateTime.Now.AddMilliseconds(waitMs);
+ while (waitMs > 0 && DateTime.Now < until && AppProcesses(dirs).Any())
+ Thread.Sleep(300);
+
+ foreach (var p in AppProcesses(dirs).ToList())
+ {
+ try
+ {
+ p.Kill();
+ p.WaitForExit(10000);
+ }
+ catch { }
+ }
+ }
+
+ // ---------- Helfer ----------
+
+ private static bool SamePath(string a, string b)
+ {
+ try { return string.Equals(Path.GetFullPath(a).TrimEnd('\\'), Path.GetFullPath(b).TrimEnd('\\'), StringComparison.OrdinalIgnoreCase); }
+ catch { return false; }
+ }
+
+ private static bool IsUnder(string path, string dir) =>
+ Path.GetFullPath(path).StartsWith(Path.GetFullPath(dir).TrimEnd('\\') + "\\", StringComparison.OrdinalIgnoreCase);
+
+ private static long DirSize(string dir)
+ {
+ long sum = 0;
+ try
+ {
+ foreach (var f in Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories))
+ try { sum += new FileInfo(f).Length; } catch { }
+ }
+ catch { }
+ return sum;
+ }
+
+ public static long DataSize() => Directory.Exists(DataDir) ? DirSize(DataDir) : 0;
+
+ public static string FormatSize(long bytes) => bytes switch
+ {
+ < 1024 * 1024 => $"{Math.Max(1, bytes / 1024)} KB",
+ < 1024L * 1024 * 1024 => $"{bytes / 1024.0 / 1024:0.#} MB",
+ _ => $"{bytes / 1024.0 / 1024 / 1024:0.##} GB",
+ };
+}
diff --git a/installer/MainWindow.xaml b/installer/MainWindow.xaml
new file mode 100644
index 0000000..928e4c6
--- /dev/null
+++ b/installer/MainWindow.xaml
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/installer/MainWindow.xaml.cs b/installer/MainWindow.xaml.cs
new file mode 100644
index 0000000..9c59385
--- /dev/null
+++ b/installer/MainWindow.xaml.cs
@@ -0,0 +1,454 @@
+using System.Diagnostics;
+using System.IO;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Threading;
+
+namespace GitManagerSetup;
+
+public partial class MainWindow : Window
+{
+ private readonly SetupMode _mode;
+ private int _page;
+ private bool _busy;
+ private bool _done;
+ private string? _installedExe;
+
+ private const int PageNumOptions = 1;
+ private const int PageNumProgress = 2;
+
+ public MainWindow(SetupMode mode)
+ {
+ InitializeComponent();
+ _mode = mode;
+ VersionText.Text = $"Version {Installer.Version}";
+
+ var installed = Installer.InstalledDir;
+ DirBox.Text = installed ?? Installer.DefaultDir;
+ DesktopLinkBox.IsChecked = installed is null || Installer.DesktopLinkExists;
+
+ if (installed is not null)
+ {
+ UpdateHint.Visibility = Visibility.Visible;
+ UpdateHintText.Text = Installer.InstalledVersion == Installer.Version
+ ? $"Git Manager GUI {Installer.Version} ist bereits installiert und wird neu installiert. Zugangsdaten und Einstellungen bleiben erhalten."
+ : $"Die vorhandene Installation{(Installer.InstalledVersion is { } v ? $" (Version {v})" : "")} wird durch Version {Installer.Version} ersetzt. Zugangsdaten und Einstellungen bleiben erhalten.";
+ }
+ if (Installer.IsRunning(installed)) RunningHint.Visibility = Visibility.Visible;
+
+ switch (mode)
+ {
+ case SetupMode.Uninstall:
+ Title = WindowTitle.Text = "Git Manager GUI deinstallieren";
+ Steps.Visibility = Visibility.Collapsed;
+ ShowOnly(PageUninstall);
+ NextButton.Content = "Deinstallieren";
+ BackButton.Visibility = Visibility.Collapsed;
+ LoadDataInfo();
+ break;
+ case SetupMode.Update:
+ // aus der App heraus: ohne Rückfragen direkt aktualisieren und danach wieder starten
+ Title = WindowTitle.Text = "Git Manager GUI wird aktualisiert";
+ Steps.Visibility = Visibility.Collapsed;
+ Loaded += async (_, _) => await RunInstall(DirBox.Text, DesktopLinkBox.IsChecked == true, update: true);
+ ShowOnly(PageProgress);
+ ProgressTitle.Text = "Git Manager GUI wird aktualisiert …";
+ BackButton.Visibility = Visibility.Hidden;
+ break;
+ default:
+ ShowPage(0);
+ break;
+ }
+ }
+
+ // ---------- Seiten ----------
+
+ private UIElement? _shownPage;
+
+ /// Seite wechseln – mit kurzem Einblenden von rechts.
+ private void ShowOnly(UIElement page)
+ {
+ foreach (var p in new UIElement[] { PageWelcome, PageOptions, PageProgress, PageUninstall })
+ p.Visibility = p == page ? Visibility.Visible : Visibility.Collapsed;
+ if (page == _shownPage) return;
+ _shownPage = page;
+
+ var ease = new CubicEase { EasingMode = EasingMode.EaseOut };
+ var slide = new TranslateTransform(18, 0);
+ page.RenderTransform = slide;
+ slide.BeginAnimation(TranslateTransform.XProperty, new DoubleAnimation(18, 0, TimeSpan.FromMilliseconds(260)) { EasingFunction = ease });
+ page.BeginAnimation(OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(220)));
+ }
+
+ // Farben der Schritt-Anzeige in der (immer dunklen) Seitenleiste – Cyan wie in der App
+ private static readonly Brush StepDoneFill = Frozen(Color.FromRgb(0x58, 0xD5, 0xFF));
+ private static readonly Brush StepDoneGlyph = Frozen(Color.FromRgb(0x04, 0x10, 0x1F));
+ private static readonly Brush StepCurrentFill = Brushes.White;
+ private static readonly Brush StepCurrentText = Frozen(Color.FromRgb(0x13, 0x30, 0x5C));
+ private static readonly Brush StepUpcoming = Frozen(Color.FromRgb(0x70, 0x83, 0xA4));
+ private static readonly Brush StepUpcomingStroke = Frozen(Color.FromRgb(0x3A, 0x4E, 0x72));
+ private static readonly Brush StepDoneText = Frozen(Color.FromRgb(0xAE, 0xBD, 0xD8));
+ private static readonly Brush StepLineIdle = Frozen(Color.FromRgb(0x24, 0x36, 0x58));
+
+ private static Brush Frozen(Color c)
+ {
+ var b = new SolidColorBrush(c);
+ b.Freeze();
+ return b;
+ }
+
+ private void UpdateSteps(int page)
+ {
+ var dots = new[] { Dot0, Dot1, Dot2 };
+ var nums = new[] { Num0, Num1, Num2 };
+ var labels = new[] { Label0, Label1, Label2 };
+ var lines = new[] { Line0, Line1 };
+ var iconFont = (FontFamily)FindResource("IconFont");
+ var uiFont = (FontFamily)FindResource("UiFont");
+
+ for (int i = 0; i < dots.Length; i++)
+ {
+ bool done = i < page || (_done && i == page);
+ bool current = i == page && !done;
+ dots[i].Background = done ? StepDoneFill : current ? StepCurrentFill : Brushes.Transparent;
+ dots[i].BorderBrush = done ? StepDoneFill : current ? StepCurrentFill : StepUpcomingStroke;
+ nums[i].Text = done ? "" : (i + 1).ToString();
+ nums[i].FontFamily = done ? iconFont : uiFont;
+ nums[i].FontSize = done ? 11 : 12;
+ nums[i].Foreground = done ? StepDoneGlyph : current ? StepCurrentText : StepUpcoming;
+ labels[i].Foreground = current ? Brushes.White : done ? StepDoneText : StepUpcoming;
+ labels[i].FontWeight = current ? FontWeights.SemiBold : FontWeights.Normal;
+ }
+ for (int i = 0; i < lines.Length; i++)
+ lines[i].Background = i < page ? StepDoneFill : StepLineIdle;
+ }
+
+ private void ShowPage(int page)
+ {
+ _page = page;
+ ShowOnly(page switch { 0 => PageWelcome, PageNumOptions => PageOptions, _ => PageProgress });
+ UpdateSteps(page);
+
+ BackButton.Visibility = page == PageNumOptions ? Visibility.Visible : Visibility.Hidden;
+ NextButton.Content = page switch
+ {
+ PageNumOptions => "Installieren",
+ PageNumProgress => "Fertigstellen",
+ _ => "Weiter",
+ };
+ }
+
+ private void Back_Click(object sender, RoutedEventArgs e)
+ {
+ if (!_busy && _page > 0) ShowPage(_page - 1);
+ }
+
+ private async void Next_Click(object sender, RoutedEventArgs e)
+ {
+ if (_busy) return;
+
+ if (_mode == SetupMode.Uninstall)
+ {
+ if (_done) { Close(); return; }
+ await RunUninstall();
+ return;
+ }
+ if (_mode == SetupMode.Update)
+ {
+ Close(); // nur nach einem Fehler erreichbar
+ return;
+ }
+
+ switch (_page)
+ {
+ case 0: ShowPage(PageNumOptions); break;
+ case PageNumOptions:
+ var dir = DirBox.Text.Trim();
+ if (!IsFullPath(dir) || dir.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
+ {
+ await Frage("Ungültiger Ordner", "Bitte einen vollständigen Ordner angeben, z. B. C:\\Programme\\Git Manager GUI.", "OK");
+ return;
+ }
+ if (dir.TrimEnd('\\', '/').Length > Installer.MaxDirLength)
+ {
+ await Frage("Ordnerpfad zu lang",
+ $"Der Pfad hat {dir.TrimEnd('\\', '/').Length} Zeichen, Windows erlaubt hier höchstens {Installer.MaxDirLength}. " +
+ "Bitte einen kürzeren Ordner wählen.", "OK");
+ return;
+ }
+ await RunInstall(dir, DesktopLinkBox.IsChecked == true, update: false);
+ break;
+ case PageNumProgress:
+ // Start im Hintergrund: Process.Start kann blockieren, solange Windows
+ // die EXE prüft – das Fenster darf dabei nie einfrieren
+ if (LaunchBox.IsChecked == true)
+ {
+ _busy = true;
+ NextButton.IsEnabled = false;
+ NextButton.Content = "Wird gestartet …";
+ await Task.Run(StartApp);
+ _busy = false;
+ }
+ Close();
+ break;
+ }
+ }
+
+ private void ChangeDir_Click(object sender, RoutedEventArgs e)
+ {
+ using var dlg = new System.Windows.Forms.FolderBrowserDialog
+ {
+ Description = "Installationsordner wählen",
+ SelectedPath = Directory.Exists(DirBox.Text) ? DirBox.Text : Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
+ ShowNewFolderButton = true,
+ };
+ if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
+ var chosen = dlg.SelectedPath;
+ // wie bei üblichen Installern: Unterordner "Git Manager GUI" anhängen
+ DirBox.Text = Path.GetFileName(chosen.TrimEnd('\\')).Equals(Installer.AppName, StringComparison.OrdinalIgnoreCase)
+ ? chosen : Path.Combine(chosen, Installer.AppName);
+ }
+
+ // ---------- Installation ----------
+
+ private async Task RunInstall(string dir, bool desktop, bool update)
+ {
+ _busy = true;
+ if (!update) ShowPage(PageNumProgress);
+ SetButtons(false);
+ var progress = new Progress<(double Value, string Text)>(p => SetProgress(p.Value, p.Text));
+ try
+ {
+ await Task.Run(() => Installer.Install(dir, desktop, progress, waitForExit: update));
+ _installedExe = Path.Combine(dir, Installer.ExeName);
+ _done = true;
+
+ if (update)
+ {
+ ShowSuccess("Update abgeschlossen", $"Git Manager GUI {Installer.Version} wird gestartet …");
+ StartApp();
+ _busy = false;
+ var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1.5) };
+ timer.Tick += (_, _) => { timer.Stop(); Close(); };
+ timer.Start();
+ return;
+ }
+
+ ShowSuccess("Alles bereit!", "Git Manager GUI ist installiert. Du findest es im Startmenü" + (desktop ? " und auf dem Desktop." : "."));
+ DonePanel.Visibility = Visibility.Visible;
+ ShowPage(PageNumProgress);
+ }
+ catch (Exception ex)
+ {
+ ProgressTitle.Text = update ? "Update fehlgeschlagen" : "Installation fehlgeschlagen";
+ ProgressBarPanel.Visibility = Visibility.Collapsed;
+ ProgressText.Text = ex.Message;
+ ProgressText.Foreground = (Brush)FindResource("DangerBrush");
+ NextButton.Content = "Schließen";
+ _installedExe = null;
+ }
+ _busy = false;
+ NextButton.IsEnabled = true;
+ CloseButton.IsEnabled = true;
+ BackButton.Visibility = Visibility.Hidden;
+ CancelButton.Visibility = Visibility.Collapsed;
+ }
+
+ /// Fortschritt ausblenden und den Haken mit kurzem "Aufploppen" zeigen.
+ private void ShowSuccess(string title, string text)
+ {
+ ProgressBarPanel.Visibility = Visibility.Collapsed;
+ ProgressTitle.Text = title;
+ ProgressText.Text = text;
+ SuccessIcon.Visibility = Visibility.Visible;
+ var pop = new DoubleAnimation(0.4, 1, TimeSpan.FromMilliseconds(420)) { EasingFunction = new BackEase { EasingMode = EasingMode.EaseOut, Amplitude = 0.5 } };
+ SuccessScale.BeginAnimation(ScaleTransform.ScaleXProperty, pop);
+ SuccessScale.BeginAnimation(ScaleTransform.ScaleYProperty, pop);
+ SuccessIcon.BeginAnimation(OpacityProperty, new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200)));
+ }
+
+ private void StartApp()
+ {
+ if (_installedExe is null || !File.Exists(_installedExe)) return;
+ try
+ {
+ Process.Start(new ProcessStartInfo(_installedExe)
+ {
+ UseShellExecute = true,
+ WorkingDirectory = Path.GetDirectoryName(_installedExe)!,
+ });
+ }
+ catch { }
+ }
+
+ // ---------- Deinstallation ----------
+
+ private async void LoadDataInfo()
+ {
+ var root = Installer.DataDir;
+ if (!Directory.Exists(root))
+ {
+ DataInfo.Text = "Es wurden keine App-Daten gefunden.";
+ RemoveDataBox.IsEnabled = false;
+ return;
+ }
+ DataInfo.Text = $"Sie liegen in {root}. Größe wird berechnet …";
+ var size = await Task.Run(Installer.DataSize);
+ DataInfo.Text = $"Sie liegen in {root} ({Installer.FormatSize(size)}) und stehen wieder bereit, falls du Git Manager GUI später neu installierst.";
+ }
+
+ private void RemoveDataBox_Click(object sender, RoutedEventArgs e) =>
+ RemoveDataWarning.Visibility = RemoveDataBox.IsChecked == true ? Visibility.Visible : Visibility.Collapsed;
+
+ private async Task RunUninstall()
+ {
+ _busy = true;
+ bool removeData = RemoveDataBox.IsChecked == true;
+ ShowOnly(PageProgress);
+ ProgressTitle.Text = "Git Manager GUI wird entfernt …";
+ LaunchBox.Visibility = Visibility.Collapsed;
+ SetButtons(false);
+ var progress = new Progress<(double Value, string Text)>(p => SetProgress(p.Value, p.Text));
+ try
+ {
+ await Task.Run(() => Installer.Uninstall(removeData, progress));
+ ShowSuccess("Git Manager GUI wurde entfernt", removeData
+ ? "Programm, Zugangsdaten und Einstellungen wurden entfernt (die Daten liegen im Papierkorb)."
+ : "Deine Zugangsdaten und Einstellungen liegen weiterhin in " + Installer.DataDir + " – falls du Git Manager GUI später wieder installierst.");
+ }
+ catch (Exception ex)
+ {
+ ProgressTitle.Text = "Deinstallation fehlgeschlagen";
+ ProgressBarPanel.Visibility = Visibility.Collapsed;
+ ProgressText.Text = ex.Message;
+ }
+ _done = true;
+ _busy = false;
+ CloseButton.IsEnabled = true;
+ NextButton.Content = "Schließen";
+ NextButton.IsEnabled = true;
+ CancelButton.Visibility = Visibility.Collapsed;
+ }
+
+ // ---------- Helfer ----------
+
+ private void SetButtons(bool enabled)
+ {
+ NextButton.IsEnabled = enabled;
+ BackButton.IsEnabled = enabled;
+ CancelButton.IsEnabled = enabled;
+ CloseButton.IsEnabled = enabled;
+ }
+
+ private void SetProgress(double value, string text)
+ {
+ if (_done) return;
+ ProgressText.Text = text;
+ PercentText.Text = $"{(int)Math.Round(value * 100)} %";
+ _progress = value;
+ AnimateProgress();
+ }
+
+ private double _progress;
+
+ private void AnimateProgress()
+ {
+ var target = Math.Max(0, ProgressTrack.ActualWidth * _progress);
+ ProgressFill.BeginAnimation(WidthProperty,
+ new DoubleAnimation(target, TimeSpan.FromMilliseconds(250)) { EasingFunction = new CubicEase() });
+ }
+
+ // Kommt der erste Wert, bevor die Seite fertig angeordnet ist (Breite 0), nachträglich richtig setzen
+ private void ProgressTrack_SizeChanged(object sender, SizeChangedEventArgs e) => AnimateProgress();
+
+ private static bool IsFullPath(string p) =>
+ p.Length >= 3 && char.IsLetter(p[0]) && p[1] == ':' && (p[2] == '\\' || p[2] == '/');
+
+ private void Minimize_Click(object sender, RoutedEventArgs e) => WindowState = WindowState.Minimized;
+
+ private async void Cancel_Click(object sender, RoutedEventArgs e)
+ {
+ if (_busy || _dialog is not null) return;
+ if (!_done && _mode == SetupMode.Install && _page > 0)
+ {
+ bool abbrechen = await Frage("Installation abbrechen?",
+ "Git Manager GUI wird nicht installiert. Du kannst das Setup später jederzeit erneut starten.",
+ "Ja, abbrechen", "Weiter installieren", "\uE897");
+ if (!abbrechen) return;
+ }
+ Close();
+ }
+
+ // ---------- eigene Rückfragen im Setup-Look ----------
+
+ private TaskCompletionSource? _dialog;
+
+ ///
+ /// Zeigt eine Rückfrage über dem Fenster. Mit : zwei Knöpfe –
+ /// der hervorgehobene ist der sichere Weg zurück (liefert false), der andere bestätigt (true).
+ /// Ohne: nur ein Hinweis mit einem Knopf (liefert true).
+ ///
+ private Task Frage(string titel, string text, string bestaetigen, string? zurueck = null, string symbol = "\uE7BA")
+ {
+ _dialog?.TrySetResult(false);
+ _dialog = new TaskCompletionSource();
+ DialogTitle.Text = titel;
+ DialogText.Text = text;
+ DialogIcon.Text = symbol;
+ if (zurueck is null)
+ {
+ DialogSecondary.Visibility = Visibility.Collapsed;
+ DialogPrimary.Content = bestaetigen;
+ }
+ else
+ {
+ DialogSecondary.Visibility = Visibility.Visible;
+ DialogSecondary.Content = bestaetigen;
+ DialogPrimary.Content = zurueck;
+ }
+
+ DialogOverlay.Visibility = Visibility.Visible;
+ var ein = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(160));
+ DialogOverlay.BeginAnimation(OpacityProperty, ein);
+ var groesse = new DoubleAnimation(0.94, 1, TimeSpan.FromMilliseconds(220)) { EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } };
+ DialogScale.BeginAnimation(ScaleTransform.ScaleXProperty, groesse);
+ DialogScale.BeginAnimation(ScaleTransform.ScaleYProperty, groesse);
+ DialogPrimary.Focus();
+ return _dialog.Task;
+ }
+
+ private void SchliesseFrage(bool ergebnis)
+ {
+ if (_dialog is null) return;
+ var tcs = _dialog;
+ _dialog = null;
+ DialogOverlay.Visibility = Visibility.Collapsed;
+ tcs.TrySetResult(ergebnis);
+ }
+
+ // hervorgehobener Knopf: bei Rückfragen "zurück" (false), beim reinen Hinweis "OK" (true)
+ private void DialogPrimary_Click(object sender, RoutedEventArgs e) =>
+ SchliesseFrage(DialogSecondary.Visibility != Visibility.Visible);
+
+ private void DialogSecondary_Click(object sender, RoutedEventArgs e) => SchliesseFrage(true);
+
+ protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
+ {
+ // solange die Rückfrage offen ist: Enter = hervorgehobener Knopf, Esc = zurück
+ if (_dialog is not null)
+ {
+ if (e.Key == System.Windows.Input.Key.Escape) { SchliesseFrage(DialogSecondary.Visibility != Visibility.Visible); e.Handled = true; return; }
+ if (e.Key == System.Windows.Input.Key.Enter) { DialogPrimary_Click(this, new RoutedEventArgs()); e.Handled = true; return; }
+ }
+ base.OnPreviewKeyDown(e);
+ }
+
+ protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
+ {
+ if (_busy) e.Cancel = true; // während der Installation nicht schließen
+ _dialog?.TrySetResult(false);
+ base.OnClosing(e);
+ }
+}
diff --git a/installer/Payload.cs b/installer/Payload.cs
new file mode 100644
index 0000000..7f75adb
--- /dev/null
+++ b/installer/Payload.cs
@@ -0,0 +1,106 @@
+using System.IO;
+using System.IO.Compression;
+using System.Text;
+
+namespace GitManagerSetup;
+
+///
+/// Die App liegt als ZIP hinten an der Setup-.exe angehängt:
+/// [Setup.exe][ZIP][8 Byte: ZIP-Länge][8 Byte: "GITMGRPK"]
+/// Windows ignoriert angehängte Daten beim Starten einer .exe.
+///
+public static class Payload
+{
+ private static readonly byte[] Magic = Encoding.ASCII.GetBytes("GITMGRPK");
+ private const int FooterSize = 16;
+
+ private static (long Offset, long Length)? _info;
+ private static bool _checked;
+
+ /// Position und Länge des ZIPs in dieser .exe, oder null (z. B. beim Deinstallationsprogramm).
+ public static (long Offset, long Length)? Info
+ {
+ get
+ {
+ if (_checked) return _info;
+ _checked = true;
+ try
+ {
+ using var f = File.OpenRead(Installer.SelfPath);
+ if (f.Length < FooterSize) return null;
+ f.Seek(-FooterSize, SeekOrigin.End);
+ var footer = new byte[FooterSize];
+ if (f.Read(footer, 0, FooterSize) != FooterSize) return null;
+ for (int i = 0; i < Magic.Length; i++)
+ if (footer[8 + i] != Magic[i]) return null;
+ long length = BitConverter.ToInt64(footer, 0);
+ long offset = f.Length - FooterSize - length;
+ if (length <= 0 || offset <= 0) return null;
+ _info = (offset, length);
+ }
+ catch { _info = null; }
+ return _info;
+ }
+ }
+
+ public static bool Exists => Info is not null;
+
+ /// Länge des eigentlichen Setup-Programms ohne Anhang.
+ public static long StubLength => Info?.Offset ?? new FileInfo(Installer.SelfPath).Length;
+
+ public static ZipArchive OpenArchive()
+ {
+ var info = Info ?? throw new InvalidOperationException("Die Installationsdaten fehlen in dieser Datei. Bitte das Setup neu herunterladen.");
+ var file = File.OpenRead(Installer.SelfPath);
+ return new ZipArchive(new SubStream(file, info.Offset, info.Length), ZipArchiveMode.Read, leaveOpen: false);
+ }
+
+ /// Nur-Lese-Ausschnitt einer Datei, damit ZipArchive den Anhang wie eine eigene Datei sieht.
+ private sealed class SubStream(Stream inner, long start, long length) : Stream
+ {
+ private long _pos;
+
+ public override bool CanRead => true;
+ public override bool CanSeek => true;
+ public override bool CanWrite => false;
+ public override long Length => length;
+
+ public override long Position
+ {
+ get => _pos;
+ set => _pos = Math.Max(0, Math.Min(value, length));
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ long left = length - _pos;
+ if (left <= 0) return 0;
+ if (count > left) count = (int)left;
+ inner.Position = start + _pos;
+ int n = inner.Read(buffer, offset, count);
+ _pos += n;
+ return n;
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ Position = origin switch
+ {
+ SeekOrigin.Begin => offset,
+ SeekOrigin.Current => _pos + offset,
+ _ => length + offset,
+ };
+ return _pos;
+ }
+
+ public override void Flush() { }
+ public override void SetLength(long value) => throw new NotSupportedException();
+ public override void Write(byte[] buffer, int offset, int count) => throw new NotSupportedException();
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing) inner.Dispose();
+ base.Dispose(disposing);
+ }
+ }
+}
diff --git a/installer/app.manifest b/installer/app.manifest
new file mode 100644
index 0000000..1e5bf8f
--- /dev/null
+++ b/installer/app.manifest
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true/pm
+ PerMonitorV2
+
+
+
diff --git a/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
new file mode 100644
index 0000000..3cf0af3
--- /dev/null
+++ b/installer/obj/Debug/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
diff --git a/installer/obj/Debug/net48/App.baml b/installer/obj/Debug/net48/App.baml
new file mode 100644
index 0000000..b44d510
Binary files /dev/null and b/installer/obj/Debug/net48/App.baml differ
diff --git a/installer/obj/Debug/net48/App.g.cs b/installer/obj/Debug/net48/App.g.cs
new file mode 100644
index 0000000..7467803
--- /dev/null
+++ b/installer/obj/Debug/net48/App.g.cs
@@ -0,0 +1,77 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "D722851FC43B542A95C365A4D89BC7E17AC3C32D"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace GitManagerSetup {
+
+
+ ///
+ /// App
+ ///
+ public partial class App : System.Windows.Application {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Git-Manager-GUI-Setup;V0.0.0.0;component/app.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\App.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ ///
+ /// Application Entry Point.
+ ///
+ [System.STAThreadAttribute()]
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public static void Main() {
+ GitManagerSetup.App app = new GitManagerSetup.App();
+ app.InitializeComponent();
+ app.Run();
+ }
+ }
+}
+
diff --git a/installer/obj/Debug/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config b/installer/obj/Debug/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config
new file mode 100644
index 0000000..ef94b7c
--- /dev/null
+++ b/installer/obj/Debug/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/installer/obj/Debug/net48/Git-Manager-GUI-Setup_MarkupCompile.cache b/installer/obj/Debug/net48/Git-Manager-GUI-Setup_MarkupCompile.cache
new file mode 100644
index 0000000..cc0b21d
--- /dev/null
+++ b/installer/obj/Debug/net48/Git-Manager-GUI-Setup_MarkupCompile.cache
@@ -0,0 +1,20 @@
+Git-Manager-GUI-Setup
+0.0.0.0
+
+winexe
+C#
+.cs
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Debug\net48\
+GitManagerSetup
+none
+false
+TRACE;DEBUG;NETFRAMEWORK;NET48;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451_OR_GREATER;NET452_OR_GREATER;NET46_OR_GREATER;NET461_OR_GREATER;NET462_OR_GREATER;NET47_OR_GREATER;NET471_OR_GREATER;NET472_OR_GREATER;NET48_OR_GREATER
+C:\Users\Viper\Desktop\git-manager-gui\installer\App.xaml
+41549299691
+
+8-482891414
+23-602304815
+MainWindow.xaml;Themes\Colors.Dark.xaml;Themes\Colors.Light.xaml;Themes\Controls.xaml;
+
+False
+
diff --git a/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfo.cs b/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfo.cs
new file mode 100644
index 0000000..0166173
--- /dev/null
+++ b/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("M_Viper")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) M_Viper")]
+[assembly: System.Reflection.AssemblyDescriptionAttribute("Installiert Git Manager GUI")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("0.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("Git Manager GUI Setup")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Git Manager GUI Setup")]
+[assembly: System.Reflection.AssemblyVersionAttribute("0.0.0.0")]
+[assembly: System.Resources.NeutralResourcesLanguageAttribute("de-DE")]
+
+// Von der MSBuild WriteCodeFragment-Klasse generiert.
+
diff --git a/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfoInputs.cache b/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..7245b55
--- /dev/null
+++ b/installer/obj/Debug/net48/GitManagerSetup.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+9c3aaae1d47c807c810117538379b6f2752577cee8cc71a0a6017da12833e788
diff --git a/installer/obj/Debug/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig b/installer/obj/Debug/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..34f0195
--- /dev/null
+++ b/installer/obj/Debug/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,14 @@
+is_global = true
+build_property.ApplicationManifest = app.manifest
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.RootNamespace = GitManagerSetup
+build_property.ProjectDir = C:\Users\Viper\Desktop\git-manager-gui\installer\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle =
+build_property.EnableCodeStyleSeverity =
diff --git a/installer/obj/Debug/net48/GitManagerSetup.GlobalUsings.g.cs b/installer/obj/Debug/net48/GitManagerSetup.GlobalUsings.g.cs
new file mode 100644
index 0000000..4a15929
--- /dev/null
+++ b/installer/obj/Debug/net48/GitManagerSetup.GlobalUsings.g.cs
@@ -0,0 +1,6 @@
+//
+global using System;
+global using System.Collections.Generic;
+global using System.Linq;
+global using System.Threading;
+global using System.Threading.Tasks;
diff --git a/installer/obj/Debug/net48/GitManagerSetup.assets.cache b/installer/obj/Debug/net48/GitManagerSetup.assets.cache
new file mode 100644
index 0000000..2d4bacf
Binary files /dev/null and b/installer/obj/Debug/net48/GitManagerSetup.assets.cache differ
diff --git a/installer/obj/Debug/net48/GitManagerSetup.csproj.AssemblyReference.cache b/installer/obj/Debug/net48/GitManagerSetup.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..40251b2
Binary files /dev/null and b/installer/obj/Debug/net48/GitManagerSetup.csproj.AssemblyReference.cache differ
diff --git a/installer/obj/Debug/net48/MainWindow.baml b/installer/obj/Debug/net48/MainWindow.baml
new file mode 100644
index 0000000..68d3865
Binary files /dev/null and b/installer/obj/Debug/net48/MainWindow.baml differ
diff --git a/installer/obj/Debug/net48/MainWindow.g.cs b/installer/obj/Debug/net48/MainWindow.g.cs
new file mode 100644
index 0000000..58a1983
--- /dev/null
+++ b/installer/obj/Debug/net48/MainWindow.g.cs
@@ -0,0 +1,676 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "248163D303017091F6C4A571FD0B5DF4D5DBF414"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace GitManagerSetup {
+
+
+ ///
+ /// MainWindow
+ ///
+ public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+
+
+ #line 140 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock VersionText;
+
+ #line default
+ #line hidden
+
+
+ #line 142 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel Steps;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot0;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num0;
+
+ #line default
+ #line hidden
+
+
+ #line 145 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label0;
+
+ #line default
+ #line hidden
+
+
+ #line 147 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line0;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot1;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num1;
+
+ #line default
+ #line hidden
+
+
+ #line 150 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label1;
+
+ #line default
+ #line hidden
+
+
+ #line 152 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line1;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot2;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num2;
+
+ #line default
+ #line hidden
+
+
+ #line 155 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label2;
+
+ #line default
+ #line hidden
+
+
+ #line 168 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock WindowTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 174 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CloseButton;
+
+ #line default
+ #line hidden
+
+
+ #line 182 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageWelcome;
+
+ #line default
+ #line hidden
+
+
+ #line 229 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border UpdateHint;
+
+ #line default
+ #line hidden
+
+
+ #line 234 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock UpdateHintText;
+
+ #line default
+ #line hidden
+
+
+ #line 237 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border RunningHint;
+
+ #line default
+ #line hidden
+
+
+ #line 249 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageOptions;
+
+ #line default
+ #line hidden
+
+
+ #line 258 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBox DirBox;
+
+ #line default
+ #line hidden
+
+
+ #line 267 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox DesktopLinkBox;
+
+ #line default
+ #line hidden
+
+
+ #line 273 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageProgress;
+
+ #line default
+ #line hidden
+
+
+ #line 274 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border SuccessIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 276 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform SuccessScale;
+
+ #line default
+ #line hidden
+
+
+ #line 281 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 283 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel ProgressBarPanel;
+
+ #line default
+ #line hidden
+
+
+ #line 284 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock PercentText;
+
+ #line default
+ #line hidden
+
+
+ #line 286 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressTrack;
+
+ #line default
+ #line hidden
+
+
+ #line 287 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressFill;
+
+ #line default
+ #line hidden
+
+
+ #line 290 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressText;
+
+ #line default
+ #line hidden
+
+
+ #line 292 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel DonePanel;
+
+ #line default
+ #line hidden
+
+
+ #line 293 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox LaunchBox;
+
+ #line default
+ #line hidden
+
+
+ #line 298 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageUninstall;
+
+ #line default
+ #line hidden
+
+
+ #line 309 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DataInfo;
+
+ #line default
+ #line hidden
+
+
+ #line 310 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox RemoveDataBox;
+
+ #line default
+ #line hidden
+
+
+ #line 312 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock RemoveDataWarning;
+
+ #line default
+ #line hidden
+
+
+ #line 322 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button BackButton;
+
+ #line default
+ #line hidden
+
+
+ #line 323 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button NextButton;
+
+ #line default
+ #line hidden
+
+
+ #line 324 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CancelButton;
+
+ #line default
+ #line hidden
+
+
+ #line 328 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Grid DialogOverlay;
+
+ #line default
+ #line hidden
+
+
+ #line 329 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border DialogCard;
+
+ #line default
+ #line hidden
+
+
+ #line 332 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform DialogScale;
+
+ #line default
+ #line hidden
+
+
+ #line 336 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 339 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 342 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogText;
+
+ #line default
+ #line hidden
+
+
+ #line 345 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogSecondary;
+
+ #line default
+ #line hidden
+
+
+ #line 346 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogPrimary;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Git-Manager-GUI-Setup;V0.0.0.0;component/mainwindow.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\MainWindow.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.VersionText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 2:
+ this.Steps = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 3:
+ this.Dot0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 4:
+ this.Num0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 5:
+ this.Label0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 6:
+ this.Line0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 7:
+ this.Dot1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 8:
+ this.Num1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 9:
+ this.Label1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 10:
+ this.Line1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 11:
+ this.Dot2 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 12:
+ this.Num2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 13:
+ this.Label2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 14:
+ this.WindowTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 15:
+
+ #line 172 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Minimize_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 16:
+ this.CloseButton = ((System.Windows.Controls.Button)(target));
+
+ #line 174 "..\..\..\MainWindow.xaml"
+ this.CloseButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 17:
+ this.PageWelcome = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 18:
+ this.UpdateHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 19:
+ this.UpdateHintText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 20:
+ this.RunningHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 21:
+ this.PageOptions = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 22:
+
+ #line 257 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ChangeDir_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 23:
+ this.DirBox = ((System.Windows.Controls.TextBox)(target));
+ return;
+ case 24:
+ this.DesktopLinkBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 25:
+ this.PageProgress = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 26:
+ this.SuccessIcon = ((System.Windows.Controls.Border)(target));
+ return;
+ case 27:
+ this.SuccessScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 28:
+ this.ProgressTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 29:
+ this.ProgressBarPanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 30:
+ this.PercentText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 31:
+ this.ProgressTrack = ((System.Windows.Controls.Border)(target));
+
+ #line 286 "..\..\..\MainWindow.xaml"
+ this.ProgressTrack.SizeChanged += new System.Windows.SizeChangedEventHandler(this.ProgressTrack_SizeChanged);
+
+ #line default
+ #line hidden
+ return;
+ case 32:
+ this.ProgressFill = ((System.Windows.Controls.Border)(target));
+ return;
+ case 33:
+ this.ProgressText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 34:
+ this.DonePanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 35:
+ this.LaunchBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 36:
+ this.PageUninstall = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 37:
+ this.DataInfo = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 38:
+ this.RemoveDataBox = ((System.Windows.Controls.CheckBox)(target));
+
+ #line 311 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Checked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+
+ #line 311 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Unchecked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 39:
+ this.RemoveDataWarning = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 40:
+ this.BackButton = ((System.Windows.Controls.Button)(target));
+
+ #line 322 "..\..\..\MainWindow.xaml"
+ this.BackButton.Click += new System.Windows.RoutedEventHandler(this.Back_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 41:
+ this.NextButton = ((System.Windows.Controls.Button)(target));
+
+ #line 323 "..\..\..\MainWindow.xaml"
+ this.NextButton.Click += new System.Windows.RoutedEventHandler(this.Next_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 42:
+ this.CancelButton = ((System.Windows.Controls.Button)(target));
+
+ #line 324 "..\..\..\MainWindow.xaml"
+ this.CancelButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 43:
+ this.DialogOverlay = ((System.Windows.Controls.Grid)(target));
+ return;
+ case 44:
+ this.DialogCard = ((System.Windows.Controls.Border)(target));
+ return;
+ case 45:
+ this.DialogScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 46:
+ this.DialogIcon = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 47:
+ this.DialogTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 48:
+ this.DialogText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 49:
+ this.DialogSecondary = ((System.Windows.Controls.Button)(target));
+
+ #line 345 "..\..\..\MainWindow.xaml"
+ this.DialogSecondary.Click += new System.Windows.RoutedEventHandler(this.DialogSecondary_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 50:
+ this.DialogPrimary = ((System.Windows.Controls.Button)(target));
+
+ #line 346 "..\..\..\MainWindow.xaml"
+ this.DialogPrimary.Click += new System.Windows.RoutedEventHandler(this.DialogPrimary_Click);
+
+ #line default
+ #line hidden
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/installer/obj/Debug/net48/Themes/Colors.Dark.baml b/installer/obj/Debug/net48/Themes/Colors.Dark.baml
new file mode 100644
index 0000000..3637503
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Colors.Dark.baml differ
diff --git a/installer/obj/Debug/net48/Themes/Colors.Light.baml b/installer/obj/Debug/net48/Themes/Colors.Light.baml
new file mode 100644
index 0000000..c7067f2
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Colors.Light.baml differ
diff --git a/installer/obj/Debug/net48/Themes/Controls.baml b/installer/obj/Debug/net48/Themes/Controls.baml
new file mode 100644
index 0000000..91e3ed8
Binary files /dev/null and b/installer/obj/Debug/net48/Themes/Controls.baml differ
diff --git a/installer/obj/GitManagerSetup.csproj.nuget.dgspec.json b/installer/obj/GitManagerSetup.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..76fece6
--- /dev/null
+++ b/installer/obj/GitManagerSetup.csproj.nuget.dgspec.json
@@ -0,0 +1,59 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj": {
+ "version": "0.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj",
+ "projectName": "Git-Manager-GUI-Setup",
+ "projectPath": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj",
+ "packagesPath": "C:\\Users\\Viper\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\Viper\\AppData\\Roaming\\NuGet\\NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net48"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net48": {
+ "targetAlias": "net48",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ },
+ "SdkAnalysisLevel": "10.0.100"
+ },
+ "frameworks": {
+ "net48": {
+ "targetAlias": "net48",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "suppressParent": "All",
+ "target": "Package",
+ "version": "[1.0.3, )",
+ "autoReferenced": true
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.113\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/installer/obj/GitManagerSetup.csproj.nuget.g.props b/installer/obj/GitManagerSetup.csproj.nuget.g.props
new file mode 100644
index 0000000..5db7e09
--- /dev/null
+++ b/installer/obj/GitManagerSetup.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\Viper\.nuget\packages\
+ PackageReference
+ 7.0.0
+
+
+
+
+
\ No newline at end of file
diff --git a/installer/obj/GitManagerSetup.csproj.nuget.g.targets b/installer/obj/GitManagerSetup.csproj.nuget.g.targets
new file mode 100644
index 0000000..83f7de5
--- /dev/null
+++ b/installer/obj/GitManagerSetup.csproj.nuget.g.targets
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/installer/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/installer/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
new file mode 100644
index 0000000..3cf0af3
--- /dev/null
+++ b/installer/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
diff --git a/installer/obj/Release/net48/App.baml b/installer/obj/Release/net48/App.baml
new file mode 100644
index 0000000..73b04fe
Binary files /dev/null and b/installer/obj/Release/net48/App.baml differ
diff --git a/installer/obj/Release/net48/App.g.cs b/installer/obj/Release/net48/App.g.cs
new file mode 100644
index 0000000..ed272bc
--- /dev/null
+++ b/installer/obj/Release/net48/App.g.cs
@@ -0,0 +1,77 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "D722851FC43B542A95C365A4D89BC7E17AC3C32D"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace GitManagerSetup {
+
+
+ ///
+ /// App
+ ///
+ public partial class App : System.Windows.Application {
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Git-Manager-GUI-Setup;component/app.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\App.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ ///
+ /// Application Entry Point.
+ ///
+ [System.STAThreadAttribute()]
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public static void Main() {
+ GitManagerSetup.App app = new GitManagerSetup.App();
+ app.InitializeComponent();
+ app.Run();
+ }
+ }
+}
+
diff --git a/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe b/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe
new file mode 100644
index 0000000..d6c1479
Binary files /dev/null and b/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe differ
diff --git a/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config b/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config
new file mode 100644
index 0000000..ef94b7c
--- /dev/null
+++ b/installer/obj/Release/net48/Git-Manager-GUI-Setup.exe.withSupportedRuntime.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/installer/obj/Release/net48/Git-Manager-GUI-Setup.g.resources b/installer/obj/Release/net48/Git-Manager-GUI-Setup.g.resources
new file mode 100644
index 0000000..67681d5
Binary files /dev/null and b/installer/obj/Release/net48/Git-Manager-GUI-Setup.g.resources differ
diff --git a/installer/obj/Release/net48/Git-Manager-GUI-Setup_MarkupCompile.cache b/installer/obj/Release/net48/Git-Manager-GUI-Setup_MarkupCompile.cache
new file mode 100644
index 0000000..b327efc
--- /dev/null
+++ b/installer/obj/Release/net48/Git-Manager-GUI-Setup_MarkupCompile.cache
@@ -0,0 +1,20 @@
+Git-Manager-GUI-Setup
+
+
+winexe
+C#
+.cs
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\
+GitManagerSetup
+none
+false
+TRACE;RELEASE;NETFRAMEWORK;NET48;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451_OR_GREATER;NET452_OR_GREATER;NET46_OR_GREATER;NET461_OR_GREATER;NET462_OR_GREATER;NET47_OR_GREATER;NET471_OR_GREATER;NET472_OR_GREATER;NET48_OR_GREATER
+C:\Users\Viper\Desktop\git-manager-gui\installer\App.xaml
+41549299691
+
+6-1705775420
+23-602304815
+MainWindow.xaml;Themes\Colors.Dark.xaml;Themes\Colors.Light.xaml;Themes\Controls.xaml;
+
+False
+
diff --git a/installer/obj/Release/net48/GitManagerSetup.AssemblyInfo.cs b/installer/obj/Release/net48/GitManagerSetup.AssemblyInfo.cs
new file mode 100644
index 0000000..d923844
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("M_Viper")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
+[assembly: System.Reflection.AssemblyCopyrightAttribute("Copyright (c) M_Viper")]
+[assembly: System.Reflection.AssemblyDescriptionAttribute("Installiert Git Manager GUI")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("2.2.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("2.2.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("Git Manager GUI Setup")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Git Manager GUI Setup")]
+[assembly: System.Reflection.AssemblyVersionAttribute("2.2.0.0")]
+[assembly: System.Resources.NeutralResourcesLanguageAttribute("de-DE")]
+
+// Von der MSBuild WriteCodeFragment-Klasse generiert.
+
diff --git a/installer/obj/Release/net48/GitManagerSetup.AssemblyInfoInputs.cache b/installer/obj/Release/net48/GitManagerSetup.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..b6cd7bc
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+62f4b9ac7b1430e3a52ef9dfe2e8422ccd7cc5a7e41145550122532f56db4abe
diff --git a/installer/obj/Release/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig b/installer/obj/Release/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..34f0195
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,14 @@
+is_global = true
+build_property.ApplicationManifest = app.manifest
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.RootNamespace = GitManagerSetup
+build_property.ProjectDir = C:\Users\Viper\Desktop\git-manager-gui\installer\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle =
+build_property.EnableCodeStyleSeverity =
diff --git a/installer/obj/Release/net48/GitManagerSetup.GlobalUsings.g.cs b/installer/obj/Release/net48/GitManagerSetup.GlobalUsings.g.cs
new file mode 100644
index 0000000..4a15929
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.GlobalUsings.g.cs
@@ -0,0 +1,6 @@
+//
+global using System;
+global using System.Collections.Generic;
+global using System.Linq;
+global using System.Threading;
+global using System.Threading.Tasks;
diff --git a/installer/obj/Release/net48/GitManagerSetup.assets.cache b/installer/obj/Release/net48/GitManagerSetup.assets.cache
new file mode 100644
index 0000000..0c1b55a
Binary files /dev/null and b/installer/obj/Release/net48/GitManagerSetup.assets.cache differ
diff --git a/installer/obj/Release/net48/GitManagerSetup.csproj.AssemblyReference.cache b/installer/obj/Release/net48/GitManagerSetup.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..d98f65c
Binary files /dev/null and b/installer/obj/Release/net48/GitManagerSetup.csproj.AssemblyReference.cache differ
diff --git a/installer/obj/Release/net48/GitManagerSetup.csproj.CoreCompileInputs.cache b/installer/obj/Release/net48/GitManagerSetup.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..323a079
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+4e41dc5e237f26559d3c4bd8208c813ba09bdba804615d78813773d6b0be3d1d
diff --git a/installer/obj/Release/net48/GitManagerSetup.csproj.FileListAbsolute.txt b/installer/obj/Release/net48/GitManagerSetup.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..9e30424
--- /dev/null
+++ b/installer/obj/Release/net48/GitManagerSetup.csproj.FileListAbsolute.txt
@@ -0,0 +1,19 @@
+C:\Users\Viper\AppData\Local\Temp\claude\G--\bba0d154-b599-43ca-80e6-538e01f4f870\scratchpad\setupbuild\Git-Manager-GUI-Setup.exe.config
+C:\Users\Viper\AppData\Local\Temp\claude\G--\bba0d154-b599-43ca-80e6-538e01f4f870\scratchpad\setupbuild\Git-Manager-GUI-Setup.exe
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\GitManagerSetup.csproj.AssemblyReference.cache
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\MainWindow.baml
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Themes\Colors.Dark.baml
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Themes\Colors.Light.baml
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Themes\Controls.baml
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\App.baml
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\MainWindow.g.cs
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\App.g.cs
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Git-Manager-GUI-Setup_MarkupCompile.cache
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Git-Manager-GUI-Setup.g.resources
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\GitManagerSetup.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\GitManagerSetup.AssemblyInfoInputs.cache
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\GitManagerSetup.AssemblyInfo.cs
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\GitManagerSetup.csproj.CoreCompileInputs.cache
+C:\Users\Viper\Desktop\git-manager-gui\installer\obj\Release\net48\Git-Manager-GUI-Setup.exe
+C:\Users\Viper\Desktop\git-manager-gui\dist\.setup\stub\Git-Manager-GUI-Setup.exe.config
+C:\Users\Viper\Desktop\git-manager-gui\dist\.setup\stub\Git-Manager-GUI-Setup.exe
diff --git a/installer/obj/Release/net48/MainWindow.baml b/installer/obj/Release/net48/MainWindow.baml
new file mode 100644
index 0000000..1430747
Binary files /dev/null and b/installer/obj/Release/net48/MainWindow.baml differ
diff --git a/installer/obj/Release/net48/MainWindow.g.cs b/installer/obj/Release/net48/MainWindow.g.cs
new file mode 100644
index 0000000..7b524ef
--- /dev/null
+++ b/installer/obj/Release/net48/MainWindow.g.cs
@@ -0,0 +1,676 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "248163D303017091F6C4A571FD0B5DF4D5DBF414"
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+
+
+namespace GitManagerSetup {
+
+
+ ///
+ /// MainWindow
+ ///
+ public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+
+
+ #line 140 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock VersionText;
+
+ #line default
+ #line hidden
+
+
+ #line 142 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel Steps;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot0;
+
+ #line default
+ #line hidden
+
+
+ #line 144 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num0;
+
+ #line default
+ #line hidden
+
+
+ #line 145 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label0;
+
+ #line default
+ #line hidden
+
+
+ #line 147 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line0;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot1;
+
+ #line default
+ #line hidden
+
+
+ #line 149 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num1;
+
+ #line default
+ #line hidden
+
+
+ #line 150 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label1;
+
+ #line default
+ #line hidden
+
+
+ #line 152 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Line1;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border Dot2;
+
+ #line default
+ #line hidden
+
+
+ #line 154 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Num2;
+
+ #line default
+ #line hidden
+
+
+ #line 155 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock Label2;
+
+ #line default
+ #line hidden
+
+
+ #line 168 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock WindowTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 174 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CloseButton;
+
+ #line default
+ #line hidden
+
+
+ #line 182 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageWelcome;
+
+ #line default
+ #line hidden
+
+
+ #line 229 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border UpdateHint;
+
+ #line default
+ #line hidden
+
+
+ #line 234 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock UpdateHintText;
+
+ #line default
+ #line hidden
+
+
+ #line 237 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border RunningHint;
+
+ #line default
+ #line hidden
+
+
+ #line 249 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageOptions;
+
+ #line default
+ #line hidden
+
+
+ #line 258 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBox DirBox;
+
+ #line default
+ #line hidden
+
+
+ #line 267 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox DesktopLinkBox;
+
+ #line default
+ #line hidden
+
+
+ #line 273 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageProgress;
+
+ #line default
+ #line hidden
+
+
+ #line 274 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border SuccessIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 276 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform SuccessScale;
+
+ #line default
+ #line hidden
+
+
+ #line 281 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 283 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel ProgressBarPanel;
+
+ #line default
+ #line hidden
+
+
+ #line 284 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock PercentText;
+
+ #line default
+ #line hidden
+
+
+ #line 286 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressTrack;
+
+ #line default
+ #line hidden
+
+
+ #line 287 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border ProgressFill;
+
+ #line default
+ #line hidden
+
+
+ #line 290 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock ProgressText;
+
+ #line default
+ #line hidden
+
+
+ #line 292 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel DonePanel;
+
+ #line default
+ #line hidden
+
+
+ #line 293 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox LaunchBox;
+
+ #line default
+ #line hidden
+
+
+ #line 298 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.StackPanel PageUninstall;
+
+ #line default
+ #line hidden
+
+
+ #line 309 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DataInfo;
+
+ #line default
+ #line hidden
+
+
+ #line 310 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.CheckBox RemoveDataBox;
+
+ #line default
+ #line hidden
+
+
+ #line 312 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock RemoveDataWarning;
+
+ #line default
+ #line hidden
+
+
+ #line 322 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button BackButton;
+
+ #line default
+ #line hidden
+
+
+ #line 323 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button NextButton;
+
+ #line default
+ #line hidden
+
+
+ #line 324 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button CancelButton;
+
+ #line default
+ #line hidden
+
+
+ #line 328 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Grid DialogOverlay;
+
+ #line default
+ #line hidden
+
+
+ #line 329 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Border DialogCard;
+
+ #line default
+ #line hidden
+
+
+ #line 332 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Media.ScaleTransform DialogScale;
+
+ #line default
+ #line hidden
+
+
+ #line 336 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogIcon;
+
+ #line default
+ #line hidden
+
+
+ #line 339 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogTitle;
+
+ #line default
+ #line hidden
+
+
+ #line 342 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.TextBlock DialogText;
+
+ #line default
+ #line hidden
+
+
+ #line 345 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogSecondary;
+
+ #line default
+ #line hidden
+
+
+ #line 346 "..\..\..\MainWindow.xaml"
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+ internal System.Windows.Controls.Button DialogPrimary;
+
+ #line default
+ #line hidden
+
+ private bool _contentLoaded;
+
+ ///
+ /// InitializeComponent
+ ///
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ public void InitializeComponent() {
+ if (_contentLoaded) {
+ return;
+ }
+ _contentLoaded = true;
+ System.Uri resourceLocater = new System.Uri("/Git-Manager-GUI-Setup;component/mainwindow.xaml", System.UriKind.Relative);
+
+ #line 1 "..\..\..\MainWindow.xaml"
+ System.Windows.Application.LoadComponent(this, resourceLocater);
+
+ #line default
+ #line hidden
+ }
+
+ [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.13.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+ void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+ switch (connectionId)
+ {
+ case 1:
+ this.VersionText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 2:
+ this.Steps = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 3:
+ this.Dot0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 4:
+ this.Num0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 5:
+ this.Label0 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 6:
+ this.Line0 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 7:
+ this.Dot1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 8:
+ this.Num1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 9:
+ this.Label1 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 10:
+ this.Line1 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 11:
+ this.Dot2 = ((System.Windows.Controls.Border)(target));
+ return;
+ case 12:
+ this.Num2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 13:
+ this.Label2 = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 14:
+ this.WindowTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 15:
+
+ #line 172 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Minimize_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 16:
+ this.CloseButton = ((System.Windows.Controls.Button)(target));
+
+ #line 174 "..\..\..\MainWindow.xaml"
+ this.CloseButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 17:
+ this.PageWelcome = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 18:
+ this.UpdateHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 19:
+ this.UpdateHintText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 20:
+ this.RunningHint = ((System.Windows.Controls.Border)(target));
+ return;
+ case 21:
+ this.PageOptions = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 22:
+
+ #line 257 "..\..\..\MainWindow.xaml"
+ ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.ChangeDir_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 23:
+ this.DirBox = ((System.Windows.Controls.TextBox)(target));
+ return;
+ case 24:
+ this.DesktopLinkBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 25:
+ this.PageProgress = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 26:
+ this.SuccessIcon = ((System.Windows.Controls.Border)(target));
+ return;
+ case 27:
+ this.SuccessScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 28:
+ this.ProgressTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 29:
+ this.ProgressBarPanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 30:
+ this.PercentText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 31:
+ this.ProgressTrack = ((System.Windows.Controls.Border)(target));
+
+ #line 286 "..\..\..\MainWindow.xaml"
+ this.ProgressTrack.SizeChanged += new System.Windows.SizeChangedEventHandler(this.ProgressTrack_SizeChanged);
+
+ #line default
+ #line hidden
+ return;
+ case 32:
+ this.ProgressFill = ((System.Windows.Controls.Border)(target));
+ return;
+ case 33:
+ this.ProgressText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 34:
+ this.DonePanel = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 35:
+ this.LaunchBox = ((System.Windows.Controls.CheckBox)(target));
+ return;
+ case 36:
+ this.PageUninstall = ((System.Windows.Controls.StackPanel)(target));
+ return;
+ case 37:
+ this.DataInfo = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 38:
+ this.RemoveDataBox = ((System.Windows.Controls.CheckBox)(target));
+
+ #line 311 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Checked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+
+ #line 311 "..\..\..\MainWindow.xaml"
+ this.RemoveDataBox.Unchecked += new System.Windows.RoutedEventHandler(this.RemoveDataBox_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 39:
+ this.RemoveDataWarning = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 40:
+ this.BackButton = ((System.Windows.Controls.Button)(target));
+
+ #line 322 "..\..\..\MainWindow.xaml"
+ this.BackButton.Click += new System.Windows.RoutedEventHandler(this.Back_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 41:
+ this.NextButton = ((System.Windows.Controls.Button)(target));
+
+ #line 323 "..\..\..\MainWindow.xaml"
+ this.NextButton.Click += new System.Windows.RoutedEventHandler(this.Next_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 42:
+ this.CancelButton = ((System.Windows.Controls.Button)(target));
+
+ #line 324 "..\..\..\MainWindow.xaml"
+ this.CancelButton.Click += new System.Windows.RoutedEventHandler(this.Cancel_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 43:
+ this.DialogOverlay = ((System.Windows.Controls.Grid)(target));
+ return;
+ case 44:
+ this.DialogCard = ((System.Windows.Controls.Border)(target));
+ return;
+ case 45:
+ this.DialogScale = ((System.Windows.Media.ScaleTransform)(target));
+ return;
+ case 46:
+ this.DialogIcon = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 47:
+ this.DialogTitle = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 48:
+ this.DialogText = ((System.Windows.Controls.TextBlock)(target));
+ return;
+ case 49:
+ this.DialogSecondary = ((System.Windows.Controls.Button)(target));
+
+ #line 345 "..\..\..\MainWindow.xaml"
+ this.DialogSecondary.Click += new System.Windows.RoutedEventHandler(this.DialogSecondary_Click);
+
+ #line default
+ #line hidden
+ return;
+ case 50:
+ this.DialogPrimary = ((System.Windows.Controls.Button)(target));
+
+ #line 346 "..\..\..\MainWindow.xaml"
+ this.DialogPrimary.Click += new System.Windows.RoutedEventHandler(this.DialogPrimary_Click);
+
+ #line default
+ #line hidden
+ return;
+ }
+ this._contentLoaded = true;
+ }
+ }
+}
+
diff --git a/installer/obj/Release/net48/Themes/Colors.Dark.baml b/installer/obj/Release/net48/Themes/Colors.Dark.baml
new file mode 100644
index 0000000..17c32ce
Binary files /dev/null and b/installer/obj/Release/net48/Themes/Colors.Dark.baml differ
diff --git a/installer/obj/Release/net48/Themes/Colors.Light.baml b/installer/obj/Release/net48/Themes/Colors.Light.baml
new file mode 100644
index 0000000..8d10637
Binary files /dev/null and b/installer/obj/Release/net48/Themes/Colors.Light.baml differ
diff --git a/installer/obj/Release/net48/Themes/Controls.baml b/installer/obj/Release/net48/Themes/Controls.baml
new file mode 100644
index 0000000..e82be68
Binary files /dev/null and b/installer/obj/Release/net48/Themes/Controls.baml differ
diff --git a/installer/obj/project.assets.json b/installer/obj/project.assets.json
new file mode 100644
index 0000000..439b699
--- /dev/null
+++ b/installer/obj/project.assets.json
@@ -0,0 +1,471 @@
+{
+ "version": 3,
+ "targets": {
+ ".NETFramework,Version=v4.8": {
+ "Microsoft.NETFramework.ReferenceAssemblies/1.0.3": {
+ "type": "package",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3"
+ }
+ },
+ "Microsoft.NETFramework.ReferenceAssemblies.net48/1.0.3": {
+ "type": "package",
+ "build": {
+ "build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Microsoft.NETFramework.ReferenceAssemblies/1.0.3": {
+ "sha512": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==",
+ "type": "package",
+ "path": "microsoft.netframework.referenceassemblies/1.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512",
+ "microsoft.netframework.referenceassemblies.nuspec"
+ ]
+ },
+ "Microsoft.NETFramework.ReferenceAssemblies.net48/1.0.3": {
+ "sha512": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==",
+ "type": "package",
+ "path": "microsoft.netframework.referenceassemblies.net48/1.0.3",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "build/.NETFramework/v4.8/Accessibility.dll",
+ "build/.NETFramework/v4.8/Accessibility.xml",
+ "build/.NETFramework/v4.8/CustomMarshalers.dll",
+ "build/.NETFramework/v4.8/CustomMarshalers.xml",
+ "build/.NETFramework/v4.8/Facades/Microsoft.Win32.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.AppContext.dll",
+ "build/.NETFramework/v4.8/Facades/System.Collections.Concurrent.dll",
+ "build/.NETFramework/v4.8/Facades/System.Collections.NonGeneric.dll",
+ "build/.NETFramework/v4.8/Facades/System.Collections.Specialized.dll",
+ "build/.NETFramework/v4.8/Facades/System.Collections.dll",
+ "build/.NETFramework/v4.8/Facades/System.ComponentModel.Annotations.dll",
+ "build/.NETFramework/v4.8/Facades/System.ComponentModel.EventBasedAsync.dll",
+ "build/.NETFramework/v4.8/Facades/System.ComponentModel.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.ComponentModel.TypeConverter.dll",
+ "build/.NETFramework/v4.8/Facades/System.ComponentModel.dll",
+ "build/.NETFramework/v4.8/Facades/System.Console.dll",
+ "build/.NETFramework/v4.8/Facades/System.Data.Common.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.Contracts.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.Debug.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.FileVersionInfo.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.Process.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.StackTrace.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.TextWriterTraceListener.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.Tools.dll",
+ "build/.NETFramework/v4.8/Facades/System.Diagnostics.TraceSource.dll",
+ "build/.NETFramework/v4.8/Facades/System.Drawing.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.Dynamic.Runtime.dll",
+ "build/.NETFramework/v4.8/Facades/System.Globalization.Calendars.dll",
+ "build/.NETFramework/v4.8/Facades/System.Globalization.Extensions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Globalization.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.Compression.ZipFile.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.DriveInfo.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Watcher.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.IsolatedStorage.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.MemoryMappedFiles.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.Pipes.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.UnmanagedMemoryStream.dll",
+ "build/.NETFramework/v4.8/Facades/System.IO.dll",
+ "build/.NETFramework/v4.8/Facades/System.Linq.Expressions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Linq.Parallel.dll",
+ "build/.NETFramework/v4.8/Facades/System.Linq.Queryable.dll",
+ "build/.NETFramework/v4.8/Facades/System.Linq.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Http.Rtc.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.NameResolution.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.NetworkInformation.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Ping.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Requests.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Security.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.Sockets.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.WebHeaderCollection.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.WebSockets.Client.dll",
+ "build/.NETFramework/v4.8/Facades/System.Net.WebSockets.dll",
+ "build/.NETFramework/v4.8/Facades/System.ObjectModel.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.ILGeneration.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.Lightweight.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.Extensions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.Reflection.dll",
+ "build/.NETFramework/v4.8/Facades/System.Resources.Reader.dll",
+ "build/.NETFramework/v4.8/Facades/System.Resources.ResourceManager.dll",
+ "build/.NETFramework/v4.8/Facades/System.Resources.Writer.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.CompilerServices.VisualC.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Extensions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Handles.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.RuntimeInformation.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.WindowsRuntime.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Numerics.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Formatters.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Json.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Xml.dll",
+ "build/.NETFramework/v4.8/Facades/System.Runtime.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Claims.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Algorithms.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Csp.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Encoding.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.X509Certificates.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.Principal.dll",
+ "build/.NETFramework/v4.8/Facades/System.Security.SecureString.dll",
+ "build/.NETFramework/v4.8/Facades/System.ServiceModel.Duplex.dll",
+ "build/.NETFramework/v4.8/Facades/System.ServiceModel.Http.dll",
+ "build/.NETFramework/v4.8/Facades/System.ServiceModel.NetTcp.dll",
+ "build/.NETFramework/v4.8/Facades/System.ServiceModel.Primitives.dll",
+ "build/.NETFramework/v4.8/Facades/System.ServiceModel.Security.dll",
+ "build/.NETFramework/v4.8/Facades/System.Text.Encoding.Extensions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Text.Encoding.dll",
+ "build/.NETFramework/v4.8/Facades/System.Text.RegularExpressions.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.Overlapped.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.Tasks.Parallel.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.Tasks.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.Thread.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.ThreadPool.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.Timer.dll",
+ "build/.NETFramework/v4.8/Facades/System.Threading.dll",
+ "build/.NETFramework/v4.8/Facades/System.ValueTuple.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.ReaderWriter.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.XDocument.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.XPath.XDocument.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.XPath.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.XmlDocument.dll",
+ "build/.NETFramework/v4.8/Facades/System.Xml.XmlSerializer.dll",
+ "build/.NETFramework/v4.8/Facades/netstandard.dll",
+ "build/.NETFramework/v4.8/ISymWrapper.dll",
+ "build/.NETFramework/v4.8/ISymWrapper.xml",
+ "build/.NETFramework/v4.8/Microsoft.Activities.Build.dll",
+ "build/.NETFramework/v4.8/Microsoft.Activities.Build.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.Engine.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.Engine.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.Framework.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.Framework.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.xml",
+ "build/.NETFramework/v4.8/Microsoft.Build.dll",
+ "build/.NETFramework/v4.8/Microsoft.Build.xml",
+ "build/.NETFramework/v4.8/Microsoft.CSharp.dll",
+ "build/.NETFramework/v4.8/Microsoft.CSharp.xml",
+ "build/.NETFramework/v4.8/Microsoft.JScript.dll",
+ "build/.NETFramework/v4.8/Microsoft.JScript.xml",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.dll",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.xml",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.dll",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.xml",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.dll",
+ "build/.NETFramework/v4.8/Microsoft.VisualBasic.xml",
+ "build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.dll",
+ "build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.xml",
+ "build/.NETFramework/v4.8/Microsoft.VisualC.dll",
+ "build/.NETFramework/v4.8/Microsoft.VisualC.xml",
+ "build/.NETFramework/v4.8/PermissionSets/FullTrust.xml",
+ "build/.NETFramework/v4.8/PermissionSets/Internet.xml",
+ "build/.NETFramework/v4.8/PermissionSets/LocalIntranet.xml",
+ "build/.NETFramework/v4.8/PresentationBuildTasks.dll",
+ "build/.NETFramework/v4.8/PresentationBuildTasks.xml",
+ "build/.NETFramework/v4.8/PresentationCore.dll",
+ "build/.NETFramework/v4.8/PresentationCore.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.Aero.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.Aero.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.Aero2.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.Aero2.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.AeroLite.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.AeroLite.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.Classic.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.Classic.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.Luna.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.Luna.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.Royale.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.Royale.xml",
+ "build/.NETFramework/v4.8/PresentationFramework.dll",
+ "build/.NETFramework/v4.8/PresentationFramework.xml",
+ "build/.NETFramework/v4.8/ReachFramework.dll",
+ "build/.NETFramework/v4.8/ReachFramework.xml",
+ "build/.NETFramework/v4.8/RedistList/FrameworkList.xml",
+ "build/.NETFramework/v4.8/System.Activities.Core.Presentation.dll",
+ "build/.NETFramework/v4.8/System.Activities.Core.Presentation.xml",
+ "build/.NETFramework/v4.8/System.Activities.DurableInstancing.dll",
+ "build/.NETFramework/v4.8/System.Activities.DurableInstancing.xml",
+ "build/.NETFramework/v4.8/System.Activities.Presentation.dll",
+ "build/.NETFramework/v4.8/System.Activities.Presentation.xml",
+ "build/.NETFramework/v4.8/System.Activities.dll",
+ "build/.NETFramework/v4.8/System.Activities.xml",
+ "build/.NETFramework/v4.8/System.AddIn.Contract.dll",
+ "build/.NETFramework/v4.8/System.AddIn.Contract.xml",
+ "build/.NETFramework/v4.8/System.AddIn.dll",
+ "build/.NETFramework/v4.8/System.AddIn.xml",
+ "build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.dll",
+ "build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.xml",
+ "build/.NETFramework/v4.8/System.ComponentModel.Composition.dll",
+ "build/.NETFramework/v4.8/System.ComponentModel.Composition.xml",
+ "build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.dll",
+ "build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.xml",
+ "build/.NETFramework/v4.8/System.Configuration.Install.dll",
+ "build/.NETFramework/v4.8/System.Configuration.Install.xml",
+ "build/.NETFramework/v4.8/System.Configuration.dll",
+ "build/.NETFramework/v4.8/System.Configuration.xml",
+ "build/.NETFramework/v4.8/System.Core.dll",
+ "build/.NETFramework/v4.8/System.Core.xml",
+ "build/.NETFramework/v4.8/System.Data.DataSetExtensions.dll",
+ "build/.NETFramework/v4.8/System.Data.DataSetExtensions.xml",
+ "build/.NETFramework/v4.8/System.Data.Entity.Design.dll",
+ "build/.NETFramework/v4.8/System.Data.Entity.Design.xml",
+ "build/.NETFramework/v4.8/System.Data.Entity.dll",
+ "build/.NETFramework/v4.8/System.Data.Entity.xml",
+ "build/.NETFramework/v4.8/System.Data.Linq.dll",
+ "build/.NETFramework/v4.8/System.Data.Linq.xml",
+ "build/.NETFramework/v4.8/System.Data.OracleClient.dll",
+ "build/.NETFramework/v4.8/System.Data.OracleClient.xml",
+ "build/.NETFramework/v4.8/System.Data.Services.Client.dll",
+ "build/.NETFramework/v4.8/System.Data.Services.Client.xml",
+ "build/.NETFramework/v4.8/System.Data.Services.Design.dll",
+ "build/.NETFramework/v4.8/System.Data.Services.Design.xml",
+ "build/.NETFramework/v4.8/System.Data.Services.dll",
+ "build/.NETFramework/v4.8/System.Data.Services.xml",
+ "build/.NETFramework/v4.8/System.Data.SqlXml.dll",
+ "build/.NETFramework/v4.8/System.Data.SqlXml.xml",
+ "build/.NETFramework/v4.8/System.Data.dll",
+ "build/.NETFramework/v4.8/System.Data.xml",
+ "build/.NETFramework/v4.8/System.Deployment.dll",
+ "build/.NETFramework/v4.8/System.Deployment.xml",
+ "build/.NETFramework/v4.8/System.Design.dll",
+ "build/.NETFramework/v4.8/System.Design.xml",
+ "build/.NETFramework/v4.8/System.Device.dll",
+ "build/.NETFramework/v4.8/System.Device.xml",
+ "build/.NETFramework/v4.8/System.Diagnostics.Tracing.dll",
+ "build/.NETFramework/v4.8/System.Diagnostics.Tracing.xml",
+ "build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.dll",
+ "build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.xml",
+ "build/.NETFramework/v4.8/System.DirectoryServices.Protocols.dll",
+ "build/.NETFramework/v4.8/System.DirectoryServices.Protocols.xml",
+ "build/.NETFramework/v4.8/System.DirectoryServices.dll",
+ "build/.NETFramework/v4.8/System.DirectoryServices.xml",
+ "build/.NETFramework/v4.8/System.Drawing.Design.dll",
+ "build/.NETFramework/v4.8/System.Drawing.Design.xml",
+ "build/.NETFramework/v4.8/System.Drawing.dll",
+ "build/.NETFramework/v4.8/System.Drawing.xml",
+ "build/.NETFramework/v4.8/System.Dynamic.dll",
+ "build/.NETFramework/v4.8/System.EnterpriseServices.Thunk.dll",
+ "build/.NETFramework/v4.8/System.EnterpriseServices.Wrapper.dll",
+ "build/.NETFramework/v4.8/System.EnterpriseServices.dll",
+ "build/.NETFramework/v4.8/System.EnterpriseServices.xml",
+ "build/.NETFramework/v4.8/System.IO.Compression.FileSystem.dll",
+ "build/.NETFramework/v4.8/System.IO.Compression.FileSystem.xml",
+ "build/.NETFramework/v4.8/System.IO.Compression.dll",
+ "build/.NETFramework/v4.8/System.IO.Compression.xml",
+ "build/.NETFramework/v4.8/System.IO.Log.dll",
+ "build/.NETFramework/v4.8/System.IO.Log.xml",
+ "build/.NETFramework/v4.8/System.IdentityModel.Selectors.dll",
+ "build/.NETFramework/v4.8/System.IdentityModel.Selectors.xml",
+ "build/.NETFramework/v4.8/System.IdentityModel.Services.dll",
+ "build/.NETFramework/v4.8/System.IdentityModel.Services.xml",
+ "build/.NETFramework/v4.8/System.IdentityModel.dll",
+ "build/.NETFramework/v4.8/System.IdentityModel.xml",
+ "build/.NETFramework/v4.8/System.Linq.xml",
+ "build/.NETFramework/v4.8/System.Management.Instrumentation.dll",
+ "build/.NETFramework/v4.8/System.Management.Instrumentation.xml",
+ "build/.NETFramework/v4.8/System.Management.dll",
+ "build/.NETFramework/v4.8/System.Management.xml",
+ "build/.NETFramework/v4.8/System.Messaging.dll",
+ "build/.NETFramework/v4.8/System.Messaging.xml",
+ "build/.NETFramework/v4.8/System.Net.Http.WebRequest.dll",
+ "build/.NETFramework/v4.8/System.Net.Http.WebRequest.xml",
+ "build/.NETFramework/v4.8/System.Net.Http.dll",
+ "build/.NETFramework/v4.8/System.Net.Http.xml",
+ "build/.NETFramework/v4.8/System.Net.dll",
+ "build/.NETFramework/v4.8/System.Net.xml",
+ "build/.NETFramework/v4.8/System.Numerics.dll",
+ "build/.NETFramework/v4.8/System.Numerics.xml",
+ "build/.NETFramework/v4.8/System.Printing.dll",
+ "build/.NETFramework/v4.8/System.Printing.xml",
+ "build/.NETFramework/v4.8/System.Reflection.Context.dll",
+ "build/.NETFramework/v4.8/System.Reflection.Context.xml",
+ "build/.NETFramework/v4.8/System.Runtime.Caching.dll",
+ "build/.NETFramework/v4.8/System.Runtime.Caching.xml",
+ "build/.NETFramework/v4.8/System.Runtime.DurableInstancing.dll",
+ "build/.NETFramework/v4.8/System.Runtime.DurableInstancing.xml",
+ "build/.NETFramework/v4.8/System.Runtime.Remoting.dll",
+ "build/.NETFramework/v4.8/System.Runtime.Remoting.xml",
+ "build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.dll",
+ "build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.xml",
+ "build/.NETFramework/v4.8/System.Runtime.Serialization.dll",
+ "build/.NETFramework/v4.8/System.Runtime.Serialization.xml",
+ "build/.NETFramework/v4.8/System.Security.dll",
+ "build/.NETFramework/v4.8/System.Security.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Activation.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Activation.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Activities.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Activities.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Channels.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Channels.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Discovery.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Discovery.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Routing.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Routing.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.Web.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.Web.xml",
+ "build/.NETFramework/v4.8/System.ServiceModel.dll",
+ "build/.NETFramework/v4.8/System.ServiceModel.xml",
+ "build/.NETFramework/v4.8/System.ServiceProcess.dll",
+ "build/.NETFramework/v4.8/System.ServiceProcess.xml",
+ "build/.NETFramework/v4.8/System.Speech.dll",
+ "build/.NETFramework/v4.8/System.Speech.xml",
+ "build/.NETFramework/v4.8/System.Threading.Tasks.Dataflow.xml",
+ "build/.NETFramework/v4.8/System.Transactions.dll",
+ "build/.NETFramework/v4.8/System.Transactions.xml",
+ "build/.NETFramework/v4.8/System.Web.Abstractions.dll",
+ "build/.NETFramework/v4.8/System.Web.ApplicationServices.dll",
+ "build/.NETFramework/v4.8/System.Web.ApplicationServices.xml",
+ "build/.NETFramework/v4.8/System.Web.DataVisualization.Design.dll",
+ "build/.NETFramework/v4.8/System.Web.DataVisualization.dll",
+ "build/.NETFramework/v4.8/System.Web.DataVisualization.xml",
+ "build/.NETFramework/v4.8/System.Web.DynamicData.Design.dll",
+ "build/.NETFramework/v4.8/System.Web.DynamicData.Design.xml",
+ "build/.NETFramework/v4.8/System.Web.DynamicData.dll",
+ "build/.NETFramework/v4.8/System.Web.DynamicData.xml",
+ "build/.NETFramework/v4.8/System.Web.Entity.Design.dll",
+ "build/.NETFramework/v4.8/System.Web.Entity.Design.xml",
+ "build/.NETFramework/v4.8/System.Web.Entity.dll",
+ "build/.NETFramework/v4.8/System.Web.Entity.xml",
+ "build/.NETFramework/v4.8/System.Web.Extensions.Design.dll",
+ "build/.NETFramework/v4.8/System.Web.Extensions.Design.xml",
+ "build/.NETFramework/v4.8/System.Web.Extensions.dll",
+ "build/.NETFramework/v4.8/System.Web.Extensions.xml",
+ "build/.NETFramework/v4.8/System.Web.Mobile.dll",
+ "build/.NETFramework/v4.8/System.Web.Mobile.xml",
+ "build/.NETFramework/v4.8/System.Web.RegularExpressions.dll",
+ "build/.NETFramework/v4.8/System.Web.RegularExpressions.xml",
+ "build/.NETFramework/v4.8/System.Web.Routing.dll",
+ "build/.NETFramework/v4.8/System.Web.Services.dll",
+ "build/.NETFramework/v4.8/System.Web.Services.xml",
+ "build/.NETFramework/v4.8/System.Web.dll",
+ "build/.NETFramework/v4.8/System.Web.xml",
+ "build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.dll",
+ "build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.xml",
+ "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.Design.dll",
+ "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.dll",
+ "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.xml",
+ "build/.NETFramework/v4.8/System.Windows.Forms.dll",
+ "build/.NETFramework/v4.8/System.Windows.Forms.xml",
+ "build/.NETFramework/v4.8/System.Windows.Input.Manipulations.dll",
+ "build/.NETFramework/v4.8/System.Windows.Input.Manipulations.xml",
+ "build/.NETFramework/v4.8/System.Windows.Presentation.dll",
+ "build/.NETFramework/v4.8/System.Windows.Presentation.xml",
+ "build/.NETFramework/v4.8/System.Windows.dll",
+ "build/.NETFramework/v4.8/System.Workflow.Activities.dll",
+ "build/.NETFramework/v4.8/System.Workflow.Activities.xml",
+ "build/.NETFramework/v4.8/System.Workflow.ComponentModel.dll",
+ "build/.NETFramework/v4.8/System.Workflow.ComponentModel.xml",
+ "build/.NETFramework/v4.8/System.Workflow.Runtime.dll",
+ "build/.NETFramework/v4.8/System.Workflow.Runtime.xml",
+ "build/.NETFramework/v4.8/System.WorkflowServices.dll",
+ "build/.NETFramework/v4.8/System.WorkflowServices.xml",
+ "build/.NETFramework/v4.8/System.Xaml.dll",
+ "build/.NETFramework/v4.8/System.Xaml.xml",
+ "build/.NETFramework/v4.8/System.Xml.Linq.dll",
+ "build/.NETFramework/v4.8/System.Xml.Linq.xml",
+ "build/.NETFramework/v4.8/System.Xml.Serialization.dll",
+ "build/.NETFramework/v4.8/System.Xml.dll",
+ "build/.NETFramework/v4.8/System.Xml.xml",
+ "build/.NETFramework/v4.8/System.dll",
+ "build/.NETFramework/v4.8/System.xml",
+ "build/.NETFramework/v4.8/UIAutomationClient.dll",
+ "build/.NETFramework/v4.8/UIAutomationClient.xml",
+ "build/.NETFramework/v4.8/UIAutomationClientsideProviders.dll",
+ "build/.NETFramework/v4.8/UIAutomationClientsideProviders.xml",
+ "build/.NETFramework/v4.8/UIAutomationProvider.dll",
+ "build/.NETFramework/v4.8/UIAutomationProvider.xml",
+ "build/.NETFramework/v4.8/UIAutomationTypes.dll",
+ "build/.NETFramework/v4.8/UIAutomationTypes.xml",
+ "build/.NETFramework/v4.8/WindowsBase.dll",
+ "build/.NETFramework/v4.8/WindowsBase.xml",
+ "build/.NETFramework/v4.8/WindowsFormsIntegration.dll",
+ "build/.NETFramework/v4.8/WindowsFormsIntegration.xml",
+ "build/.NETFramework/v4.8/XamlBuildTask.dll",
+ "build/.NETFramework/v4.8/XamlBuildTask.xml",
+ "build/.NETFramework/v4.8/mscorlib.dll",
+ "build/.NETFramework/v4.8/mscorlib.xml",
+ "build/.NETFramework/v4.8/namespaces.xml",
+ "build/.NETFramework/v4.8/sysglobl.dll",
+ "build/.NETFramework/v4.8/sysglobl.xml",
+ "build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets",
+ "microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512",
+ "microsoft.netframework.referenceassemblies.net48.nuspec"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ ".NETFramework,Version=v4.8": [
+ "Microsoft.NETFramework.ReferenceAssemblies >= 1.0.3"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\Viper\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "0.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj",
+ "projectName": "Git-Manager-GUI-Setup",
+ "projectPath": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj",
+ "packagesPath": "C:\\Users\\Viper\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\Viper\\AppData\\Roaming\\NuGet\\NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net48"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net48": {
+ "targetAlias": "net48",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ },
+ "SdkAnalysisLevel": "10.0.100"
+ },
+ "frameworks": {
+ "net48": {
+ "targetAlias": "net48",
+ "dependencies": {
+ "Microsoft.NETFramework.ReferenceAssemblies": {
+ "suppressParent": "All",
+ "target": "Package",
+ "version": "[1.0.3, )",
+ "autoReferenced": true
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.113\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/installer/obj/project.nuget.cache b/installer/obj/project.nuget.cache
new file mode 100644
index 0000000..19effe8
--- /dev/null
+++ b/installer/obj/project.nuget.cache
@@ -0,0 +1,11 @@
+{
+ "version": 2,
+ "dgSpecHash": "5on68f3wDDM=",
+ "success": true,
+ "projectFilePath": "C:\\Users\\Viper\\Desktop\\git-manager-gui\\installer\\GitManagerSetup.csproj",
+ "expectedPackageFiles": [
+ "C:\\Users\\Viper\\.nuget\\packages\\microsoft.netframework.referenceassemblies\\1.0.3\\microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512",
+ "C:\\Users\\Viper\\.nuget\\packages\\microsoft.netframework.referenceassemblies.net48\\1.0.3\\microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512"
+ ],
+ "logs": []
+}
\ No newline at end of file