88 lines
3.9 KiB
C#
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.3.0.0")]
|
|
[assembly: AssemblyFileVersion("1.3.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
|
|
});
|
|
}
|
|
}
|
|
}
|