Files
mRemoteNG/InstallerProjects/CustomActions/UninstallNSISVersions.cs
2016-08-03 12:10:36 -06:00

83 lines
2.4 KiB
C#

using System;
using Microsoft.Win32;
using System.Diagnostics;
namespace CustomActions
{
public class UninstallNsisVersions
{
private const string RegistryPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\mRemoteNG";
private const string RegistryPathWow6432 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\mRemoteNG";
private RegistryKey _activeRegistryPath;
public UninstallNsisVersions()
{
GetLegacymRemoteNgRegistryKeyPath();
}
public void UninstallLegacyVersion(bool silent = false)
{
if (!IsLegacymRemoteNgInstalled())
return;
var uninstallString = GetLegacyUninstallString();
var forceNonTempUninstaller = $"_?={uninstallString.Replace("Uninstall.exe", "").Replace(@"""", "")}";
var silentUninstall = "";
if (silent)
{
silentUninstall = "/S";
}
var processStartInfo = new ProcessStartInfo(uninstallString)
{
UseShellExecute = true,
Arguments = $"{forceNonTempUninstaller} {silentUninstall}"
};
var uninstallProcess = Process.Start(processStartInfo);
while (uninstallProcess != null && uninstallProcess.HasExited == false)
{
Debug.WriteLine("Waiting for uninstaller to exit");
}
}
public bool IsLegacymRemoteNgInstalled()
{
return (_activeRegistryPath != null);
}
public string GetLegacyUninstallString()
{
return IsLegacymRemoteNgInstalled() ? _activeRegistryPath.GetValue("UninstallString").ToString() : "";
}
private void GetLegacymRemoteNgRegistryKeyPath()
{
GetUninstallKeyPath();
GetUninstallKeyPath6432();
}
private void GetUninstallKeyPath()
{
try
{
_activeRegistryPath = Registry.LocalMachine.OpenSubKey(RegistryPath);
}
catch (Exception)
{
// ignored
}
}
private void GetUninstallKeyPath6432()
{
try
{
_activeRegistryPath = Registry.LocalMachine.OpenSubKey(RegistryPathWow6432);
}
catch (Exception)
{
// ignored
}
}
}
}