private void bwtBackgroundWorkerThread_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker backgroundWorker = (BackgroundWorker)sender;
            CopyProgress     hostForm         = (CopyProgress)e.Argument;
            List <string>    filesToProcess   = GetFilesToProcess(hostForm.SourceDirectory);

            //Debugger.Break();

            int currentFileCounter = 1;

            foreach (string fileToProcess in filesToProcess)
            {
                if (backgroundWorker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }

                string relativePath = fileToProcess.Substring(hostForm.SourceDirectory.Length);
                if (relativePath.StartsWith("\\") == true)
                {
                    relativePath = relativePath.Substring(1);
                }

                string targetFile = Path.Combine(TargetDirectory, relativePath);

                hostForm.SetCurrentFile(fileToProcess);

                if (File.Exists(targetFile) == false)
                {
                    if (Directory.Exists(Path.GetDirectoryName(targetFile)) == false)
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(targetFile));
                    }

                    File.Copy(fileToProcess, targetFile, true);
                }

                int currentProgressPercent = (int)Math.Floor((double)currentFileCounter / (double)filesToProcess.Count * 100D);

                if (currentProgressPercent > 100)
                {
                    currentProgressPercent = 100;
                }

                System.Diagnostics.Debug.WriteLine(currentProgressPercent);

                backgroundWorker.ReportProgress(currentProgressPercent);

                currentFileCounter++;
            }

            e.Result = true;
        }
        private static bool UpgradeRegistryToUseDiscreetBetaAndProdPaths(out string returnMessage)
        {
            returnMessage = String.Empty;

            if (String.IsNullOrEmpty(AllegianceRegistry.ProductionArtPath) == true)
            {
                var productionArtworkPath = Path.Combine(Path.Combine(AllegianceRegistry.LobbyPath, LobbyType.Production.ToString()), "Artwork");

                var copyProgress = new CopyProgress();
                copyProgress.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgress.SourceDirectory = AllegianceRegistry.ArtPath;
                copyProgress.TargetDirectory = productionArtworkPath;
                copyProgress.LobbyType       = LobbyType.Production;

                if (copyProgress.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    returnMessage = "Artwork file copy was canceled. Launcher update incomplete, please restart ACSS Launcher to try again.";
                    return(false);
                }

                AllegianceRegistry.ProductionArtPath = productionArtworkPath;
            }

            if (String.IsNullOrEmpty(AllegianceRegistry.BetaArtPath) == true)
            {
                AllegianceRegistry.BetaArtPath = AllegianceRegistry.ArtPath;
            }

            if (String.IsNullOrEmpty(AllegianceRegistry.ProductionCfgFile) == true)
            {
                AllegianceRegistry.ProductionCfgFile = "http://acss.alleg.net/allegiance.txt";
            }

            if (String.IsNullOrEmpty(AllegianceRegistry.BetaCfgFile) == true)
            {
                AllegianceRegistry.BetaCfgFile = "http://acss.alleg.net/allegiance-beta.txt";
            }

            return(true);
        }
        //public override void Install(IDictionary stateSaver)
        //{
        //    string launcherPath = this.Context.Parameters["targetpath"];
        //    string launcherExe = Path.Combine(launcherPath, "Launcher.exe");
        //    if (File.Exists(launcherExe) == true)
        //        File.Delete(launcherExe);
        //    base.Install(stateSaver);
        //}
        protected override void OnAfterInstall(IDictionary savedState)
        {
            int stepCount = 0;

            try
            {

                //StringBuilder sb = new StringBuilder();
                //foreach (string key in this.Context.Parameters.Keys)
                //{
                //    sb.AppendLine(String.Format("{0} = {1}", key, this.Context.Parameters[key]));
                //}
                //string exePath = this.Context.Parameters["targetpath"];
                //sb.AppendLine("wtf: " + exePath);
                //File.WriteAllText("c:\\out.txt", sb.ToString());

                // Clear any old DS databases.
                foreach (string filename in Directory.GetFiles(this.Context.Parameters["targetpath"], "*.ds"))
                    File.Delete(filename);

                stepCount++;

                // Create registry keys if they don't exist.
                RegistryKey rootKey = Registry.LocalMachine.OpenSubKey(GetAllegianceRoot(), true);
                RegistryKey productionKey = rootKey.OpenSubKey("1.0");
                string artPath = (String)productionKey.GetValue("ArtPath");
                string productionExePath = (String)productionKey.GetValue("EXE Path");

                stepCount++;

                try
                {
                    if (RegistryAccess.DoesUserHaveAccess(rootKey, BuiltinUsersSID, System.Security.AccessControl.RegistryRights.FullControl) == false)
                        RegistryAccess.SetUserAccessBySID(rootKey, BuiltinUsersSID, System.Security.AccessControl.RegistryRights.FullControl);
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                        throw;

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + rootKey + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                RegistryKey developmentKey = rootKey.OpenSubKey("1.2", true);
                if (developmentKey == null)
                    developmentKey = rootKey.CreateSubKey("1.2", RegistryKeyPermissionCheck.ReadWriteSubTree);

                stepCount++;

                //if (developmentKey.GetValue("Allow3DAcceleration", null) == null)
                developmentKey.SetValue("Allow3DAcceleration", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("AllowSecondary", null) == null)
                developmentKey.SetValue("AllowSecondary", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("ArtPath", null) == null)
                developmentKey.SetValue("ArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Production.ToString() + "\\Artwork"), RegistryValueKind.String);

                developmentKey.SetValue("ProductionArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Production.ToString() + "\\Artwork"), RegistryValueKind.String);

                developmentKey.SetValue("BetaArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Beta.ToString() + "\\Artwork"), RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Bandwidth", null) == null)
                developmentKey.SetValue("Bandwidth", 2, RegistryValueKind.DWord);

                stepCount++;

                // Don't delete this, might re-add post css beta.
                // If there is already a CfgFile entry, then store it for uninstallation only if there
                // is not already a PreviousCfgFile entry.
                //string cfgFile = (String)developmentKey.GetValue("CfgFile", null);
                //if (cfgFile != null)
                //{
                //    if (developmentKey.GetValue("PreviousCfgFile", null) == null)
                //        developmentKey.SetValue("PreviousCfgFile", cfgFile, RegistryValueKind.String);
                //}

                developmentKey.SetValue("CfgFile", "http://acss.alleg.net/allegiance.txt", RegistryValueKind.String);

                developmentKey.SetValue("ProductionCfgFile", "http://acss.alleg.net/allegiance.txt", RegistryValueKind.String);

                developmentKey.SetValue("BetaCfgFile", "http://acss.alleg.net/allegiance-beta.txt", RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("CharacterName", null) == null)
                developmentKey.SetValue("CharacterName", String.Empty, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("CombatFullscreenXSize", null) == null)
                developmentKey.SetValue("CombatFullscreenXSize", 800, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatFullscreenYSize", null) == null)
                developmentKey.SetValue("CombatFullscreenYSize", 600, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatXSize", null) == null)
                developmentKey.SetValue("CombatXSize", 800, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatYSize", null) == null)
                developmentKey.SetValue("CombatYSize", 600, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("DeadZone", null) == null)
                developmentKey.SetValue("DeadZone", 30, RegistryValueKind.DWord);

                stepCount++;

                // Don't delete this, might re-add post beta.
                //string exePath = (String)developmentKey.GetValue("EXE Path", null);
                //if (exePath != null)
                //{
                //    if (developmentKey.GetValue("PreviousEXEPath", null) == null)
                //        developmentKey.SetValue("PreviousEXEPath", exePath, RegistryValueKind.String);
                //}

                developmentKey.SetValue("Lobby Path", this.Context.Parameters["targetpath"].TrimEnd('\\'), RegistryValueKind.String);

                stepCount++;

                developmentKey.SetValue("EXE Path", productionExePath, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Gamma", null) == null)
                developmentKey.SetValue("Gamma", 1.13, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("HasTrained", null) == null)
                developmentKey.SetValue("HasTrained", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("LogToFile", null) == null)
                developmentKey.SetValue("LogToFile", 1, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Music", null) == null)
                developmentKey.SetValue("Music", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("OutputDebugString", null) == null)
                developmentKey.SetValue("OutputDebugString", 1, RegistryValueKind.DWord);

                stepCount++;

                developmentKey.SetValue("ClientService", "https://acss.alleg.net/CSSServer/ClientService.svc", RegistryValueKind.String);

                stepCount++;

                developmentKey.SetValue("ManagementWebRoot", "http://acss.alleg.net", RegistryValueKind.String);

                stepCount++;

                try
                {
                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(artPath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                        FileSystemAccess.SetDirectoryAccessBySID(artPath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                        throw;

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + artPath + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                try
                {
                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(productionExePath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                        FileSystemAccess.SetDirectoryAccessBySID(productionExePath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                        throw;

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + productionExePath + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                try
                {

                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(this.Context.Parameters["targetpath"], BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                        FileSystemAccess.SetDirectoryAccessBySID(this.Context.Parameters["targetpath"], BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                        throw;

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + this.Context.Parameters["targetpath"] + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                CopyProgress copyProgressBeta = new CopyProgress();
                copyProgressBeta.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgressBeta.SourceDirectory = artPath;
                copyProgressBeta.TargetDirectory = Path.Combine(Path.Combine(this.Context.Parameters["targetpath"], LobbyType.Beta.ToString()), "Artwork");
                copyProgressBeta.LobbyType = LobbyType.Beta;

                if (copyProgressBeta.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                    throw new InstallException("Beta Artwork file copy was canceled.");

                stepCount++;

                CopyProgress copyProgressProduction = new CopyProgress();
                copyProgressProduction.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgressProduction.SourceDirectory = artPath;
                copyProgressProduction.TargetDirectory = Path.Combine(Path.Combine(this.Context.Parameters["targetpath"], LobbyType.Production.ToString()), "Artwork");
                copyProgressProduction.LobbyType = LobbyType.Production;

                if (copyProgressProduction.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                    throw new InstallException("Production Artwork file copy was canceled.");

                base.OnAfterInstall(savedState);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Windows Version: " + WindowsVersion +
                    "\r\nStep Count: " + stepCount +
                    "\r\n\r\n" + ex.ToString(), "BetaInstall::OnAfterInstall() - Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private static bool UpgradeRegistryToUseDiscreetBetaAndProdPaths(out string returnMessage)
        {
            returnMessage = String.Empty;

            if (String.IsNullOrEmpty(AllegianceRegistry.ProductionArtPath) == true)
            {
                var productionArtworkPath = Path.Combine(Path.Combine(AllegianceRegistry.LobbyPath, LobbyType.Production.ToString()), "Artwork");

                var copyProgress = new CopyProgress();
                copyProgress.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgress.SourceDirectory = AllegianceRegistry.ArtPath;
                copyProgress.TargetDirectory = productionArtworkPath;
                copyProgress.LobbyType = LobbyType.Production;

                if (copyProgress.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    returnMessage = "Artwork file copy was canceled. Launcher update incomplete, please restart ACSS Launcher to try again.";
                    return false;
                }

                AllegianceRegistry.ProductionArtPath = productionArtworkPath;
            }

            if (String.IsNullOrEmpty(AllegianceRegistry.BetaArtPath) == true)
                AllegianceRegistry.BetaArtPath = AllegianceRegistry.ArtPath;

            if (String.IsNullOrEmpty(AllegianceRegistry.ProductionCfgFile) == true)
                AllegianceRegistry.ProductionCfgFile = "http://acss.alleg.net/allegiance.txt";

            if (String.IsNullOrEmpty(AllegianceRegistry.BetaCfgFile) == true)
                AllegianceRegistry.BetaCfgFile = "http://acss.alleg.net/allegiance-beta.txt";

            return true;
        }
        //public override void Install(IDictionary stateSaver)
        //{
        //    string launcherPath = this.Context.Parameters["targetpath"];
        //    string launcherExe = Path.Combine(launcherPath, "Launcher.exe");

        //    if (File.Exists(launcherExe) == true)
        //        File.Delete(launcherExe);

        //    base.Install(stateSaver);
        //}

        protected override void OnAfterInstall(IDictionary savedState)
        {
            int stepCount = 0;

            try
            {
                //StringBuilder sb = new StringBuilder();
                //foreach (string key in this.Context.Parameters.Keys)
                //{
                //    sb.AppendLine(String.Format("{0} = {1}", key, this.Context.Parameters[key]));
                //}
                //string exePath = this.Context.Parameters["targetpath"];
                //sb.AppendLine("wtf: " + exePath);
                //File.WriteAllText("c:\\out.txt", sb.ToString());

                // Clear any old DS databases.
                foreach (string filename in Directory.GetFiles(this.Context.Parameters["targetpath"], "*.ds"))
                {
                    File.Delete(filename);
                }

                stepCount++;

                // Create registry keys if they don't exist.
                RegistryKey rootKey           = Registry.LocalMachine.OpenSubKey(GetAllegianceRoot(), true);
                RegistryKey productionKey     = rootKey.OpenSubKey("1.0");
                string      artPath           = (String)productionKey.GetValue("ArtPath");
                string      productionExePath = (String)productionKey.GetValue("EXE Path");

                stepCount++;

                try
                {
                    if (RegistryAccess.DoesUserHaveAccess(rootKey, BuiltinUsersSID, System.Security.AccessControl.RegistryRights.FullControl) == false)
                    {
                        RegistryAccess.SetUserAccessBySID(rootKey, BuiltinUsersSID, System.Security.AccessControl.RegistryRights.FullControl);
                    }
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                    {
                        throw;
                    }


                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + rootKey + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                RegistryKey developmentKey = rootKey.OpenSubKey("1.2", true);
                if (developmentKey == null)
                {
                    developmentKey = rootKey.CreateSubKey("1.2", RegistryKeyPermissionCheck.ReadWriteSubTree);
                }

                stepCount++;

                //if (developmentKey.GetValue("Allow3DAcceleration", null) == null)
                developmentKey.SetValue("Allow3DAcceleration", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("AllowSecondary", null) == null)
                developmentKey.SetValue("AllowSecondary", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("ArtPath", null) == null)
                developmentKey.SetValue("ArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Production.ToString() + "\\Artwork"), RegistryValueKind.String);

                developmentKey.SetValue("ProductionArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Production.ToString() + "\\Artwork"), RegistryValueKind.String);

                developmentKey.SetValue("BetaArtPath", Path.Combine(this.Context.Parameters["targetpath"], Integration.LobbyType.Beta.ToString() + "\\Artwork"), RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Bandwidth", null) == null)
                developmentKey.SetValue("Bandwidth", 2, RegistryValueKind.DWord);

                stepCount++;

                // Don't delete this, might re-add post css beta.
                // If there is already a CfgFile entry, then store it for uninstallation only if there
                // is not already a PreviousCfgFile entry.
                //string cfgFile = (String)developmentKey.GetValue("CfgFile", null);
                //if (cfgFile != null)
                //{
                //    if (developmentKey.GetValue("PreviousCfgFile", null) == null)
                //        developmentKey.SetValue("PreviousCfgFile", cfgFile, RegistryValueKind.String);
                //}

                developmentKey.SetValue("CfgFile", "http://acss.alleg.net/allegiance.txt", RegistryValueKind.String);

                developmentKey.SetValue("ProductionCfgFile", "http://acss.alleg.net/allegiance.txt", RegistryValueKind.String);

                developmentKey.SetValue("BetaCfgFile", "http://acss.alleg.net/allegiance-beta.txt", RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("CharacterName", null) == null)
                developmentKey.SetValue("CharacterName", String.Empty, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("CombatFullscreenXSize", null) == null)
                developmentKey.SetValue("CombatFullscreenXSize", 800, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatFullscreenYSize", null) == null)
                developmentKey.SetValue("CombatFullscreenYSize", 600, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatXSize", null) == null)
                developmentKey.SetValue("CombatXSize", 800, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("CombatYSize", null) == null)
                developmentKey.SetValue("CombatYSize", 600, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("DeadZone", null) == null)
                developmentKey.SetValue("DeadZone", 30, RegistryValueKind.DWord);

                stepCount++;

                // Don't delete this, might re-add post beta.
                //string exePath = (String)developmentKey.GetValue("EXE Path", null);
                //if (exePath != null)
                //{
                //    if (developmentKey.GetValue("PreviousEXEPath", null) == null)
                //        developmentKey.SetValue("PreviousEXEPath", exePath, RegistryValueKind.String);
                //}

                developmentKey.SetValue("Lobby Path", this.Context.Parameters["targetpath"].TrimEnd('\\'), RegistryValueKind.String);

                stepCount++;

                developmentKey.SetValue("EXE Path", productionExePath, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Gamma", null) == null)
                developmentKey.SetValue("Gamma", 1.13, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("HasTrained", null) == null)
                developmentKey.SetValue("HasTrained", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("LogToFile", null) == null)
                developmentKey.SetValue("LogToFile", 1, RegistryValueKind.String);

                stepCount++;

                //if (developmentKey.GetValue("Music", null) == null)
                developmentKey.SetValue("Music", 1, RegistryValueKind.DWord);

                stepCount++;

                //if (developmentKey.GetValue("OutputDebugString", null) == null)
                developmentKey.SetValue("OutputDebugString", 1, RegistryValueKind.DWord);

                stepCount++;

                developmentKey.SetValue("ClientService", "https://acss.alleg.net/CSSServer/ClientService.svc", RegistryValueKind.String);

                stepCount++;

                developmentKey.SetValue("ManagementWebRoot", "http://acss.alleg.net", RegistryValueKind.String);

                stepCount++;

                try
                {
                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(artPath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                    {
                        FileSystemAccess.SetDirectoryAccessBySID(artPath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                    }
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                    {
                        throw;
                    }

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + artPath + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                try
                {
                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(productionExePath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                    {
                        FileSystemAccess.SetDirectoryAccessBySID(productionExePath, BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                    }
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                    {
                        throw;
                    }

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + productionExePath + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                try
                {
                    if (FileSystemAccess.DoesUserHaveAccessToDirectory(this.Context.Parameters["targetpath"], BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl) == false)
                    {
                        FileSystemAccess.SetDirectoryAccessBySID(this.Context.Parameters["targetpath"], BuiltinUsersSID, System.Security.AccessControl.FileSystemRights.FullControl);
                    }
                }
                catch (Exception ex)
                {
                    this.Context.LogMessage(ex.ToString());

                    // Ignore security exceptions for Windows8 and up.
                    if (WindowsVersion < Windows8Version)
                    {
                        throw;
                    }

                    //if (WindowsVersion >= 6.2)
                    //{
                    //    if (MessageBox.Show("There was an error granting permissions to the BUILTIN\\User account to: " + this.Context.Parameters["targetpath"] + "\r\n\r\nThis is specific to Windows 8, and can be ignored. Continue Installation?", "Permissions Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)
                    //        throw;
                    //}
                    //else
                    //    throw;
                }

                stepCount++;

                CopyProgress copyProgressBeta = new CopyProgress();
                copyProgressBeta.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgressBeta.SourceDirectory = artPath;
                copyProgressBeta.TargetDirectory = Path.Combine(Path.Combine(this.Context.Parameters["targetpath"], LobbyType.Beta.ToString()), "Artwork");
                copyProgressBeta.LobbyType       = LobbyType.Beta;

                if (copyProgressBeta.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    throw new InstallException("Beta Artwork file copy was canceled.");
                }

                stepCount++;

                CopyProgress copyProgressProduction = new CopyProgress();
                copyProgressProduction.TopMost = true;
                //copyProgress.MinimizeBox = false;
                copyProgressProduction.SourceDirectory = artPath;
                copyProgressProduction.TargetDirectory = Path.Combine(Path.Combine(this.Context.Parameters["targetpath"], LobbyType.Production.ToString()), "Artwork");
                copyProgressProduction.LobbyType       = LobbyType.Production;

                if (copyProgressProduction.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                {
                    throw new InstallException("Production Artwork file copy was canceled.");
                }


                base.OnAfterInstall(savedState);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Windows Version: " + WindowsVersion +
                    "\r\nStep Count: " + stepCount +
                    "\r\n\r\n" + ex.ToString(), "BetaInstall::OnAfterInstall() - Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }