Compare commits

..
5 Commits
Author SHA1 Message Date
Disyer fd447b7b95 test 2022-08-02 18:21:47 +03:00
Disyer 420aa8ac66 processes: Only kill processes that contain loaded Flash modules 2022-06-17 12:44:02 +03:00
Disyer 3a2615c988 cleanflash: Recommend Waterfox when installing 2022-06-17 09:43:17 +03:00
Disyer 961500f2d6 readme: Recommend Waterfox Classic 2022-06-17 09:41:19 +03:00
Disyer 68448e704b cleanflash: Update to 34.0.0.251 2022-06-17 09:28:52 +03:00
23 changed files with 363 additions and 207 deletions
+2
View File
@@ -1,6 +1,8 @@
.vs/
packages/
cleanflash/
bin
obj
+15
View File
@@ -0,0 +1,15 @@
stages:
- build
build_job:
stage: build
image: mcr.microsoft.com/dotnet/framework/sdk:3.5
tags:
- shared-windows
- windows
script:
- '& msbuild /p:Configuration=Release /p:Platform="Any CPU" /p:OutputPath=bin CleanFlashUninstaller/CleanFlashUninstaller.csproj'
artifacts:
expire_in: 1 week # save gitlab server space, we copy the files we need to deploy folder later on
paths:
- 'bin\CleanFlashUninstaller.exe'
+1 -1
View File
@@ -57,7 +57,7 @@
</Compile>
<Compile Include="InstallException.cs" />
<Compile Include="IProgressForm.cs" />
<Compile Include="ProcessRunner.cs" />
<Compile Include="ProcessUtils.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
-46
View File
@@ -1,46 +0,0 @@
using System.Diagnostics;
using System.Text;
namespace CleanFlashCommon {
public class ProcessRunner {
public static ExitedProcess RunProcess(ProcessStartInfo startInfo) {
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
StringBuilder outputBuilder = new StringBuilder();
Process process = new Process {
StartInfo = startInfo
};
DataReceivedEventHandler outputHandler = new DataReceivedEventHandler(
delegate (object sender, DataReceivedEventArgs e) {
outputBuilder.AppendLine(e.Data);
}
);
process.OutputDataReceived += outputHandler;
process.ErrorDataReceived += outputHandler;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
process.CancelOutputRead();
process.CancelErrorRead();
return new ExitedProcess {
ExitCode = process.ExitCode,
Output = outputBuilder.ToString().Trim()
};
}
public static Process RunUnmanagedProcess(ProcessStartInfo startInfo) {
Process process = new Process {
StartInfo = startInfo
};
process.Start();
process.WaitForExit();
return process;
}
}
}
+115
View File
@@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace CleanFlashCommon {
public class ProcessUtils {
class Native {
internal enum ModuleFilter {
ListModulesDefault = 0x0,
ListModules32Bit = 0x01,
ListModules64Bit = 0x02,
ListModulesAll = 0x03,
}
[DllImport("psapi.dll")]
public static extern bool EnumProcessModulesEx(IntPtr hProcess, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)][In][Out] IntPtr[] lphModule, int cb, [MarshalAs(UnmanagedType.U4)] out int lpcbNeeded, uint dwFilterFlag);
[DllImport("psapi.dll")]
public static extern bool EnumProcessModules(IntPtr hProcess, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)][In][Out] IntPtr[] lphModule, int cb, [MarshalAs(UnmanagedType.U4)] out int lpcbNeeded);
[DllImport("psapi.dll")]
public static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In][MarshalAs(UnmanagedType.U4)] uint nSize);
}
public static List<string> CollectModules(Process process) {
List<string> collectedModules = new List<string>();
bool ex = true;
IntPtr[] modulePointers = new IntPtr[0];
int bytesNeeded;
// Determine number of modules
try {
if (!Native.EnumProcessModulesEx(process.Handle, modulePointers, 0, out bytesNeeded, (uint)Native.ModuleFilter.ListModulesAll)) {
return collectedModules;
}
} catch (EntryPointNotFoundException) {
if (!Native.EnumProcessModules(process.Handle, modulePointers, 0, out bytesNeeded)) {
return collectedModules;
}
ex = false;
} catch {
return collectedModules;
}
int totalModules = bytesNeeded / IntPtr.Size;
modulePointers = new IntPtr[totalModules];
// Collect modules from the process
if ((ex && !Native.EnumProcessModulesEx(process.Handle, modulePointers, bytesNeeded, out bytesNeeded, (uint) Native.ModuleFilter.ListModulesAll)) || (!ex && !Native.EnumProcessModules(process.Handle, modulePointers, bytesNeeded, out bytesNeeded))) {
return collectedModules;
}
for (int i = 0; i < totalModules; ++i) {
StringBuilder moduleFilePath = new StringBuilder(1024);
Native.GetModuleFileNameEx(process.Handle, modulePointers[i], moduleFilePath, (uint) moduleFilePath.Capacity);
string moduleName = Path.GetFileName(moduleFilePath.ToString());
collectedModules.Add(moduleName);
}
return collectedModules;
}
public static ExitedProcess RunProcess(ProcessStartInfo startInfo)
{
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
StringBuilder outputBuilder = new StringBuilder();
Process process = new Process
{
StartInfo = startInfo
};
DataReceivedEventHandler outputHandler = new DataReceivedEventHandler(
delegate (object sender, DataReceivedEventArgs e) {
outputBuilder.AppendLine(e.Data);
}
);
process.OutputDataReceived += outputHandler;
process.ErrorDataReceived += outputHandler;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
process.CancelOutputRead();
process.CancelErrorRead();
return new ExitedProcess
{
ExitCode = process.ExitCode,
Output = outputBuilder.ToString().Trim()
};
}
public static Process RunUnmanagedProcess(ProcessStartInfo startInfo)
{
Process process = new Process
{
StartInfo = startInfo
};
process.Start();
process.WaitForExit();
return process;
}
}
}
+1 -1
View File
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CleanFlashCommon")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
+1 -1
View File
@@ -14,7 +14,7 @@ namespace CleanFlashCommon {
Directory.SetCurrentDirectory(Path.GetDirectoryName(filename));
ExitedProcess process = ProcessRunner.RunProcess(
ExitedProcess process = ProcessUtils.RunProcess(
new ProcessStartInfo {
FileName = "reg.exe",
Arguments = "import " + Path.GetFileName(filename),
+34 -10
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace CleanFlashCommon {
public class Uninstaller {
@@ -12,10 +13,14 @@ namespace CleanFlashCommon {
"flashcenterservice", "flashcenteruninst", "flashplay", "update", "wow_helper",
"dummy_cmd", "flashhelperservice",
// Flash Player-related processes
"flashplayerapp", "flashplayer_sa", "flashplayer_sa_debug",
"flashplayerapp", "flashplayer_sa", "flashplayer_sa_debug"
};
private static string[] CONDITIONAL_PROCESSES = new string[]
{
// Plugin container for Firefox
"plugin-container",
// Browsers that might be using Flash Player right now
"opera", "iexplore", "chrome", "chromium", "brave", "vivaldi", "basilisk", "msedge",
"seamonkey", "palemoon", "k-meleon", "plugin-container", "waterfox"
"opera", "iexplore", "chrome", "chromium", "brave", "vivaldi", "msedge"
};
static Uninstaller() {
@@ -31,7 +36,7 @@ namespace CleanFlashCommon {
}
public static void DeleteTask(string task) {
ProcessRunner.RunUnmanagedProcess(
ProcessUtils.RunUnmanagedProcess(
new ProcessStartInfo {
FileName = "schtasks.exe",
Arguments = "/delete /tn \"" + task + "\" /f",
@@ -42,7 +47,7 @@ namespace CleanFlashCommon {
}
public static void StopService(string service) {
ProcessRunner.RunUnmanagedProcess(
ProcessUtils.RunUnmanagedProcess(
new ProcessStartInfo {
FileName = "net.exe",
Arguments = "stop \"" + service + "\"",
@@ -56,7 +61,7 @@ namespace CleanFlashCommon {
// First, stop the service.
StopService(service);
ProcessRunner.RunUnmanagedProcess(
ProcessUtils.RunUnmanagedProcess(
new ProcessStartInfo {
FileName = "sc.exe",
Arguments = "delete \"" + service + "\"",
@@ -80,7 +85,7 @@ namespace CleanFlashCommon {
// Remove Flash Center cache and user data
FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Flash_Center"));
// Remove shared start menu shortcuts
FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu), "Programs", "Flash Center"));
FileUtil.WipeFolder(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Programs", "Flash Center"));
@@ -93,14 +98,18 @@ namespace CleanFlashCommon {
// Remove Flash Player from Program Files
FileUtil.WipeFolder(SystemInfo.GetProgramFlash32Path());
// Remove spyware dropped by Flash Center in the temporary folder
// Remove spyware dropped by Flash Center in the temporary folder
string tempFolder = Path.GetTempPath();
foreach (string dir in Directory.GetDirectories(tempFolder)) {
string parentName = Path.GetFileName(dir);
if (parentName.Length == 11 && parentName.EndsWith(".tmp")) {
FileUtil.WipeFolder(dir);
try {
FileUtil.WipeFolder(dir);
} catch {
// Oh well...
}
}
}
@@ -121,10 +130,25 @@ namespace CleanFlashCommon {
}
}
public static bool ShouldKillConditionalProcess(Process process) {
if (!CONDITIONAL_PROCESSES.Contains(process.ProcessName.ToLower())) {
return false;
}
foreach (string module in ProcessUtils.CollectModules(process)) {
if (Regex.IsMatch(module, "^(flash(32|64)|libpepflash|npswf)", RegexOptions.Compiled | RegexOptions.IgnoreCase)) {
return true;
}
}
return false;
}
public static void StopProcesses() {
// Stop all processes that might interfere with the install process
List<Process> processes = Process.GetProcesses()
.Where(process => PROCESSES_TO_KILL.Contains(process.ProcessName.ToLower()))
.Where(process => PROCESSES_TO_KILL.Contains(process.ProcessName.ToLower()) || ShouldKillConditionalProcess(process))
.OrderBy(o => o.StartTime)
.ToList();
+3 -3
View File
@@ -32,11 +32,11 @@ namespace CleanFlashCommon {
}
public class UpdateChecker {
private static readonly string FLASH_VERSION = "34.0.0.192";
private static readonly string VERSION = "v34.0.0.192";
private static readonly string FLASH_VERSION = "34.0.0.251";
private static readonly string VERSION = "v34.0.0.251";
private static readonly string AUTHOR = "cleanflash";
private static readonly string REPO = "installer";
private static readonly string USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36";
private static readonly string USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36";
public static string GetAPILink() {
return "https://api.github.com/repos/" + AUTHOR + "/" + REPO + "/releases/latest";
+86 -87
View File
@@ -77,9 +77,9 @@ namespace CleanFlashInstaller {
this.playerChoicePanel.SuspendLayout();
this.debugChoicePanel.SuspendLayout();
this.SuspendLayout();
//
//
// disclaimerLabel
//
//
this.disclaimerLabel.AutoSize = true;
this.disclaimerLabel.Location = new System.Drawing.Point(25, 0);
this.disclaimerLabel.Name = "disclaimerLabel";
@@ -87,25 +87,25 @@ namespace CleanFlashInstaller {
this.disclaimerLabel.TabIndex = 0;
this.disclaimerLabel.Text = resources.GetString("disclaimerLabel.Text");
this.disclaimerLabel.Click += new System.EventHandler(this.disclaimerLabel_Click);
//
//
// separator
//
//
this.separator.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.separator.ForeColor = System.Drawing.SystemColors.ActiveCaptionText;
this.separator.Location = new System.Drawing.Point(0, 270);
this.separator.Name = "separator";
this.separator.Size = new System.Drawing.Size(732, 1);
this.separator.TabIndex = 1;
//
//
// checkboxImages
//
//
this.checkboxImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("checkboxImages.ImageStream")));
this.checkboxImages.TransparentColor = System.Drawing.Color.Transparent;
this.checkboxImages.Images.SetKeyName(0, "checkboxOff.png");
this.checkboxImages.Images.SetKeyName(1, "checkboxOn.png");
//
//
// flashLogo
//
//
this.flashLogo.Image = global::CleanFlashInstaller.Properties.Resources.flashLogo;
this.flashLogo.Location = new System.Drawing.Point(90, 36);
this.flashLogo.Margin = new System.Windows.Forms.Padding(0);
@@ -113,9 +113,9 @@ namespace CleanFlashInstaller {
this.flashLogo.Size = new System.Drawing.Size(109, 107);
this.flashLogo.TabIndex = 4;
this.flashLogo.TabStop = false;
//
//
// titleLabel
//
//
this.titleLabel.AutoSize = true;
this.titleLabel.Font = new System.Drawing.Font("Segoe UI", 24F);
this.titleLabel.Location = new System.Drawing.Point(233, 54);
@@ -123,9 +123,9 @@ namespace CleanFlashInstaller {
this.titleLabel.Size = new System.Drawing.Size(274, 45);
this.titleLabel.TabIndex = 5;
this.titleLabel.Text = "Clean Flash Player";
//
//
// subtitleLabel
//
//
this.subtitleLabel.AutoSize = true;
this.subtitleLabel.Font = new System.Drawing.Font("Segoe UI", 13F);
this.subtitleLabel.Location = new System.Drawing.Point(280, 99);
@@ -133,18 +133,18 @@ namespace CleanFlashInstaller {
this.subtitleLabel.Size = new System.Drawing.Size(231, 25);
this.subtitleLabel.TabIndex = 6;
this.subtitleLabel.Text = "built from unknown version";
//
//
// disclaimerPanel
//
//
this.disclaimerPanel.Controls.Add(this.disclaimerBox);
this.disclaimerPanel.Controls.Add(this.disclaimerLabel);
this.disclaimerPanel.Location = new System.Drawing.Point(90, 162);
this.disclaimerPanel.Name = "disclaimerPanel";
this.disclaimerPanel.Size = new System.Drawing.Size(545, 105);
this.disclaimerPanel.TabIndex = 8;
//
//
// choicePanel
//
//
this.choicePanel.Controls.Add(this.activeXLabel);
this.choicePanel.Controls.Add(this.activeXBox);
this.choicePanel.Controls.Add(this.netscapeLabel);
@@ -156,9 +156,9 @@ namespace CleanFlashInstaller {
this.choicePanel.Name = "choicePanel";
this.choicePanel.Size = new System.Drawing.Size(545, 105);
this.choicePanel.TabIndex = 9;
//
//
// activeXLabel
//
//
this.activeXLabel.AutoSize = true;
this.activeXLabel.Location = new System.Drawing.Point(389, 47);
this.activeXLabel.Name = "activeXLabel";
@@ -166,19 +166,19 @@ namespace CleanFlashInstaller {
this.activeXLabel.TabIndex = 8;
this.activeXLabel.Text = "ActiveX (OCX)\r\n(IE/Embedded/Desktop)";
this.activeXLabel.Click += new System.EventHandler(this.activeXLabel_Click);
//
//
// netscapeLabel
//
//
this.netscapeLabel.AutoSize = true;
this.netscapeLabel.Location = new System.Drawing.Point(210, 47);
this.netscapeLabel.Name = "netscapeLabel";
this.netscapeLabel.Size = new System.Drawing.Size(131, 34);
this.netscapeLabel.TabIndex = 6;
this.netscapeLabel.Text = "Netscape API (NPAPI)\r\n(Firefox/ESR/Basilisk)\r\n";
this.netscapeLabel.Text = "Netscape API (NPAPI)\r\n(Firefox/ESR/Waterfox)\r\n";
this.netscapeLabel.Click += new System.EventHandler(this.netscapeLabel_Click);
//
//
// pepperLabel
//
//
this.pepperLabel.AutoSize = true;
this.pepperLabel.Location = new System.Drawing.Point(24, 47);
this.pepperLabel.Name = "pepperLabel";
@@ -186,18 +186,18 @@ namespace CleanFlashInstaller {
this.pepperLabel.TabIndex = 4;
this.pepperLabel.Text = "Pepper API (PPAPI)\r\n(Chrome/Opera/Brave)";
this.pepperLabel.Click += new System.EventHandler(this.pepperLabel_Click);
//
//
// browserAskLabel
//
//
this.browserAskLabel.AutoSize = true;
this.browserAskLabel.Location = new System.Drawing.Point(-2, 2);
this.browserAskLabel.Name = "browserAskLabel";
this.browserAskLabel.Size = new System.Drawing.Size(287, 17);
this.browserAskLabel.TabIndex = 0;
this.browserAskLabel.Text = "Which browser plugins would you like to install?";
//
//
// installPanel
//
//
this.installPanel.Controls.Add(this.progressBar);
this.installPanel.Controls.Add(this.progressLabel);
this.installPanel.Controls.Add(this.label2);
@@ -205,52 +205,52 @@ namespace CleanFlashInstaller {
this.installPanel.Name = "installPanel";
this.installPanel.Size = new System.Drawing.Size(545, 105);
this.installPanel.TabIndex = 10;
//
//
// progressLabel
//
//
this.progressLabel.AutoSize = true;
this.progressLabel.Location = new System.Drawing.Point(46, 30);
this.progressLabel.Name = "progressLabel";
this.progressLabel.Size = new System.Drawing.Size(74, 17);
this.progressLabel.TabIndex = 1;
this.progressLabel.Text = "Preparing...";
//
//
// label2
//
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(150, 17);
this.label2.TabIndex = 0;
this.label2.Text = "Installation in progress...";
//
//
// beforeInstallPanel
//
//
this.beforeInstallPanel.Controls.Add(this.beforeInstallLabel);
this.beforeInstallPanel.Location = new System.Drawing.Point(90, 162);
this.beforeInstallPanel.Name = "beforeInstallPanel";
this.beforeInstallPanel.Size = new System.Drawing.Size(545, 105);
this.beforeInstallPanel.TabIndex = 11;
//
//
// beforeInstallLabel
//
//
this.beforeInstallLabel.AutoSize = true;
this.beforeInstallLabel.Location = new System.Drawing.Point(3, 2);
this.beforeInstallLabel.Name = "beforeInstallLabel";
this.beforeInstallLabel.Size = new System.Drawing.Size(147, 17);
this.beforeInstallLabel.TabIndex = 12;
this.beforeInstallLabel.Text = "Allan please add details";
//
//
// completePanel
//
//
this.completePanel.Controls.Add(this.completeLabel);
this.completePanel.Location = new System.Drawing.Point(90, 162);
this.completePanel.Name = "completePanel";
this.completePanel.Size = new System.Drawing.Size(545, 105);
this.completePanel.TabIndex = 12;
//
//
// completeLabel
//
//
this.completeLabel.AutoSize = true;
this.completeLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 0);
this.completeLabel.LinkColor = System.Drawing.Color.White;
@@ -261,9 +261,9 @@ namespace CleanFlashInstaller {
this.completeLabel.Text = "Allan where are the details?";
this.completeLabel.VisitedLinkColor = System.Drawing.Color.White;
this.completeLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.completeLabel_LinkClicked);
//
//
// failurePanel
//
//
this.failurePanel.Controls.Add(this.copyErrorButton);
this.failurePanel.Controls.Add(this.failureBox);
this.failurePanel.Controls.Add(this.failureText);
@@ -271,18 +271,18 @@ namespace CleanFlashInstaller {
this.failurePanel.Name = "failurePanel";
this.failurePanel.Size = new System.Drawing.Size(545, 105);
this.failurePanel.TabIndex = 13;
//
//
// failureBox
//
//
this.failureBox.Location = new System.Drawing.Point(4, 44);
this.failureBox.Multiline = true;
this.failureBox.Name = "failureBox";
this.failureBox.ReadOnly = true;
this.failureBox.Size = new System.Drawing.Size(431, 58);
this.failureBox.TabIndex = 15;
//
//
// failureText
//
//
this.failureText.AutoSize = true;
this.failureText.Location = new System.Drawing.Point(3, 2);
this.failureText.Name = "failureText";
@@ -290,9 +290,9 @@ namespace CleanFlashInstaller {
this.failureText.TabIndex = 14;
this.failureText.Text = "Oops! The installation process has encountered an unexpected problem.\r\nThe follow" +
"ing details could be useful. Press the Retry button to try again.";
//
//
// playerChoicePanel
//
//
this.playerChoicePanel.Controls.Add(this.playerStartMenuLabel);
this.playerChoicePanel.Controls.Add(this.playerStartMenuBox);
this.playerChoicePanel.Controls.Add(this.playerDesktopLabel);
@@ -304,9 +304,9 @@ namespace CleanFlashInstaller {
this.playerChoicePanel.Name = "playerChoicePanel";
this.playerChoicePanel.Size = new System.Drawing.Size(545, 105);
this.playerChoicePanel.TabIndex = 10;
//
//
// playerStartMenuLabel
//
//
this.playerStartMenuLabel.AutoSize = true;
this.playerStartMenuLabel.Location = new System.Drawing.Point(389, 47);
this.playerStartMenuLabel.Name = "playerStartMenuLabel";
@@ -314,9 +314,9 @@ namespace CleanFlashInstaller {
this.playerStartMenuLabel.TabIndex = 8;
this.playerStartMenuLabel.Text = "Create Shortcuts\r\nin Start Menu";
this.playerStartMenuLabel.Click += new System.EventHandler(this.playerStartMenuLabel_Click);
//
//
// playerDesktopLabel
//
//
this.playerDesktopLabel.AutoSize = true;
this.playerDesktopLabel.Location = new System.Drawing.Point(210, 47);
this.playerDesktopLabel.Name = "playerDesktopLabel";
@@ -324,9 +324,9 @@ namespace CleanFlashInstaller {
this.playerDesktopLabel.TabIndex = 6;
this.playerDesktopLabel.Text = "Create Shortcuts\r\non Desktop";
this.playerDesktopLabel.Click += new System.EventHandler(this.playerDesktopLabel_Click);
//
//
// playerLabel
//
//
this.playerLabel.AutoSize = true;
this.playerLabel.Location = new System.Drawing.Point(24, 47);
this.playerLabel.Name = "playerLabel";
@@ -334,18 +334,18 @@ namespace CleanFlashInstaller {
this.playerLabel.TabIndex = 4;
this.playerLabel.Text = "Install Standalone\r\nFlash Player";
this.playerLabel.Click += new System.EventHandler(this.playerLabel_Click);
//
//
// playerAskLabel
//
//
this.playerAskLabel.AutoSize = true;
this.playerAskLabel.Location = new System.Drawing.Point(-2, 2);
this.playerAskLabel.Name = "playerAskLabel";
this.playerAskLabel.Size = new System.Drawing.Size(314, 17);
this.playerAskLabel.TabIndex = 0;
this.playerAskLabel.Text = "Would you like to install the standalone Flash Player?";
//
//
// nextButton
//
//
this.nextButton.BackColor = System.Drawing.Color.Black;
this.nextButton.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(118)))), ((int)(((byte)(118)))), ((int)(((byte)(118)))));
this.nextButton.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(81)))), ((int)(((byte)(81)))));
@@ -360,9 +360,9 @@ namespace CleanFlashInstaller {
this.nextButton.Text = "AGREE";
this.nextButton.UseVisualStyleBackColor = false;
this.nextButton.Click += new System.EventHandler(this.nextButton_Click);
//
//
// prevButton
//
//
this.prevButton.BackColor = System.Drawing.Color.Black;
this.prevButton.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(118)))), ((int)(((byte)(118)))), ((int)(((byte)(118)))));
this.prevButton.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(81)))), ((int)(((byte)(81)))));
@@ -377,9 +377,9 @@ namespace CleanFlashInstaller {
this.prevButton.Text = "QUIT";
this.prevButton.UseVisualStyleBackColor = false;
this.prevButton.Click += new System.EventHandler(this.prevButton_Click);
//
//
// playerStartMenuBox
//
//
this.playerStartMenuBox.Appearance = System.Windows.Forms.Appearance.Button;
this.playerStartMenuBox.AutoSize = true;
this.playerStartMenuBox.Checked = true;
@@ -398,9 +398,9 @@ namespace CleanFlashInstaller {
this.playerStartMenuBox.Size = new System.Drawing.Size(21, 21);
this.playerStartMenuBox.TabIndex = 7;
this.playerStartMenuBox.UseVisualStyleBackColor = true;
//
//
// playerDesktopBox
//
//
this.playerDesktopBox.Appearance = System.Windows.Forms.Appearance.Button;
this.playerDesktopBox.AutoSize = true;
this.playerDesktopBox.Checked = true;
@@ -419,9 +419,9 @@ namespace CleanFlashInstaller {
this.playerDesktopBox.Size = new System.Drawing.Size(21, 21);
this.playerDesktopBox.TabIndex = 5;
this.playerDesktopBox.UseVisualStyleBackColor = true;
//
//
// playerBox
//
//
this.playerBox.Appearance = System.Windows.Forms.Appearance.Button;
this.playerBox.AutoSize = true;
this.playerBox.Checked = true;
@@ -441,9 +441,9 @@ namespace CleanFlashInstaller {
this.playerBox.TabIndex = 3;
this.playerBox.UseVisualStyleBackColor = true;
this.playerBox.CheckedChanged += new System.EventHandler(this.playerBox_CheckedChanged);
//
//
// activeXBox
//
//
this.activeXBox.Appearance = System.Windows.Forms.Appearance.Button;
this.activeXBox.AutoSize = true;
this.activeXBox.Checked = true;
@@ -462,9 +462,9 @@ namespace CleanFlashInstaller {
this.activeXBox.Size = new System.Drawing.Size(21, 21);
this.activeXBox.TabIndex = 7;
this.activeXBox.UseVisualStyleBackColor = true;
//
//
// netscapeBox
//
//
this.netscapeBox.Appearance = System.Windows.Forms.Appearance.Button;
this.netscapeBox.AutoSize = true;
this.netscapeBox.Checked = true;
@@ -483,9 +483,9 @@ namespace CleanFlashInstaller {
this.netscapeBox.Size = new System.Drawing.Size(21, 21);
this.netscapeBox.TabIndex = 5;
this.netscapeBox.UseVisualStyleBackColor = true;
//
//
// pepperBox
//
//
this.pepperBox.Appearance = System.Windows.Forms.Appearance.Button;
this.pepperBox.AutoSize = true;
this.pepperBox.Checked = true;
@@ -504,9 +504,9 @@ namespace CleanFlashInstaller {
this.pepperBox.Size = new System.Drawing.Size(21, 21);
this.pepperBox.TabIndex = 3;
this.pepperBox.UseVisualStyleBackColor = true;
//
//
// disclaimerBox
//
//
this.disclaimerBox.Appearance = System.Windows.Forms.Appearance.Button;
this.disclaimerBox.AutoSize = true;
this.disclaimerBox.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(51)))), ((int)(((byte)(51)))));
@@ -524,9 +524,9 @@ namespace CleanFlashInstaller {
this.disclaimerBox.TabIndex = 2;
this.disclaimerBox.UseVisualStyleBackColor = true;
this.disclaimerBox.CheckedChanged += new System.EventHandler(this.disclaimerBox_CheckedChanged);
//
//
// copyErrorButton
//
//
this.copyErrorButton.BackColor = System.Drawing.Color.Black;
this.copyErrorButton.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(118)))), ((int)(((byte)(118)))), ((int)(((byte)(118)))));
this.copyErrorButton.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(81)))), ((int)(((byte)(81)))));
@@ -541,9 +541,9 @@ namespace CleanFlashInstaller {
this.copyErrorButton.Text = "COPY";
this.copyErrorButton.UseVisualStyleBackColor = false;
this.copyErrorButton.Click += new System.EventHandler(this.copyErrorButton_Click);
//
//
// progressBar
//
//
this.progressBar.Location = new System.Drawing.Point(49, 58);
this.progressBar.Maximum = 100;
this.progressBar.Minimum = 0;
@@ -553,18 +553,18 @@ namespace CleanFlashInstaller {
this.progressBar.Size = new System.Drawing.Size(451, 23);
this.progressBar.TabIndex = 2;
this.progressBar.Value = 0;
//
//
// debugChoicePanel
//
//
this.debugChoicePanel.Controls.Add(this.debugButton);
this.debugChoicePanel.Controls.Add(this.debugAskLabel);
this.debugChoicePanel.Location = new System.Drawing.Point(90, 163);
this.debugChoicePanel.Name = "debugChoicePanel";
this.debugChoicePanel.Size = new System.Drawing.Size(545, 105);
this.debugChoicePanel.TabIndex = 11;
//
//
// debugAskLabel
//
//
this.debugAskLabel.AutoSize = true;
this.debugAskLabel.Location = new System.Drawing.Point(-2, 2);
this.debugAskLabel.Name = "debugAskLabel";
@@ -573,9 +573,9 @@ namespace CleanFlashInstaller {
this.debugAskLabel.Text = "Would you like to install the debug version of Clean Flash Player?\r\nYou should on" +
"ly choose the debug version if you are planning to create Flash applications.\r\nI" +
"f you are not sure, simply press NEXT.";
//
//
// debugButton
//
//
this.debugButton.BackColor = System.Drawing.Color.Black;
this.debugButton.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(118)))), ((int)(((byte)(118)))), ((int)(((byte)(118)))));
this.debugButton.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(81)))), ((int)(((byte)(81)))));
@@ -590,10 +590,10 @@ namespace CleanFlashInstaller {
this.debugButton.Text = "INSTALL DEBUG VERSION";
this.debugButton.UseVisualStyleBackColor = false;
this.debugButton.Click += new System.EventHandler(this.debugButton_Click);
//
//
// InstallForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(51)))), ((int)(((byte)(51)))));
this.ClientSize = new System.Drawing.Size(712, 329);
@@ -688,4 +688,3 @@ namespace CleanFlashInstaller {
private System.Windows.Forms.Label debugAskLabel;
}
}
+5 -5
View File
@@ -95,13 +95,13 @@ If you ever change your mind, check out Clean Flash Player's website!";
browsers.Add("Internet Explorer");
}
text = string.Format("You are about to install Clean Flash Player.\nPlease close all browsers, including Google Chrome, Mozilla Firefox and Internet Explorer.\n\nThe installer will close all browser windows, uninstall previous versions of Flash Player and\nFlash Center, and install Flash for {0}.", JoinStringsWithAnd(browsers));
text = string.Format("You are about to install Clean Flash Player.\nPlease close any browser windows running Flash content before you continue.\n\nThe installer will close all browser windows running Flash, uninstall previous versions of Flash Player and\nFlash Center, and install Flash for {0}.", JoinStringsWithAnd(browsers));
nextButton.Text = "INSTALL";
} else {
text = "You are about to uninstall Clean Flash Player.\nPlease close all browsers, including Google Chrome, Mozilla Firefox and Internet Explorer.\n\nThe installer will completely remove all versions of Flash Player from this computer,\nincluding Clean Flash Player and older versions of Adobe Flash Player.";
text = "You are about to uninstall Clean Flash Player.\nPlease close any browser windows running Flash content before you continue.\n\nThe installer will completely remove all versions of Flash Player from this computer,\nincluding Clean Flash Player and older versions of Adobe Flash Player.";
nextButton.Text = "UNINSTALL";
}
beforeInstallLabel.Text = text;
beforeInstallPanel.Visible = true;
prevButton.Text = "BACK";
@@ -188,7 +188,7 @@ If you ever change your mind, check out Clean Flash Player's website!";
Text = string.Format("Clean Flash Player {0} Installer", version);
OpenDisclaimerPanel();
CheckAgreeBox();
CheckAgreeBox();
}
private void prevButton_Click(object sender, EventArgs e) {
@@ -284,7 +284,7 @@ If you ever change your mind, check out Clean Flash Player's website!";
private void completeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
if (e.Link.Start == 212) {
Process.Start("https://waterfox.net");
Process.Start("https://classic.waterfox.net");
} else {
Process.Start("https://cleanflash.github.io");
}
+2 -2
View File
@@ -119,8 +119,8 @@
</resheader>
<data name="disclaimerLabel.Text" xml:space="preserve">
<value>I am aware that Adobe Flash Player is no longer supported, nor provided by Adobe Inc.
Clean Flash Player is a third-party version of Flash Player maintained by darktohka,
built from the latest Flash Player version by Adobe with adware removed.
Clean Flash Player is a third-party version of Flash Player built from the latest Flash Player
version with adware removed.
Adobe is not required by any means to provide support for this version of Flash Player.
</value>
+1 -1
View File
@@ -13,7 +13,7 @@ namespace CleanFlashInstaller {
public class Installer {
public static void RegisterActiveX(string filename) {
Directory.SetCurrentDirectory(Path.GetDirectoryName(filename));
ExitedProcess process = ProcessRunner.RunProcess(
ExitedProcess process = ProcessUtils.RunProcess(
new ProcessStartInfo {
FileName = "regsvr32.exe",
Arguments = "/s " + Path.GetFileName(filename),
+10 -1
View File
@@ -1,16 +1,25 @@
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace CleanFlashInstaller {
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
static void Main(string[] args) {
if (Environment.OSVersion.Version.Major >= 6) {
//SetProcessDPIAware();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new InstallForm());
}
[DllImport("user32.dll")]
private static extern bool SetProcessDPIAware();
}
}
@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Clean Flash Player 34.0.0.192 Installer")]
[assembly: AssemblyTitle("Clean Flash Player 34.0.0.251 Installer")]
[assembly: AssemblyDescription("The newest version of Flash Player, patched and ready to go beyond 2021.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("FlashPatch Team")]
[assembly: AssemblyProduct("Clean Flash Player 34.0.0.192 Installer")]
[assembly: AssemblyProduct("Clean Flash Player 34.0.0.251 Installer")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("34.0.0.192")]
[assembly: AssemblyFileVersion("34.0.0.192")]
[assembly: AssemblyVersion("34.0.0.251")]
[assembly: AssemblyFileVersion("34.0.0.251")]
+22 -17
View File
@@ -1,20 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="CleanFlashInstaller.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<assemblyIdentity version="1.0.0.0" name="CleanFlashInstaller.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
</assembly>
+7
View File
@@ -74,9 +74,16 @@ namespace CleanFlashUninstaller {
return;
}
if (Environment.OSVersion.Version.Major >= 6) {
//SetProcessDPIAware();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new UninstallForm());
}
[DllImport("user32.dll")]
private static extern bool SetProcessDPIAware();
}
}
@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Clean Flash Player 34.0.0.192 Uninstaller")]
[assembly: AssemblyTitle("Clean Flash Player 34.0.0.251 Uninstaller")]
[assembly: AssemblyDescription("The newest version of Flash Player, patched and ready to go beyond 2021.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("FlashPatch Team")]
[assembly: AssemblyProduct("Clean Flash Player 34.0.0.192 Uninstaller")]
[assembly: AssemblyProduct("Clean Flash Player 34.0.0.251 Uninstaller")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("34.0.0.192")]
[assembly: AssemblyFileVersion("34.0.0.192")]
[assembly: AssemblyVersion("34.0.0.251")]
[assembly: AssemblyFileVersion("34.0.0.251")]
+1 -1
View File
@@ -115,7 +115,7 @@ namespace CleanFlashUninstaller {
private void completeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
if (e.Link.Start == 212) {
Process.Start("https://waterfox.net");
Process.Start("https://classic.waterfox.net");
} else {
Process.Start("https://cleanflash.github.io");
}
+1 -1
View File
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACY
CAAAAk1TRnQBSQFMAgEBAgEAAeABAQHgAQEBDwEAAQ8BAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAfABAQHwAQEBDwEAAQ8BAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABPAMAAQ8DAAEBAQABCAUAAYQBAxgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc
AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA
AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz
+22 -17
View File
@@ -1,20 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="CleanFlashUninstaller.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<assemblyIdentity version="1.0.0.0" name="CleanFlashUninstaller.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
</assembly>
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 darktohka
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+5 -5
View File
@@ -1,10 +1,10 @@
# Clean Flash Player
[![Patreon](https://img.shields.io/badge/Kofi-donate-purple.svg)](https://ko-fi.com/disyer) [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/darktohka/FlashPatch/blob/master/LICENSE)
[![Patreon](https://img.shields.io/badge/Kofi-donate-purple.svg)](https://ko-fi.com/disyer) [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitlab.com/cleanflash/installer/-/blob/master/LICENSE)
![Image of Clean Flash Player](https://i.imgur.com/565LJBI.png)
[Download latest version](https://github.com/CleanFlash/installer/releases/latest)
[Download latest version](https://gitlab.com/cleanflash/installer/-/releases)
## What's this?
@@ -24,14 +24,14 @@ Newer versions of Google Chrome and Mozilla Firefox do not support Flash Player
To keep using Flash Player on **Google Chrome**, install an older version of Chrome. The last supported version is Chrome 87.0.4280.168.
To keep using Flash Player on **Mozilla Firefox**, install [**Waterfox**](https://waterfox.net) or [**Basilisk Browser**](https://basilisk-browser.org). Both of them are forks of Mozilla Firefox with built-in Flash Player support.
To keep using Flash Player on **Mozilla Firefox**, install [**Waterfox Classic**](https://classic.waterfox.net), [**Pale Moon**](https://palemoon.org) or [**K-Meleon**](http://kmeleonbrowser.org/forum/read.php?19,154431). They are forks of Mozilla Firefox with built-in Flash Player support.
**Internet Explorer** still supports Flash Player on Windows.
**Internet Explorer** still supports Flash Player on Windows 10.
## Usage
- Make sure you have a compatible browser to use Flash Player with
- Download the latest version from [GitHub](https://github.com/CleanFlash/installer/releases/latest)
- Download the latest version from [GitLab](https://gitlab.com/cleanflash/installer/-/releases)
- Extract the installer and run it
- Accept the disclaimer
- Choose which browser plugins to install