Files
AllPurposeAutoSetup/AllPurposeAutoSetup/frmSetupStatusDisplay.cs
2025-03-13 18:24:10 -07:00

754 lines
34 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.IO;
using System.Security.AccessControl;
using System.Management;
using System.Security.Principal;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using CommonLib.Windows.Forms;
using CommonLib.IO;
using CommonLib.Misc;
using CommonLib.Windows.Misc;
namespace All_Purpose_Auto_Setup
{
public partial class frmSetupStatusDisplay : ChildForm
{
enum SectionName { Setup_Step_Manager };
private delegate bool SetupStepDelegate(string iniSectionName);
private delegate string CustomMessageBoxDelegate(MessageBoxCustom.PopUpMsgType msgType, List<MessageBoxCustom.clsCustomButton> customButtons, string msg, string caption, int timeOut_ms);
private AutoResetEvent _resetEvent = new AutoResetEvent(false);
private frmMain frmParent = null;
public bool restartApplicationRequested = false;
public bool rebootRequested = false;
public bool setupProcessNeedRestartToContinue = false;
BackgroundWorker bgwSetup;
string pathAndNameOfConfigFile = "";
string pathAndNameOfSetupLog = @"setupLog.txt";
StreamWriter swSetupLog;
ConfigFileManager configFileMgr;
WindowFeaturesManager windowFeaturesMgr;
DotNet2Pt0FrameworkManager dotNet2Pt0FrameworkMgr;
FoldersManager gutsFoldersMgr;
WindowsShortcutManager winShortcutMgr;
SetupMiscellaneous gutsSetupMisc;
SoftwareInstallManager softwareInstallMgr;
GutsSoftwareBuildAssistant gutsBuildAssistant;
FilePackageTransferManager fileTransferManager;
GutsConfigFileManager gutsConfigFileManager;
FileFolderRemovalManager fileSystemRemovalManager;
RunApplicationsManager runAppManager;
WindowsRegistryManager winRegistryManager;
NetworkAdapterManager networkCardManager;
Dictionary<int, bool> richTextBoxLineNumberDict = new Dictionary<int, bool>();
List<ConfigFileManager.Ini_KeyValue<string>> configInfo = new List<ConfigFileManager.Ini_KeyValue<string>>();
List<string[]> configInfoFormatted = new List<string[]>();
public frmSetupStatusDisplay(frmMain d_parentForm)
{
InitializeComponent();
this.frmParent = d_parentForm;
this.FormClosing += Form_FormClosing;
statusRtxtbox.WordWrap = false;
}
void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (swSetupLog != null)
swSetupLog.Close();
}
private void frmSetupStatusDisplay_Shown(object sender, EventArgs e)
{
swSetupLog = null;
pathAndNameOfConfigFile = frmParent.getConfigFile();
// process the configuration file
configFileMgr = new ConfigFileManager(this, pathAndNameOfConfigFile);
pathAndNameOfSetupLog = Path.Combine(Application.StartupPath,pathAndNameOfSetupLog);
pathAndNameOfSetupLog = FileManip.GenerateUniqueFileName(Path.GetDirectoryName(pathAndNameOfSetupLog),
Path.GetFileNameWithoutExtension(pathAndNameOfSetupLog), Path.GetExtension(pathAndNameOfSetupLog));
try
{
swSetupLog = new StreamWriter(pathAndNameOfSetupLog);
}
catch (Exception)
{
try
{
pathAndNameOfSetupLog = PathManip.AddTrailingSlashToPath(PathManip.GetUserDesktopPath()) + Path.GetFileName(pathAndNameOfSetupLog);
swSetupLog = new StreamWriter(pathAndNameOfSetupLog);
}
catch (Exception)
{
}
}
bgwSetup = new BackgroundWorker();
bgwSetup.WorkerSupportsCancellation = true;
bgwSetup.DoWork += new DoWorkEventHandler(bgwSetup_DoWork);
bgwSetup.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwSetup_RunWorkerCompleted);
bgwSetup.RunWorkerAsync();
}
private void restartApplicationEventHandler()
{
restartApplicationRequested = true;
}
private void rebootComputerEventHandler()
{
rebootRequested = true;
}
private void setupProcessNeedRestartToContinueEventHandler()
{
setupProcessNeedRestartToContinue = true;
}
private void updateStatusDisplayAndLogEventHandler(string displayMsg, string logMsg, List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList)
{
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
if (swSetupLog != null && logMsg.Length > 0)
{
string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase);
str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase);
swSetupLog.Write(str);
}
}
public int updateStatusDisplayAndLog(string displayMsg, string logMsg, List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList)
{
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
if (swSetupLog != null && logMsg.Length > 0)
{
string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase);
str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase);
swSetupLog.Write(str);
}
return FormControlsManipThreadSafe.getRichTextBoxLastLineIndex(statusRtxtbox);
}
public void writeToLog(string logMsg)
{
if (swSetupLog != null && logMsg.Length > 0)
{
string str = Regex.Replace(logMsg, @"\r", "", RegexOptions.IgnoreCase);
str = Regex.Replace(str, @"\n", "\r\n", RegexOptions.IgnoreCase);
swSetupLog.Write(str);
}
}
public void removeStatusDisplayLine(int lineIndex, bool deleteLine)
{
FormControlsManipThreadSafe.RichTextBoxEraseLine(statusRtxtbox, lineIndex, deleteLine);
}
private void updateStatusDisplayAtLineEventHandler(string displayMsg, int lineIndex, List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList)
{
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWordsAtLine(statusRtxtbox, lineIndex, displayMsg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
}
public string displayMessageBox(MessageBoxCustom.PopUpMsgType msgType, List<MessageBoxCustom.clsCustomButton> customButtons, string msg, string caption, int timeOut_ms)
{
if (InvokeRequired)
{
CustomMessageBoxDelegate del = new CustomMessageBoxDelegate(displayMessageBox);
return (string)this.Invoke(del, msgType, customButtons, msg, caption, timeOut_ms);
}
else
{
return MessageBoxCustom.Show(this, msgType, customButtons, msg, caption, timeOut_ms);
}
}
private void bgwSetup_DoWork(object sender, DoWorkEventArgs bgwEvent)
{
string msg = "", errMsg = "";
bool setupSuccessful = false;
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList = new List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor>();
BackgroundWorker bgw = sender as BackgroundWorker;
setupSuccessful = displayAndLogHeaderInfo();
ConfigFileManager.parseConfigInfo(SectionName.Setup_Step_Manager.ToString(), configInfo);
if (setupSuccessful)
setupSuccessful = verifySetupStepsInfo();
//if (setupSuccessful)
// setupSuccessful = configFileMgr.verifyConfigurationInfo();
int currentSetupStep = 0;
if (setupSuccessful)
{
// manages windows features
windowFeaturesMgr = new WindowFeaturesManager(this);
// add an event handler to an event raised by windowFeaturesMgr
windowFeaturesMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
windowFeaturesMgr.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler;
// manages .NET Framework 2.0 Settings
dotNet2Pt0FrameworkMgr = new DotNet2Pt0FrameworkManager(this);
// add an event handler to an event raised by dotNet2Pt0FrameworkMgr
dotNet2Pt0FrameworkMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
// manages file package transfer
fileTransferManager = new FilePackageTransferManager(this);
// add an event handler to an event raised by FilePackageTransferManager
fileTransferManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
fileTransferManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler;
// manages removal of files and folders
fileSystemRemovalManager = new FileFolderRemovalManager(this);
// add an event handler to an event raised by FileFolderRemovalManager
fileSystemRemovalManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
fileSystemRemovalManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler;
// manages folders
gutsFoldersMgr = new FoldersManager(this);
// add an event handler to an event raised by gutsFoldersMgr
gutsFoldersMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
// manages windows shortcut
winShortcutMgr = new WindowsShortcutManager(this);
// add an event handler to an event raised by WindowsShortcutManager
winShortcutMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
// process GUTS config file
gutsConfigFileManager = new GutsConfigFileManager(this);
// add an event handler to an event raised by GutsConfigFileManager
gutsConfigFileManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
// setup miscellaneous items
gutsSetupMisc = new SetupMiscellaneous(this);
// add an event handler to an event raised by SetupMiscellaneous
gutsSetupMisc.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
// manages software installs
softwareInstallMgr = new SoftwareInstallManager(this);
// add an event handler to an event raised by softwareInstallMgr
softwareInstallMgr.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
softwareInstallMgr.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler;
softwareInstallMgr.RebootComputer += rebootComputerEventHandler;
softwareInstallMgr.SetupProcessNeedRestartToProceed += setupProcessNeedRestartToContinueEventHandler;
// manages running applications
runAppManager = new RunApplicationsManager(this);
// add an event handler to an event raised by RunApplicationsManager
runAppManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
runAppManager.UpdateStatusDisplayAtLine += updateStatusDisplayAtLineEventHandler;
// assist in building GUTS
gutsBuildAssistant = new GutsSoftwareBuildAssistant(this);
// add an event handler to an event raised by GutsSoftwareBuildAssistant
gutsBuildAssistant.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
gutsBuildAssistant.RestartApplication += restartApplicationEventHandler;
winRegistryManager = new WindowsRegistryManager(this);
winRegistryManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
networkCardManager = new NetworkAdapterManager(this);
networkCardManager.UpdateStatusDisplayAndLogEvent += updateStatusDisplayAndLogEventHandler;
Dictionary<Common.enum_SETUP_STEPS, SetupStepDelegate> setupStepCalls = new Dictionary<Common.enum_SETUP_STEPS, SetupStepDelegate>()
{ { Common.enum_SETUP_STEPS.ASSIST_BUILDING_GUTS_APP, gutsBuildAssistant.gutsPrebuildCheck},
{ Common.enum_SETUP_STEPS.CREATE_DIRECTORIES, gutsFoldersMgr.createDirectories},
{ Common.enum_SETUP_STEPS.CREATE_WINDOWS_SHORTCUTS, winShortcutMgr.creatShortcuts},
{ Common.enum_SETUP_STEPS.CREATE_NETWORK_SHARES, gutsFoldersMgr.shareFolders},
{ Common.enum_SETUP_STEPS.ENABLE_INTERNET_INFORMATION_SERVICES, windowFeaturesMgr.enableWindowsOptionalFeatures},
{ Common.enum_SETUP_STEPS.INSTALL_SOFTWARE_PACKAGES, softwareInstallMgr.manageRequiredSoftwarePackages},
{ Common.enum_SETUP_STEPS.PROCESS_GUTS_CONFIG_FILE, gutsConfigFileManager.processGutsConfigFile},
{ Common.enum_SETUP_STEPS.SET_DOTNET_FRAMEWORK_2_SECURITY_ZONE_LEVELS, dotNet2Pt0FrameworkMgr.adjustZoneSecurityForDotNetFrameWork2Pt0},
{ Common.enum_SETUP_STEPS.SET_ENVIRONMENT_VARIABLES, gutsSetupMisc.setEnvironmentVariables},
{ Common.enum_SETUP_STEPS.TRANSFER_FILE_PACKAGES, fileTransferManager.manageFilePackageTransfer},
{ Common.enum_SETUP_STEPS.REMOVE_FILES_FOLDERS, fileSystemRemovalManager.removeFilesFolders},
{ Common.enum_SETUP_STEPS.RUN_APPLICATIONS, runAppManager.runApplications},
{ Common.enum_SETUP_STEPS.MODIFY_WINDOWS_REGISTRY, winRegistryManager.ModifyWindowsRegistry},
{ Common.enum_SETUP_STEPS.CONFIGURE_NETWORK_ADAPTERS, networkCardManager.configureNetworkAdapters},
{ Common.enum_SETUP_STEPS.PROMPT_USER, gutsSetupMisc.promptUser},
};
foreach (string[] entry in configInfoFormatted)
{
currentSetupStep++;
Common.enum_SETUP_STEPS actualSetupstep = Common.enum_SETUP_STEPS.NOT_VALID_STEP;
// the application had to be restart or rebooted in the middle of execution, we want to continue
// at the point where it left off
if ((int)Properties.Settings.Default["CurrentSetupStep"] > 0 &&
currentSetupStep < (int)Properties.Settings.Default["CurrentSetupStep"])
continue;
if ( getActualSetupStep(entry[0], ref actualSetupstep) )
{
setupSuccessful = setupStepCalls[actualSetupstep].Invoke(entry[1]);
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = Common.getSetupStepTitleColor();
textProp.wordIndex = 0;
textProp.wordCount = 100;
textPropList.Add(textProp);
DateTime dat1 = DateTime.Now;
msg = "\n<-------------------Date and Time: " + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture) + "------------------->";
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
}
if (!setupSuccessful || applicationNeedsToBeRestarted())
break;
}
}
// only genereate summary if the entire setup process is complete or if an actual failure occur
if (!applicationNeedsToBeRestarted())
{
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 3;
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
msg = "\n\nOVERALL SETUP STATUS: ";
if (!setupSuccessful)
{
msg += " - FAILED.";
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.FAILURE);
textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "FAILED.");
textProp.wordCount = 10;
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
Properties.Settings.Default["CurrentSetupStep"] = currentSetupStep;
}
else
{
msg += " - SUCCESS.";
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS);
textProp.wordIndex = StringManip.GetPhraseWordIndexInText(msg, "SUCCESS.");
textProp.wordCount = 10;
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
Properties.Settings.Default["CurrentSetupStep"] = -1;
string registryPath = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon";
// disable windows auto login
WindowsRegistry.AddOrModifyRegistryKeySingleValue(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "AutoAdminLogon", Microsoft.Win32.RegistryValueKind.String, "0", ref errMsg);
// delete user password
WindowsRegistry.DeleteRegistryValueName(registryPath, Microsoft.Win32.RegistryHive.LocalMachine, "DefaultPassword", ref errMsg);
}
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
msg = Regex.Replace(msg, @"\r", "", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"\n", "\r\n", RegexOptions.IgnoreCase);
swSetupLog.Write(msg);
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 3;
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
msg = "\nSETUP COMPLETED.";
FormControlsManipThreadSafe.ModifyControlText(btnCancel, "CLOSE");
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
msg = Regex.Replace(msg, @"\r", "", RegexOptions.IgnoreCase);
msg = Regex.Replace(msg, @"\n", "\r\n", RegexOptions.IgnoreCase);
swSetupLog.Write(msg);
DateTime dat1 = DateTime.Now;
msg = StringManip.TextAlign("\nDate and Time: ", 25, StringManip.enumTextHorizontalAlignment.Left) + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
}
else
{
if (restartApplicationRequested)
{
if (setupSuccessful)
{
if (!ConfigFileManager.ms_configGlobalSettings.suppressAllPrompts.alternateValue)
displayMessageBox(MessageBoxCustom.PopUpMsgType.INFO, null, "The application needs to be restarted.\n\n.Press OK to restart the application now.", "Info", -1);
}
else
restartApplicationRequested = false;
}
Properties.Settings.Default["CurrentSetupStep"] = currentSetupStep;
}
if (rebootRequested)
{
if (setupSuccessful)
{
if (!ConfigFileManager.ms_configGlobalSettings.suppressAllPrompts.alternateValue)
{
msg = displayMessageBox(MessageBoxCustom.PopUpMsgType.YESNO, null, "Reboot is required for the previous changes to take effect.\n\nWould you like reboot now?", "Info", -1);
if (String.Equals(msg, "no", StringComparison.OrdinalIgnoreCase))
{
rebootRequested = false;
}
}
}
else
rebootRequested = false;
}
}
private void bgwSetup_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// if an exception is thrown
if (e.Error != null)
{
}
else
{
swSetupLog.Close();
if (restartApplicationRequested || rebootRequested)
{
this.Close();
}
}
}
private bool getActualSetupStep(string strSetupStep, ref Common.enum_SETUP_STEPS enumSetupStep)
{
bool successful = false;
enumSetupStep = Common.enum_SETUP_STEPS.NOT_VALID_STEP;
foreach (Common.enum_SETUP_STEPS enumStep in Enum.GetValues(typeof(Common.enum_SETUP_STEPS)))
{
if (String.Equals(strSetupStep, enumStep.ToString(), StringComparison.OrdinalIgnoreCase))
{
successful = true;
enumSetupStep = enumStep;
}
}
return successful;
}
public bool applicationNeedsToBeRestarted()
{
bool restart = false;
if (restartApplicationRequested || setupProcessNeedRestartToContinue)
restart = true;
return restart;
}
private bool verifySetupStepsInfo()
{
bool setupSuccessful = true;
string msg;
ConfigFileManager.Ini_KeyValue<string> iniVal = new ConfigFileManager.Ini_KeyValue<string>("");
string indentation = String.Empty;
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList = new List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor>();
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = Common.getSetupStepTitleColor();
textProp.wordIndex = 0;
textProp.wordCount = 10;
// set font size
textProp.textFont = new Font(textProp.textFont.Name, 12);
// set font style
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
msg = "\n\n-=Verifying setup step information=-";
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
if (configInfo.Count == 0)
{
indentation = Common.getIndentation(1);
msg = "\n" + indentation + "- FAILED. "
+ "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile
+ "\n" + indentation + "Error Description: The section " + SectionName.Setup_Step_Manager + " doesn't exist or have no entries.";
Common.formatConfigIniFailureMessage(msg, textPropList);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
swSetupLog.Write(msg);
setupSuccessful = false;
}
if (setupSuccessful)
{
foreach (ConfigFileManager.Ini_KeyValue<string> entry in configInfo)
{
List<string> pair = new List<string>(entry.iniValue.Split(new string[] { "," }, StringSplitOptions.None));
if (pair.Count <= 2)
{
pair[0] = pair[0].Trim();
if (pair.Count == 1)
pair.Add("");
pair[1] = pair[1].Trim();
Common.enum_SETUP_STEPS actualSetupstep = Common.enum_SETUP_STEPS.NOT_VALID_STEP;
if (getActualSetupStep(pair[0], ref actualSetupstep))
{
configInfoFormatted.Add(new string[2] { pair[0], pair[1] });
}
else
{
indentation = Common.getIndentation(1);
msg = "\n" + indentation + "- FAILED. "
+ "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile
+ "\n" + indentation + "Section: " + entry.iniSectionName
+ "\n" + indentation + "Key: " + entry.iniKeyName
+ "\n" + indentation + "Value: " + entry.iniValue
+ "\n" + indentation + "Error Description: The setup step \"" + pair[0] + "\" specified in the value above is invalid";
Common.formatConfigIniFailureMessage(msg, textPropList);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
setupSuccessful = false;
break;
}
}
else
{
indentation = Common.getIndentation(1);
msg = "\n" + indentation + "- FAILED. "
+ "\n" + indentation + "File: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile
+ "\n" + indentation + "Section: " + entry.iniSectionName
+ "\n" + indentation + "Key: " + entry.iniKeyName
+ "\n" + indentation + "Value: " + entry.iniValue
+ "\n" + indentation + "Error Description: The value is invalid the INI file. Expecting install step and associated section name separated by comma";
Common.formatConfigIniFailureMessage(msg, textPropList);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
setupSuccessful = false;
break;
}
}
}
if (setupSuccessful)
{
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 3;
textProp.textColor = Common.getSetupStatusColor(Common.EXECUTION_STATUS.SUCCESS);
textProp.textFont = new Font(textProp.textFont, FontStyle.Bold);
textPropList.Add(textProp);
indentation = Common.getIndentation(1);
msg = "\n" + indentation + "- SUCCESS.";
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
}
return setupSuccessful;
}
private bool displayAndLogHeaderInfo()
{
bool setupSuccessful = true;
CommonLib.Windows.Forms.TextFormat.TextFontAndColor defaultTextProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
defaultTextProp.textFont = new Font(defaultTextProp.textFont.Name, 9);
CommonLib.Windows.Forms.TextFormat.TextFontAndColor textProp = new CommonLib.Windows.Forms.TextFormat.TextFontAndColor("");
List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor> textPropList = new List<CommonLib.Windows.Forms.TextFormat.TextFontAndColor>();
string msg;
if (ConfigFileManager.ms_configGeneralInfo.programName.iniValue.Length > 0)
{
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 10;
textProp.textColor = Color.BlueViolet;
textProp.textFont = new Font("Tahoma", 17, FontStyle.Bold | FontStyle.Underline);
textPropList.Add(textProp);
msg = ConfigFileManager.ms_configGeneralInfo.programName.iniValue;
}
else
{
msg = "\n\nFAILURE ENCOUNTERED: "
+ "\nFile: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + " "
+ "\nSection: " + ConfigFileManager.ms_configGeneralInfo.programName.iniSectionName + " "
+ "\nKey: " + ConfigFileManager.ms_configGeneralInfo.programName.iniKeyName + " "
+ "\nValue: " + ConfigFileManager.ms_configGeneralInfo.programName.iniValue + " "
+ "\nError Description: Either one or a combination of Section, Key, or Value is not defined in the INI file.";
Common.formatConfigIniFailureMessage(msg, textPropList);
setupSuccessful = false;
}
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
if (setupSuccessful)
{
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 3;
textProp.textColor = Color.Brown;
textProp.textFont = new Font("Courier New", 10, FontStyle.Regular);
textPropList.Add(textProp);
textProp.textColor = Color.Black;
textProp.wordIndex = 3;
textProp.wordCount = 100;
textPropList.Add(textProp);
DateTime dat1 = DateTime.Now;
msg = StringManip.TextAlign("\nDate and Time: ", 25, StringManip.enumTextHorizontalAlignment.Left) + dat1.ToString(@"MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
}
if (setupSuccessful)
{
if (ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue.Length > 0)
{
// set font to default text and color
textProp.textFont = defaultTextProp.textFont;
textProp.textColor = defaultTextProp.textColor;
textProp.wordIndex = 0;
textProp.wordCount = 2;
textProp.textColor = Color.Brown;
textProp.textFont = new Font("Courier New", 10, FontStyle.Regular);
textPropList.Add(textProp);
textProp.textColor = Color.Black;
textProp.wordIndex = 2;
textProp.wordCount = 100;
textPropList.Add(textProp);
msg = StringManip.TextAlign("\nApplication Platform: ", 25, StringManip.enumTextHorizontalAlignment.Left) + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue + "-Bit";
}
else
{
msg = "\n\nFAILURE ENCOUNTERED: "
+ "\nFile: " + ConfigFileManager.ms_configGeneralInfo.pathAndNameOfConfigFile + " "
+ "\nSection: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniSectionName + " "
+ "\nKey: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniKeyName + " "
+ "\nValue: " + ConfigFileManager.ms_configGeneralInfo.applicationPlatform.iniValue + " "
+ "\nError Description: Either one or a combination of Section, Key, or Value is not defined in the INI file.";
Common.formatConfigIniFailureMessage(msg, textPropList);
setupSuccessful = false;
}
FormControlsManipThreadSafe.ModifyRichTextBoxPerWords(statusRtxtbox, msg, textPropList, defaultTextProp.textFont, defaultTextProp.textColor);
writeToLog(msg);
}
return setupSuccessful;
}
private void btnCancel_Click(object sender, EventArgs e)
{
if (String.Equals(btnCancel.Text, "close", StringComparison.OrdinalIgnoreCase))
{
this.Close();
}
}
}
}