|
|
1.1 root 1: using System;
2: using System.Collections.Generic;
3: using System.Diagnostics;
4: using System.IO;
5: using System.Linq;
6:
7: namespace CleanFlashCommon {
8: public class Uninstaller {
9: private static string[] PROCESSES_TO_KILL = new string[] {
10: // Flash Center-related processes
11: "fcbrowser", "fcbrowsermanager", "fclogin", "fctips", "flashcenter",
12: "flashcenterservice", "flashcenteruninst", "flashplay", "update", "wow_helper",
13: "dummy_cmd", "flashhelperservice",
14: // Flash Player-related processes
15: "flashplayerapp", "flashplayer_sa", "flashplayer_sa_debug",
16: // Browsers that might be using Flash Player right now
17: "opera", "iexplore", "chrome", "chromium", "brave", "vivaldi", "basilisk", "msedge",
18: "seamonkey", "palemoon", "k-meleon", "plugin-container", "waterfox"
19: };
20:
21: static Uninstaller() {
22: WinAPI.AllowModifications();
23: }
24:
25: public static void UninstallRegistry() {
26: if (Environment.Is64BitOperatingSystem) {
27: RegistryManager.ApplyRegistry(Properties.Resources.uninstallRegistry, Properties.Resources.uninstallRegistry64);
28: } else {
29: RegistryManager.ApplyRegistry(Properties.Resources.uninstallRegistry);
30: }
31: }
32:
33: public static void DeleteTask(string task) {
34: ProcessRunner.RunUnmanagedProcess(
35: new ProcessStartInfo {
36: FileName = "schtasks.exe",
37: Arguments = "/delete /tn \"" + task + "\" /f",
38: UseShellExecute = false,
39: CreateNoWindow = true
40: }
41: );
42: }
43:
44: public static void StopService(string service) {
45: ProcessRunner.RunUnmanagedProcess(
46: new ProcessStartInfo {
47: FileName = "net.exe",
48: Arguments = "stop \"" + service + "\"",
49: UseShellExecute = false,
50: CreateNoWindow = true
51: }
52: );
53: }
54:
55: public static void DeleteService(string service) {
56: // First, stop the service.
57: StopService(service);
58:
59: ProcessRunner.RunUnmanagedProcess(
60: new ProcessStartInfo {
61: FileName = "sc.exe",
62: Arguments = "delete \"" + service + "\"",
63: UseShellExecute = false,
64: CreateNoWindow = true
65: }
66: );
67: }
68:
69: public static void DeleteFlashCenter() {
70: // Remove Flash Center from Program Files
71: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "FlashCenter"));
72:
73: if (Environment.Is64BitOperatingSystem) {
74: // Remove Flash Center from Program Files (x86)
75: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "FlashCenter"));
76: }
77:
78: // Remove start menu shortcuts
79: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Microsoft", "Windows", "Start Menu", "Programs", "Flash Center"));
80:
81: // Remove Flash Center cache and user data
82: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Flash_Center"));
83:
84: // Remove shared start menu shortcuts
85: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), "Programs", "Flash Center"));
86: FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Programs", "Flash Center"));
87: FileUtil.DeleteFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Flash Player.lnk"));
88:
89: // Remove Desktop shortcut
90: FileUtil.DeleteFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), "Flash Center.lnk"));
91: FileUtil.DeleteFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Flash Player.lnk"));
92:
93: // Remove Flash Player from Program Files
94: FileUtil.WipeFolder(SystemInfo.GetProgramFlash32Path());
95:
96: // Remove spyware dropped by Flash Center in the temporary folder
97: string tempFolder = Path.GetTempPath();
98:
99: foreach (string dir in Directory.GetDirectories(tempFolder)) {
100: string parentName = Path.GetFileName(dir);
101:
102: if (parentName.Length == 11 && parentName.EndsWith(".tmp")) {
103: FileUtil.WipeFolder(dir);
104: }
105: }
106:
107: // Remove Quick Launch shortcuts from Internet Explorer
108: FileUtil.RecursiveDelete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft", "Internet Explorer", "Quick Launch"), "Flash Center.lnk");
109: }
110:
111: public static void DeleteFlashPlayer() {
112: // Remove Macromedia folder from System32 and SysWOW64
113: foreach (string dir in SystemInfo.GetMacromedPaths()) {
114: FileUtil.RecursiveDelete(dir);
115: }
116:
117: // Remove Flash Player control panel applications
118: foreach (string systemDir in SystemInfo.GetSystemPaths()) {
119: FileUtil.DeleteFile(Path.Combine(systemDir, "FlashPlayerApp.exe"));
120: FileUtil.DeleteFile(Path.Combine(systemDir, "FlashPlayerCPLApp.cpl"));
121: }
122: }
123:
124: public static void StopProcesses() {
125: // Stop all processes that might interfere with the install process
126: List<Process> processes = Process.GetProcesses()
127: .Where(process => PROCESSES_TO_KILL.Contains(process.ProcessName.ToLower()))
128: .OrderBy(o => o.StartTime)
129: .ToList();
130:
131: foreach (Process process in processes) {
132: if (process.HasExited) {
133: // This process has already exited, no point to kill it
134: continue;
135: }
136:
137: try {
138: process.Kill();
139: process.WaitForExit();
140: } catch {
141: // Could not kill process...
142: }
143: }
144: }
145:
146: public static void Uninstall(IProgressForm form) {
147: // Uninstallation of Flash consists of the following steps:
148: // 1. Delete all auto-updater tasks.
149: // 2. Delete all Flash Player services.
150: // 3. Delete all Flash Center services.
151: // 4. Exit all browsers and other processes that may interfere with uninstallation.
152: // 5. Remove all Flash Player references from the registry.
153: // 6. Remove Flash Center files from the file system.
154: // 7. Remove Flash Player files from the file system.
155:
156: form.UpdateProgressLabel("Stopping Flash auto-updater task...", true);
157: DeleteTask("Adobe Flash Player Updater");
158: form.UpdateProgressLabel("Stopping Flash auto-updater service...", true);
159: DeleteService("AdobeFlashPlayerUpdateSvc");
160: form.UpdateProgressLabel("Stopping Flash Center services...", true);
161: DeleteService("Flash Helper Service");
162: form.TickProgress();
163: DeleteService("FlashCenterService");
164:
165: form.UpdateProgressLabel("Exiting all browsers...", true);
166: StopProcesses();
167: form.UpdateProgressLabel("Cleaning up registry...", true);
168: UninstallRegistry();
169: form.UpdateProgressLabel("Removing Flash Center...", true);
170: DeleteFlashCenter();
171: form.UpdateProgressLabel("Removing Flash Player...", true);
172: DeleteFlashPlayer();
173: }
174: }
175: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.