mirror of
https://gitlab.com/cleanflash/installer.git
synced 2026-08-13 02:41:38 +08:00
Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ffa1b2ff49 | ||
|
|
64de0ade31 | ||
|
|
04445d50e6 | ||
|
|
9606769bdf | ||
|
|
da6dfd8335 | ||
|
|
4463ce143f | ||
|
|
c0a292cff9 | ||
|
|
c1876bc6af | ||
|
|
2ebc6b9a41 | ||
|
|
93aa977a47 | ||
|
|
6f68332a30 | ||
|
|
7d9acb493a | ||
|
|
136cd0a292 | ||
|
|
ec8dbc5a91 | ||
|
|
9c609ae28b | ||
|
|
086cd2b934 |
@@ -21,7 +21,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.2">
|
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.3">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ namespace CleanFlashCommon {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (file.Extension.ToLower().Equals(".ocx")) {
|
||||||
|
Uninstaller.UnregisterActiveX(file.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
file.IsReadOnly = false;
|
file.IsReadOnly = false;
|
||||||
file.Delete();
|
file.Delete();
|
||||||
|
|||||||
@@ -27,6 +27,24 @@ namespace CleanFlashCommon {
|
|||||||
WinAPI.AllowModifications();
|
WinAPI.AllowModifications();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void UnregisterActiveX(string filename) {
|
||||||
|
string relativeFilename = Path.GetFileName(filename);
|
||||||
|
ProcessStartInfo info = new ProcessStartInfo {
|
||||||
|
FileName = "regsvr32.exe",
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = true
|
||||||
|
};
|
||||||
|
|
||||||
|
Directory.SetCurrentDirectory(Path.GetDirectoryName(filename));
|
||||||
|
|
||||||
|
info.Arguments = "/s /u " + relativeFilename;
|
||||||
|
ExitedProcess process = ProcessUtils.RunProcess(info);
|
||||||
|
|
||||||
|
if (!process.IsSuccessful) {
|
||||||
|
throw new InstallException(string.Format("Failed to unregister ActiveX plugin: error code {0}\n\n{1}", process.ExitCode, process.Output));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void UninstallRegistry() {
|
public static void UninstallRegistry() {
|
||||||
if (Environment.Is64BitOperatingSystem) {
|
if (Environment.Is64BitOperatingSystem) {
|
||||||
RegistryManager.ApplyRegistry(Properties.Resources.uninstallRegistry, Properties.Resources.uninstallRegistry64);
|
RegistryManager.ApplyRegistry(Properties.Resources.uninstallRegistry, Properties.Resources.uninstallRegistry64);
|
||||||
|
|||||||
@@ -32,11 +32,11 @@ namespace CleanFlashCommon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class UpdateChecker {
|
public class UpdateChecker {
|
||||||
private static readonly string FLASH_VERSION = "34.0.0.289";
|
private static readonly string FLASH_VERSION = "34.0.0.330";
|
||||||
private static readonly string VERSION = "34.0.0.289";
|
private static readonly string VERSION = "34.0.0.330";
|
||||||
private static readonly string AUTHOR = "cleanflash";
|
private static readonly string AUTHOR = "cleanflash";
|
||||||
private static readonly string REPO = "installer";
|
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/114.0.0.0 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/136.0.0.0 Safari/537.36";
|
||||||
|
|
||||||
public static string GetAPILink() {
|
public static string GetAPILink() {
|
||||||
return "https://api.github.com/repos/" + AUTHOR + "/" + REPO + "/releases/latest";
|
return "https://api.github.com/repos/" + AUTHOR + "/" + REPO + "/releases/latest";
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
<TargetFramework>net40</TargetFramework>
|
<TargetFramework>net40</TargetFramework>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
<StartupObject></StartupObject>
|
<StartupObject></StartupObject>
|
||||||
<Product>Clean Flash Player 34.0.0.289 Installer</Product>
|
<Product>Clean Flash Player 34.0.0.330 Installer</Product>
|
||||||
<AssemblyTitle>Clean Flash Player 34.0.0.289 Installer</AssemblyTitle>
|
<AssemblyTitle>Clean Flash Player 34.0.0.330 Installer</AssemblyTitle>
|
||||||
<FileVersion>34.0.0.289</FileVersion>
|
<FileVersion>34.0.0.330</FileVersion>
|
||||||
<AssemblyVersion>34.0.0.289</AssemblyVersion>
|
<AssemblyVersion>34.0.0.330</AssemblyVersion>
|
||||||
<Version>34.0.0.289</Version>
|
<Version>34.0.0.330</Version>
|
||||||
<Authors>FlashPatch Team</Authors>
|
<Authors>FlashPatch Team</Authors>
|
||||||
<Company>FlashPatch Team</Company>
|
<Company>FlashPatch Team</Company>
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
@@ -19,17 +19,6 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="cleanflash.7z" />
|
<None Remove="cleanflash.7z" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<COMReference Include="IWshRuntimeLibrary">
|
|
||||||
<WrapperTool>tlbimp</WrapperTool>
|
|
||||||
<VersionMinor>0</VersionMinor>
|
|
||||||
<VersionMajor>1</VersionMajor>
|
|
||||||
<Guid>f935dc20-1cf0-11d0-adb9-00c04fd58a0b</Guid>
|
|
||||||
<Lcid>0</Lcid>
|
|
||||||
<Isolated>false</Isolated>
|
|
||||||
<EmbedInteropTypes>true</EmbedInteropTypes>
|
|
||||||
</COMReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="icon.ico" />
|
<Content Include="icon.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -48,11 +37,10 @@
|
|||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="CleanFlashCommon" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ILRepack.Lib.MSBuild.Task" Version="2.0.18.2" />
|
<PackageReference Include="ILRepack.Lib.MSBuild.Task" Version="2.0.18.2" />
|
||||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.2">
|
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.3">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
+2
@@ -374,6 +374,7 @@ namespace CleanFlashInstaller {
|
|||||||
this.prevButton.Name = "prevButton";
|
this.prevButton.Name = "prevButton";
|
||||||
this.prevButton.Size = new System.Drawing.Size(138, 31);
|
this.prevButton.Size = new System.Drawing.Size(138, 31);
|
||||||
this.prevButton.TabIndex = 3;
|
this.prevButton.TabIndex = 3;
|
||||||
|
this.prevButton.TabStop = false;
|
||||||
this.prevButton.Text = "QUIT";
|
this.prevButton.Text = "QUIT";
|
||||||
this.prevButton.UseVisualStyleBackColor = false;
|
this.prevButton.UseVisualStyleBackColor = false;
|
||||||
this.prevButton.Click += new System.EventHandler(this.prevButton_Click);
|
this.prevButton.Click += new System.EventHandler(this.prevButton_Click);
|
||||||
@@ -620,6 +621,7 @@ namespace CleanFlashInstaller {
|
|||||||
this.Name = "InstallForm";
|
this.Name = "InstallForm";
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
this.Text = "Clean Flash Player Dev Installer";
|
this.Text = "Clean Flash Player Dev Installer";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.InstallForm_FormClosing);
|
||||||
this.Load += new System.EventHandler(this.InstallForm_Load);
|
this.Load += new System.EventHandler(this.InstallForm_Load);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.flashLogo)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.flashLogo)).EndInit();
|
||||||
this.disclaimerPanel.ResumeLayout(false);
|
this.disclaimerPanel.ResumeLayout(false);
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ If you ever change your mind, check out Clean Flash Player's website!";
|
|||||||
|
|
||||||
if (pepperBox.Checked || netscapeBox.Checked || activeXBox.Checked) {
|
if (pepperBox.Checked || netscapeBox.Checked || activeXBox.Checked) {
|
||||||
completeLabel.Text = COMPLETE_INSTALL_TEXT;
|
completeLabel.Text = COMPLETE_INSTALL_TEXT;
|
||||||
completeLabel.Links.Add(new LinkLabel.Link(191, 28));
|
completeLabel.Links.Add(new LinkLabel.Link(187, 28));
|
||||||
} else {
|
} else {
|
||||||
completeLabel.Text = COMPLETE_UNINSTALL_TEXT;
|
completeLabel.Text = COMPLETE_UNINSTALL_TEXT;
|
||||||
completeLabel.Links.Add(new LinkLabel.Link(110, 28));
|
completeLabel.Links.Add(new LinkLabel.Link(110, 28));
|
||||||
@@ -293,5 +293,35 @@ If you ever change your mind, check out Clean Flash Player's website!";
|
|||||||
debugChosen = MessageBox.Show("Are you sure you want to install the debug version?\n\nThis version is only meant to be used by experienced developers!\nIf you are not sure, choose No.", "Clean Flash Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes;
|
debugChosen = MessageBox.Show("Are you sure you want to install the debug version?\n\nThis version is only meant to be used by experienced developers!\nIf you are not sure, choose No.", "Clean Flash Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes;
|
||||||
OpenBeforeInstall();
|
OpenBeforeInstall();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InstallForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
bool v1 = true;
|
||||||
|
// if installing
|
||||||
|
// note: msgbox not pauses the process
|
||||||
|
if (installPanel.Visible)
|
||||||
|
{
|
||||||
|
if (v1)
|
||||||
|
{
|
||||||
|
// hardlock, only force quit process
|
||||||
|
// follows current design since Back button is disabled
|
||||||
|
MessageBox.Show("Please, wait until process end", "Clean Flash Installer", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// soft alternative, expert mode, todo: better warning of consequences
|
||||||
|
if (MessageBox.Show("Are you sure you want to interrupt the process ?", "Clean Flash Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
|
||||||
|
{
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// use cases ?
|
||||||
|
// uninstall, currently not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
//todo: same for uninstaller: share same F
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using CleanFlashCommon;
|
using CleanFlashCommon;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Text;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -7,7 +8,7 @@ using System.Diagnostics;
|
|||||||
using SharpCompress.Archives.SevenZip;
|
using SharpCompress.Archives.SevenZip;
|
||||||
using SharpCompress.Common;
|
using SharpCompress.Common;
|
||||||
using SharpCompress.Readers;
|
using SharpCompress.Readers;
|
||||||
using IWshRuntimeLibrary;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace CleanFlashInstaller {
|
namespace CleanFlashInstaller {
|
||||||
public class Installer {
|
public class Installer {
|
||||||
@@ -84,16 +85,24 @@ namespace CleanFlashInstaller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateShortcut(string folder, string executable, string name, string description) {
|
public static void CreateShortcut(string folder, string executable, string name, string description) {
|
||||||
WshShell wsh = new WshShell();
|
Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8"));
|
||||||
IWshShortcut shortcut = wsh.CreateShortcut(Path.Combine(folder, name + ".lnk")) as IWshShortcut;
|
dynamic shell = Activator.CreateInstance(t);
|
||||||
|
|
||||||
shortcut.Arguments = "";
|
try {
|
||||||
shortcut.TargetPath = executable;
|
var lnk = shell.CreateShortcut(Path.Combine(folder, name + ".lnk"));
|
||||||
shortcut.WindowStyle = (int) WshWindowStyle.WshNormalFocus;
|
|
||||||
shortcut.Description = description;
|
try {
|
||||||
shortcut.WorkingDirectory = Path.GetDirectoryName(executable);
|
lnk.TargetPath = executable;
|
||||||
shortcut.IconLocation = executable;
|
lnk.IconLocation = executable;
|
||||||
shortcut.Save();
|
lnk.Description = description;
|
||||||
|
lnk.WorkingDirectory = folder;
|
||||||
|
lnk.Save();
|
||||||
|
} finally {
|
||||||
|
Marshal.FinalReleaseComObject(lnk);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
Marshal.FinalReleaseComObject(shell);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void InstallFromArchive(SevenZipArchive archive, IProgressForm form, InstallFlags flags) {
|
private static void InstallFromArchive(SevenZipArchive archive, IProgressForm form, InstallFlags flags) {
|
||||||
@@ -175,4 +184,4 @@ namespace CleanFlashInstaller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
<StartupObject></StartupObject>
|
<StartupObject></StartupObject>
|
||||||
<Product>Clean Flash Player 34.0.0.289 Uninstaller</Product>
|
<Product>Clean Flash Player 34.0.0.330 Uninstaller</Product>
|
||||||
<AssemblyTitle>Clean Flash Player 34.0.0.289 Uninstaller</AssemblyTitle>
|
<AssemblyTitle>Clean Flash Player 34.0.0.330 Uninstaller</AssemblyTitle>
|
||||||
<FileVersion>34.0.0.289</FileVersion>
|
<FileVersion>34.0.0.330</FileVersion>
|
||||||
<AssemblyVersion>34.0.0.289</AssemblyVersion>
|
<AssemblyVersion>34.0.0.330</AssemblyVersion>
|
||||||
<Version>34.0.0.289</Version>
|
<Version>34.0.0.330</Version>
|
||||||
<Authors>FlashPatch Team</Authors>
|
<Authors>FlashPatch Team</Authors>
|
||||||
<Company>FlashPatch Team</Company>
|
<Company>FlashPatch Team</Company>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ILRepack.Lib.MSBuild.Task" Version="2.0.18.2" />
|
<PackageReference Include="ILRepack.Lib.MSBuild.Task" Version="2.0.18.2" />
|
||||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.2">
|
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.3">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
+2
@@ -41,6 +41,7 @@ namespace CleanFlashUninstaller {
|
|||||||
this.completeLabel = new System.Windows.Forms.LinkLabel();
|
this.completeLabel = new System.Windows.Forms.LinkLabel();
|
||||||
this.failurePanel = new System.Windows.Forms.Panel();
|
this.failurePanel = new System.Windows.Forms.Panel();
|
||||||
this.copyErrorButton = new CleanFlashCommon.GradientButton();
|
this.copyErrorButton = new CleanFlashCommon.GradientButton();
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.InstallForm_FormClosing);
|
||||||
this.failureBox = new System.Windows.Forms.TextBox();
|
this.failureBox = new System.Windows.Forms.TextBox();
|
||||||
this.failureText = new System.Windows.Forms.Label();
|
this.failureText = new System.Windows.Forms.Label();
|
||||||
this.nextButton = new CleanFlashCommon.GradientButton();
|
this.nextButton = new CleanFlashCommon.GradientButton();
|
||||||
@@ -242,6 +243,7 @@ namespace CleanFlashUninstaller {
|
|||||||
//
|
//
|
||||||
// prevButton
|
// prevButton
|
||||||
//
|
//
|
||||||
|
prevButton.TabStop = false;
|
||||||
this.prevButton.BackColor = System.Drawing.Color.Black;
|
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.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)))));
|
this.prevButton.Color2 = System.Drawing.Color.FromArgb(((int)(((byte)(81)))), ((int)(((byte)(81)))), ((int)(((byte)(81)))));
|
||||||
|
|||||||
@@ -121,5 +121,36 @@ namespace CleanFlashUninstaller {
|
|||||||
Clipboard.SetText(failureBox.Text);
|
Clipboard.SetText(failureBox.Text);
|
||||||
MessageBox.Show("Copied error message to clipboard!", "Clean Flash Installer", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("Copied error message to clipboard!", "Clean Flash Installer", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// note: copy pasted from installer; todo: single F for both
|
||||||
|
private void InstallForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
bool v1 = true;
|
||||||
|
// if installing
|
||||||
|
// note: msgbox not pauses the process
|
||||||
|
if (installPanel.Visible)
|
||||||
|
{
|
||||||
|
if (v1)
|
||||||
|
{
|
||||||
|
// hardlock, only force quit process
|
||||||
|
// follows current design since Back button is disabled
|
||||||
|
MessageBox.Show("Please, wait until process end", "Clean Flash Installer", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// soft alternative, expert mode, todo: better warning of consequences
|
||||||
|
if (MessageBox.Show("Are you sure you want to interrupt the process ?", "Clean Flash Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
|
||||||
|
{
|
||||||
|
e.Cancel = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// use cases ?
|
||||||
|
// uninstall, currently not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
//todo: same for uninstaller: share same F
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ To keep using Flash Player on **Mozilla Firefox**, install [**Waterfox Classic**
|
|||||||
- [Otter Browser](https://otter-browser.org)
|
- [Otter Browser](https://otter-browser.org)
|
||||||
- [roytam's XP-compatible browser builds](http://rtfreesoft.blogspot.com)
|
- [roytam's XP-compatible browser builds](http://rtfreesoft.blogspot.com)
|
||||||
- [Portable old browser versions (guide)](https://www.raymond.cc/blog/how-to-enable-flash-support-in-firefox-portable)
|
- [Portable old browser versions (guide)](https://www.raymond.cc/blog/how-to-enable-flash-support-in-firefox-portable)
|
||||||
|
- [Mypal 29.3.0](https://www.mypal-browser.org/download.html)
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user