Annotation of cleanflash/CleanFlashInstaller/Installer.cs, revision 1.1

1.1     ! root        1: using CleanFlashCommon;
        !             2: using System;
        !             3: using System.Collections.Generic;
        !             4: using System.IO;
        !             5: using System.Reflection;
        !             6: using System.Diagnostics;
        !             7: using SharpCompress.Archives.SevenZip;
        !             8: using SharpCompress.Common;
        !             9: using SharpCompress.Readers;
        !            10: using IWshRuntimeLibrary;
        !            11: 
        !            12: namespace CleanFlashInstaller {
        !            13:     public class Installer {
        !            14:         public static void RegisterActiveX(string filename) {
        !            15:             Directory.SetCurrentDirectory(Path.GetDirectoryName(filename));
        !            16:             ExitedProcess process = ProcessRunner.RunProcess(
        !            17:                 new ProcessStartInfo {
        !            18:                     FileName = "regsvr32.exe",
        !            19:                     Arguments = "/s " + Path.GetFileName(filename),
        !            20:                     UseShellExecute = false,
        !            21:                     CreateNoWindow = true
        !            22:                 }
        !            23:             );
        !            24: 
        !            25:             if (!process.IsSuccessful) {
        !            26:                 throw new InstallException(string.Format("Failed to register ActiveX plugin: error code {0}\n\n{1}", process.ExitCode, process.Output));
        !            27:             }
        !            28:         }
        !            29: 
        !            30:         public static void ExtractArchive(SevenZipArchive archive, Dictionary<string, InstallEntry> entries, IProgressForm form, InstallFlags flags) {
        !            31:             IReader reader = archive.ExtractAllEntries();
        !            32:             bool legacy = SystemInfo.IsLegacyWindows();
        !            33:             string lastKey = null;
        !            34: 
        !            35:             while (reader.MoveToNextEntry()) {
        !            36:                 if (reader.Entry.IsDirectory) {
        !            37:                     continue;
        !            38:                 }
        !            39: 
        !            40:                 string filename = reader.Entry.Key.Split('/')[0];
        !            41:                 string installKey = filename.Split('-')[0];
        !            42:                 InstallEntry installEntry = entries[installKey];
        !            43: 
        !            44:                 if (installEntry.RequiredFlags.GetValue() != InstallFlags.NONE) {
        !            45:                     if (!flags.IsSet(installEntry.RequiredFlags)) {
        !            46:                         continue;
        !            47:                     }
        !            48: 
        !            49:                     if (flags.IsSet(InstallFlags.DEBUG) != filename.Contains("-debug")) {
        !            50:                         continue;
        !            51:                     }
        !            52:                 }
        !            53: 
        !            54:                 if (installEntry.RequiredFlags.IsSet(InstallFlags.ACTIVEX)) {
        !            55:                     if (legacy != filename.Contains("-legacy")) {
        !            56:                         continue;
        !            57:                     }
        !            58:                 }
        !            59: 
        !            60:                 if (!installKey.Equals(lastKey)) {
        !            61:                     form.UpdateProgressLabel(installEntry.InstallText, true);
        !            62: 
        !            63:                     if (!Directory.Exists(installEntry.TargetDirectory)) {
        !            64:                         Directory.CreateDirectory(installEntry.TargetDirectory);
        !            65:                     }
        !            66: 
        !            67:                     lastKey = installKey;
        !            68:                 }
        !            69: 
        !            70:                 reader.WriteEntryToDirectory(installEntry.TargetDirectory, new ExtractionOptions() {
        !            71:                     ExtractFullPath = false,
        !            72:                     Overwrite = true
        !            73:                 });
        !            74:             }
        !            75:         }
        !            76: 
        !            77:         public static void CreateShortcut(string folder, string executable, string name, string description) {
        !            78:             WshShell wsh = new WshShell();
        !            79:             IWshShortcut shortcut = wsh.CreateShortcut(Path.Combine(folder, name + ".lnk")) as IWshShortcut;
        !            80: 
        !            81:             shortcut.Arguments = "";
        !            82:             shortcut.TargetPath = executable;
        !            83:             shortcut.WindowStyle = (int) WshWindowStyle.WshNormalFocus;
        !            84:             shortcut.Description = description;
        !            85:             shortcut.WorkingDirectory = Path.GetDirectoryName(executable);
        !            86:             shortcut.IconLocation = executable;
        !            87:             shortcut.Save();
        !            88:         }
        !            89: 
        !            90:         private static void InstallFromArchive(SevenZipArchive archive, IProgressForm form, InstallFlags flags) {
        !            91:             string flash32Path = SystemInfo.GetFlash32Path();
        !            92:             string flash64Path = SystemInfo.GetFlash64Path();
        !            93:             string system32Path = SystemInfo.GetSystem32Path();
        !            94:             string flashProgram32Path = SystemInfo.GetProgramFlash32Path();
        !            95:             List<string> registryToApply = new List<string>() { Properties.Resources.installGeneral };
        !            96: 
        !            97:             if (Environment.Is64BitOperatingSystem) {
        !            98:                 flags.SetFlag(InstallFlags.X64);
        !            99:                 registryToApply.Add(Properties.Resources.installGeneral64);
        !           100:             }
        !           101: 
        !           102:             Dictionary<string, InstallEntry> entries = new Dictionary<string, InstallEntry>() {
        !           103:                 { "controlpanel", new InstallEntry("Installing Flash Player utilities...", InstallFlags.NONE, system32Path) },
        !           104:                 { "uninstaller", new InstallEntry("Extracting uninstaller...", InstallFlags.NONE, flashProgram32Path) },
        !           105:                 { "standalone", new InstallEntry("Installing 32-bit Standalone Flash Player...", InstallFlags.PLAYER, flashProgram32Path) },
        !           106:                 { "ocx32", new InstallEntry("Installing 32-bit Flash Player for Internet Explorer...", InstallFlags.ACTIVEX, flash32Path) },
        !           107:                 { "np32", new InstallEntry("Installing 32-bit Flash Player for Firefox...", InstallFlags.NETSCAPE, flash32Path, Properties.Resources.installNP) },
        !           108:                 { "pp32", new InstallEntry("Installing 32-bit Flash Player for Chrome...", InstallFlags.PEPPER, flash32Path, Properties.Resources.installPP) },
        !           109:                 { "ocx64", new InstallEntry("Installing 64-bit Flash Player for Internet Explorer...", InstallFlags.ACTIVEX | InstallFlags.X64, flash64Path) },
        !           110:                 { "np64", new InstallEntry("Installing 64-bit Flash Player for Firefox...", InstallFlags.NETSCAPE | InstallFlags.X64, flash64Path, Properties.Resources.installNP64) },
        !           111:                 { "pp64", new InstallEntry("Installing 64-bit Flash Player for Chrome...", InstallFlags.PEPPER | InstallFlags.X64, flash64Path, Properties.Resources.installPP64) },
        !           112:             };
        !           113: 
        !           114:             ExtractArchive(archive, entries, form, flags);
        !           115: 
        !           116:             if (flags.IsSet(InstallFlags.PLAYER)) {
        !           117:                 bool debug = flags.IsSet(InstallFlags.DEBUG);
        !           118:                 string name = "Flash Player";
        !           119:                 string description = "Standalone Flash Player " + UpdateChecker.GetFlashVersion();
        !           120:                 string executable = Path.Combine(flashProgram32Path, debug ? "flashplayer_sa_debug.exe" : "flashplayer_sa.exe");
        !           121: 
        !           122:                 if (debug) {
        !           123:                     name += " (Debug)";
        !           124:                     description += " (Debug)";
        !           125:                 }
        !           126: 
        !           127:                 if (flags.IsSet(InstallFlags.PLAYER_START_MENU)) {
        !           128:                     CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), executable, name, description);
        !           129:                 }
        !           130: 
        !           131:                 if (flags.IsSet(InstallFlags.PLAYER_DESKTOP)) {
        !           132:                     CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), executable, name, description);
        !           133:                 }
        !           134:             }
        !           135: 
        !           136:             foreach (InstallEntry entry in entries.Values) {
        !           137:                 if (flags.IsSet(entry.RequiredFlags) && entry.RegistryInstructions != null) {
        !           138:                     registryToApply.Add(entry.RegistryInstructions);
        !           139:                 }
        !           140:             }
        !           141: 
        !           142:             form.UpdateProgressLabel("Applying registry changes...", true);
        !           143:             RegistryManager.ApplyRegistry(registryToApply);
        !           144: 
        !           145:             if (flags.IsSet(InstallFlags.ACTIVEX)) {
        !           146:                 form.UpdateProgressLabel("Activating 32-bit Flash Player for Internet Explorer...", true);
        !           147:                 RegisterActiveX(Path.Combine(flash32Path, string.Format("Flash32_{0}.ocx", SystemInfo.GetVersionPath())));
        !           148: 
        !           149:                 if (Environment.Is64BitOperatingSystem) {
        !           150:                     form.UpdateProgressLabel("Activating 64-bit Flash Player for Internet Explorer...", true);
        !           151:                     RegisterActiveX(Path.Combine(flash64Path, string.Format("Flash64_{0}.ocx", SystemInfo.GetVersionPath())));
        !           152:                 }
        !           153:             }
        !           154:         }
        !           155: 
        !           156:        public static void Install(IProgressForm form, InstallFlags flags) {
        !           157:             if (flags.IsNoneSet()) {
        !           158:                 // No packages should be installed.
        !           159:                 return;
        !           160:             }
        !           161: 
        !           162:             using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("CleanFlashInstaller.cleanflash.7z")) {
        !           163:                 using (SevenZipArchive archive = SevenZipArchive.Open(stream)) {
        !           164:                     InstallFromArchive(archive, form, flags);
        !           165:                 }
        !           166:             }
        !           167:         }
        !           168:     }
        !           169: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.