Files
PANDA/Uninstaller.cs

88 lines
3.9 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
[assembly: AssemblyTitle("PANDA Uninstaller")]
[assembly: AssemblyDescription("Deinstallationsprogramm für PANDA")]
[assembly: AssemblyProduct("PANDA")]
[assembly: AssemblyCompany("PANDA")]
[assembly: AssemblyVersion("1.4.0.0")]
[assembly: AssemblyFileVersion("1.4.0.0")]
namespace PandaUninstall
{
internal static class Program
{
[STAThread]
private static void Main(string[] args)
{
Application.EnableVisualStyles();
bool silent = args.Length > 0 && string.Equals(args[0], "--silent", StringComparison.OrdinalIgnoreCase);
string installDirectory = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory);
string ownPath = Assembly.GetExecutingAssembly().Location;
if (!silent)
{
DialogResult answer = MessageBox.Show("Soll PANDA vollständig von diesem Benutzerkonto entfernt werden?", "PANDA deinstallieren", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (answer != DialogResult.Yes)
return;
}
try
{
DeleteIfExists(Path.Combine(installDirectory, "PANDA.exe"));
DeleteIfExists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "PANDA.lnk"));
string startMenuFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs), "PANDA");
DeleteIfExists(Path.Combine(startMenuFolder, "PANDA.lnk"));
DeleteIfExists(Path.Combine(startMenuFolder, "PANDA deinstallieren.lnk"));
if (Directory.Exists(startMenuFolder) && Directory.GetFileSystemEntries(startMenuFolder).Length == 0)
Directory.Delete(startMenuFolder, false);
Registry.CurrentUser.DeleteSubKeyTree(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\PANDA", false);
if (!silent)
MessageBox.Show("PANDA wurde erfolgreich deinstalliert.", "Deinstallation abgeschlossen", MessageBoxButtons.OK, MessageBoxIcon.Information);
ScheduleSelfRemoval(ownPath, installDirectory);
}
catch (Exception exception)
{
if (!silent)
MessageBox.Show("PANDA konnte nicht vollständig entfernt werden.\r\n\r\n" + exception.Message + "\r\n\r\nSchließe PANDA und versuche es erneut.", "Deinstallationsfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.ExitCode = 2;
}
}
private static void DeleteIfExists(string path)
{
if (File.Exists(path))
File.Delete(path);
}
private static void ScheduleSelfRemoval(string ownPath, string installDirectory)
{
string scriptPath = Path.Combine(Path.GetTempPath(), "panda-uninstall-" + Guid.NewGuid().ToString("N") + ".cmd");
var script = new StringBuilder();
script.AppendLine("@echo off");
script.AppendLine("ping 127.0.0.1 -n 2 > nul");
script.AppendLine("del /f /q \"" + ownPath + "\" > nul 2>&1");
script.AppendLine("rmdir \"" + installDirectory.TrimEnd(Path.DirectorySeparatorChar) + "\" > nul 2>&1");
script.AppendLine("del /f /q \"%~f0\" > nul 2>&1");
File.WriteAllText(scriptPath, script.ToString(), Encoding.ASCII);
Process.Start(new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/c call \"" + scriptPath + "\"",
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden
});
}
}
}