From 71a739c5714f3cc194507493afb62ce2528ee3d6 Mon Sep 17 00:00:00 2001 From: Maddie <52103563+maddie480@users.noreply.github.com> Date: Sun, 26 Jan 2025 15:52:56 +0100 Subject: [PATCH] Merge uninstaller back into Olympus.Sharp.exe --- azure-pipelines.yml | 17 -- changelog.txt | 3 +- sharp/CmdWin32AppAdd.cs | 10 +- .../CmdWin32AppUninstall.cs | 58 ++-- sharp/Program.cs | 7 + uninstaller-winforms/.gitignore | 251 ------------------ uninstaller-winforms/Olympus.csproj | 94 ------- uninstaller-winforms/Olympus.sln | 25 -- uninstaller-winforms/Program.cs | 16 -- uninstaller-winforms/Win32RegHelper.cs | 51 ---- uninstaller-winforms/icon.ico | Bin 67646 -> 0 bytes uninstaller-winforms/logo.png | Bin 46471 -> 0 bytes 12 files changed, 51 insertions(+), 481 deletions(-) rename {uninstaller-winforms => sharp}/CmdWin32AppUninstall.cs (51%) delete mode 100644 uninstaller-winforms/.gitignore delete mode 100644 uninstaller-winforms/Olympus.csproj delete mode 100644 uninstaller-winforms/Olympus.sln delete mode 100644 uninstaller-winforms/Program.cs delete mode 100644 uninstaller-winforms/Win32RegHelper.cs delete mode 100644 uninstaller-winforms/icon.ico delete mode 100644 uninstaller-winforms/logo.png diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 92365b1..bfb8153 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,22 +161,6 @@ steps: arguments: '--configuration Release' - # Build uninstaller-winforms. -- task: DotNetCoreCLI@2 - condition: and(succeeded(), eq(variables.agentArch, 'windows')) - displayName: 'Build: dotnet: restore uninstaller-winforms' - inputs: - command: 'restore' - projects: 'uninstaller-winforms/*.csproj' - -- task: DotNetCoreCLI@2 - condition: and(succeeded(), eq(variables.agentArch, 'windows')) - displayName: 'Build: dotnet: build uninstaller-winforms' - inputs: - command: 'build' - projects: 'uninstaller-winforms/*.csproj' - arguments: '--configuration Release' - # Create a dummy dir for platforms which don't use prebuilt LÖVE. - task: CmdLine@2 condition: and(succeeded(), eq(variables.loveZIP, '')) @@ -340,7 +324,6 @@ steps: Remove-Item -Path love/lovec.exe -Force Move-Item -Path love/love.exe -Destination love/main.exe New-Item -Path $env:BUILD_ARTIFACTSTAGINGDIRECTORY/main -ItemType Directory - Copy-Item -Path uninstaller-winforms/bin/Release/net452/Olympus.exe -Destination love/uninstall.exe Compress-Archive -Path love/* -DestinationPath $env:BUILD_ARTIFACTSTAGINGDIRECTORY/main/dist.zip -Force New-Item -Path $env:BUILD_ARTIFACTSTAGINGDIRECTORY/update -ItemType Directory New-Item -Path $env:BUILD_ARTIFACTSTAGINGDIRECTORY/platform-update -ItemType Directory diff --git a/changelog.txt b/changelog.txt index 88711e9..bd081e8 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,5 +3,4 @@ and only contains the latest changes. Its purpose is to be shown in Olympus when updating. #changelog# -∙ Updated Olympus.Sharp to .NET 8 to fix various issues with the .NET Framework version -∙ Fixed "popen failed" error messages being truncated to the first letter \ No newline at end of file +∙ Reintegrate the Windows uninstaller in Olympus.Sharp instead of having a separate uninstall.exe \ No newline at end of file diff --git a/sharp/CmdWin32AppAdd.cs b/sharp/CmdWin32AppAdd.cs index f57164f..4f2af92 100644 --- a/sharp/CmdWin32AppAdd.cs +++ b/sharp/CmdWin32AppAdd.cs @@ -1,6 +1,7 @@ #if WIN32 using Microsoft.Win32; using System.IO; +using System.Reflection; namespace Olympus { public class CmdWin32AppAdd : Cmd { @@ -11,7 +12,8 @@ public override string Run(string exepath, string version) { return null; DirectoryInfo dir = new DirectoryInfo(Path.GetDirectoryName(exepath)); - string uninstallerPath = Path.GetDirectoryName(exepath) + @"\uninstall.exe"; + string selfPath = Assembly.GetExecutingAssembly().Location; + selfPath = Path.Combine(Path.GetDirectoryName(selfPath), "Olympus.Sharp.exe"); key.SetValue("DisplayName", "Olympus"); key.SetValue("Publisher", "Everest Team"); @@ -21,8 +23,8 @@ public override string Run(string exepath, string version) { key.SetValue("InstallLocation", dir); key.SetValue("InstallDate", dir.CreationTime.ToString("yyyyMMdd")); key.SetValue("EstimatedSize", (int) (GetDirectorySize(dir) / 1024)); - key.SetValue("UninstallString", $"\"{uninstallerPath}\""); - key.SetValue("QuietUninstallString", $"\"{uninstallerPath}\" --quiet"); + key.SetValue("UninstallString", $"\"{selfPath}\" --uninstall"); + key.SetValue("QuietUninstallString", $"\"{selfPath}\" --uninstall --quiet"); key.SetValue("NoModify", 1); key.SetValue("NoRepair", 1); @@ -44,4 +46,4 @@ public static long GetDirectorySize(DirectoryInfo dir) { } } -#endif \ No newline at end of file +#endif diff --git a/uninstaller-winforms/CmdWin32AppUninstall.cs b/sharp/CmdWin32AppUninstall.cs similarity index 51% rename from uninstaller-winforms/CmdWin32AppUninstall.cs rename to sharp/CmdWin32AppUninstall.cs index 48de517..fd3ea35 100644 --- a/uninstaller-winforms/CmdWin32AppUninstall.cs +++ b/sharp/CmdWin32AppUninstall.cs @@ -1,21 +1,29 @@ -using Microsoft.Win32; +#if WIN32 +using Microsoft.Win32; using System; using System.Diagnostics; using System.IO; using System.Reflection; -using System.Windows.Forms; - +using System.Runtime.InteropServices; namespace Olympus { - public class CmdWin32AppUninstall { - public string Run(bool quiet) { - if (!quiet) { - try { - Application.EnableVisualStyles(); - } catch { - } - } + public class CmdWin32AppUninstall : Cmd { + [DllImport("user32")] + private static extern int MessageBoxW( + IntPtr hWnd, + [MarshalAs(UnmanagedType.LPWStr)] string text, + [MarshalAs(UnmanagedType.LPWStr)] string caption, + uint type + ); + + private static void showMessage(string message) { + MessageBoxW(IntPtr.Zero, message, "Olympus", 0 /* MB_OK */); + } + private static bool askForConfirmation(string message) { + return MessageBoxW(IntPtr.Zero, message, "Olympus", 4 /* MB_YESNO */) == 6 /* IDYES */; + } + public override string Run(bool quiet) { string selfPath = Assembly.GetExecutingAssembly().Location; string root = Environment.GetEnvironmentVariable("OLYMPUS_ROOT"); @@ -28,22 +36,27 @@ public string Run(bool quiet) { !File.Exists(Path.Combine(root, "love.dll")) || !Directory.Exists(Path.Combine(root, "sharp"))) { if (!quiet) - MessageBox.Show("The Olympus uninstaller has encountered an error:\nCan't verify the main folder.\n\nPlease delete %AppData%/Olympus manually.", "Olympus", MessageBoxButtons.OK); + showMessage("The Olympus uninstaller has encountered an error:\nCan't verify the main folder.\n\nPlease delete %AppData%/Olympus manually."); return null; } if (selfPath.StartsWith(root)) { string tmpDir = Path.Combine(Path.GetTempPath(), "Olympus.Uninstall"); - string tmp = Path.Combine(tmpDir, "uninstall.exe"); + string tmp = Path.Combine(tmpDir, "Olympus.Sharp.exe"); try { if (!Directory.Exists(tmpDir)) Directory.CreateDirectory(tmpDir); + string tmpDep = Path.Combine(tmpDir, "MonoMod.Utils.dll"); + if (File.Exists(tmpDep)) + File.Delete(tmpDep); + File.Copy(Path.Combine(Path.GetDirectoryName(selfPath), "MonoMod.Utils.dll"), tmpDep); if (File.Exists(tmp)) File.Delete(tmp); File.Copy(selfPath, tmp); - } catch { + } + catch { if (!quiet) - MessageBox.Show("The Olympus uninstaller has encountered an error:\nCan't copy the uninstaller into %TMP%.\n\nPlease delete %AppData%/Olympus manually.", "Olympus", MessageBoxButtons.OK); + showMessage("The Olympus uninstaller has encountered an error:\nCan't copy the uninstaller into %TMP%.\n\nPlease delete %AppData%/Olympus manually."); return null; } @@ -51,33 +64,36 @@ public string Run(bool quiet) { Process process = new Process(); process.StartInfo.FileName = tmp; - process.StartInfo.Arguments = quiet ? " --quiet" : ""; + process.StartInfo.Arguments = "--uninstall" + (quiet ? " --quiet" : ""); Environment.CurrentDirectory = process.StartInfo.WorkingDirectory = tmpDir; process.Start(); return null; } - if (!quiet && MessageBox.Show($"Do you want to uninstall Olympus from the following folder?\n{root}\n\nEverest and all your mods will stay installed.", "Olympus", MessageBoxButtons.YesNo) != DialogResult.Yes) + if (!quiet && !askForConfirmation($"Do you want to uninstall Olympus from the following folder?\n{root}\n\nEverest and all your mods will stay installed.")) return null; try { Directory.Delete(root, true); - } catch { + } + catch { if (!quiet) - MessageBox.Show("The Olympus uninstaller has encountered an error:\nCan't delete the Olympus folder.\n\nPlease delete %AppData%/Olympus manually.", "Olympus", MessageBoxButtons.OK); + showMessage("The Olympus uninstaller has encountered an error:\nCan't delete the Olympus folder.\n\nPlease delete %AppData%/Olympus manually."); return null; } try { using (RegistryKey key = Win32RegHelper.OpenOrCreateKey(@"HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall", true)) key?.DeleteSubKeyTree("Olympus"); - } catch { + } + catch { } if (!quiet) - MessageBox.Show("Olympus was uninstalled successfully.", "Olympus", MessageBoxButtons.OK); + showMessage("Olympus was uninstalled successfully."); return null; } } } +#endif diff --git a/sharp/Program.cs b/sharp/Program.cs index 37dfcd9..ba96f3c 100644 --- a/sharp/Program.cs +++ b/sharp/Program.cs @@ -83,6 +83,13 @@ public static void Main(string[] args) { // Enable TLS 1.2 to fix connecting to GitHub. ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; +#if WIN32 + if (args.Length >= 1 && args[0] == "--uninstall") { + new CmdWin32AppUninstall().Run(args.Length >= 2 && args[1] == "--quiet"); + return; + } +#endif + Process parentProc = null; int parentProcID = 0; diff --git a/uninstaller-winforms/.gitignore b/uninstaller-winforms/.gitignore deleted file mode 100644 index 92e2ff2..0000000 --- a/uninstaller-winforms/.gitignore +++ /dev/null @@ -1,251 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -[Xx]64/ -[Xx]86/ -[Bb]uild/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -# *.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml - -# TODO: Un-comment the next line if you do not want to checkin -# your web deploy settings because they may include unencrypted -# passwords -#*.pubxml -*.publishproj - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directory -AppPackages/ -BundleArtifacts/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# LightSwitch generated files -GeneratedArtifacts/ -ModelManifest.xml - -# Paket dependency manager -.paket/paket.exe - -# FAKE - F# Make -.fake/ - -# CCCCCC mod -/CCCCCC - -# vscode files -.vscode/ - -# Nix build result -result diff --git a/uninstaller-winforms/Olympus.csproj b/uninstaller-winforms/Olympus.csproj deleted file mode 100644 index 1ba0095..0000000 --- a/uninstaller-winforms/Olympus.csproj +++ /dev/null @@ -1,94 +0,0 @@ - - - - WinExe - net452 - Olympus - true - icon.ico - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - false - true - - - - - true - false - - - - - - - false - false - false - - - - - - - - - - - - - /Library/Frameworks/Mono.framework/Versions/Current/lib:$(HOME)/lib:/usr/local/lib:/lib:/usr/lib - "$(MSBuildToolsPath)\MSBuild.exe" - "$(DOTNET_HOST_PATH)" msbuild - "-p:TargetFramework=$(TargetFramework);Configuration=$(Configuration);DoILRepack=true" -t:ILRepack - - - - - \ No newline at end of file diff --git a/uninstaller-winforms/Olympus.sln b/uninstaller-winforms/Olympus.sln deleted file mode 100644 index f811911..0000000 --- a/uninstaller-winforms/Olympus.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30717.126 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Olympus", "Olympus.csproj", "{17564AE6-ACCB-4F10-86B7-17904F696577}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {17564AE6-ACCB-4F10-86B7-17904F696577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17564AE6-ACCB-4F10-86B7-17904F696577}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17564AE6-ACCB-4F10-86B7-17904F696577}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17564AE6-ACCB-4F10-86B7-17904F696577}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {8DCAD904-09CA-4237-B1ED-443486A6F77B} - EndGlobalSection -EndGlobal diff --git a/uninstaller-winforms/Program.cs b/uninstaller-winforms/Program.cs deleted file mode 100644 index a5b5b86..0000000 --- a/uninstaller-winforms/Program.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Globalization; -using System.Linq; - - -namespace Olympus { - static class Program { - static void Main(string[] args) { - CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; - CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture; - - Console.WriteLine($"Olympus Uninstaller {typeof(Program).Assembly.GetName().Version}"); - new CmdWin32AppUninstall().Run(quiet: args.Contains("--quiet")); - } - } -} diff --git a/uninstaller-winforms/Win32RegHelper.cs b/uninstaller-winforms/Win32RegHelper.cs deleted file mode 100644 index 7d32998..0000000 --- a/uninstaller-winforms/Win32RegHelper.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Microsoft.Win32; - - -namespace Olympus { - public static class Win32RegHelper { - - public static RegistryKey OpenOrCreateKey(string path, bool writable) { - string[] parts = path.Split('\\'); - - RegistryKey key; - switch (parts[0].ToUpperInvariant()) { - case "HKEY_CURRENT_USER": - case "HKCU": - key = Registry.CurrentUser; - break; - - case "HKEY_LOCAL_MACHINE": - case "HKLM": - key = Registry.LocalMachine; - break; - - case "HKEY_CLASSES_ROOT": - case "HKCR": - key = Registry.ClassesRoot; - break; - - case "HKEY_USERS": - key = Registry.Users; - break; - - case "HKEY_CURRENT_CONFIG": - key = Registry.CurrentConfig; - break; - - default: - return null; - } - - if (writable) { - for (int i = 1; i < parts.Length && key != null; i++) - key = key.OpenSubKey(parts[i], true) ?? key.CreateSubKey(parts[i]); - } else { - for (int i = 1; i < parts.Length && key != null; i++) - key = key.OpenSubKey(parts[i], false); - } - - return key; - } - - } -} diff --git a/uninstaller-winforms/icon.ico b/uninstaller-winforms/icon.ico deleted file mode 100644 index 6d6ecea5c4703c75df566ade5093d92e179ebbc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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 diff --git a/uninstaller-winforms/logo.png b/uninstaller-winforms/logo.png deleted file mode 100644 index 44f7da7d548664d479870fbd9fcd8106f929ddd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46471 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