#At file:///D:/Work/MySQL/installer/ based on revid:mike.lischke@stripped
357 Mike Lischke 2011-03-08
- DetailedUpdateCheck: Avoid crash if no UpdateVersion is found.
- InstallProgress: avoid crash when no product could be found in the progress callback.
- Some code cleanup.
modified:
StandardPlugins/Server/ConfigurationController.cs
StandardPlugins/Server/ServerConfigPanel1.cs
WexInstaller.Core/Product.cs
WexInstaller/Controls/InstallWizardControl.Designer.cs
WexInstaller/Controls/InstallWizardControl.cs
WexInstaller/Controls/InstallWizardControl.resx
WexInstaller/InstallWizard/DetailedUpdateCheck.cs
WexInstaller/InstallWizard/InstallProgressPanel.cs
=== modified file 'StandardPlugins/Server/ConfigurationController.cs'
=== modified file 'StandardPlugins/Server/ConfigurationController.cs'
--- a/StandardPlugins/Server/ConfigurationController.cs 2011-03-07 12:55:25 +0000
+++ b/StandardPlugins/Server/ConfigurationController.cs 2011-03-08 11:10:55 +0000
@@ -11,9 +11,17 @@
namespace WexInstaller.Plugins
{
+ public enum ServerInstallationType
+ {
+ Developer,
+ Server,
+ Dedicated
+ }
+
[ProductConfiguration("mysql-server", 1)]
public class ServerConfigurationController : ServerProductConfigurationController
{
+
private UserControl[] pages;
private bool processedTemplate;
private bool processedService;
@@ -23,7 +31,7 @@
public MySQLServiceControlManager ScManager { get; set; }
// UI Controls.
- public ServerInstallType ServerInstallType { get; set; }
+ public ServerInstallationType ServerInstallType { get; set; }
public bool Reconfigure { get; set; }
public bool CreateService { get; set; }
public string ServiceName { get; set; }
@@ -33,379 +41,378 @@
public ServerConfigurationController()
{
- CurrentState = ConfigState.ConfigurationRequired;
- Logger.LogInformation("Product configuration controller created.");
- Initialize();
+ CurrentState = ConfigState.ConfigurationRequired;
+ Logger.LogInformation("Product configuration controller created.");
+ Initialize();
- processedTemplate = false;
- processedService = false;
- processedSecuritySettings = false;
+ processedTemplate = false;
+ processedService = false;
+ processedSecuritySettings = false;
}
public override UserControl[] Pages
{
- get
- {
- GetPages();
- return pages;
- }
+ get
+ {
+ GetPages();
+ return pages;
+ }
}
public override int NumPages
{
- get { return (Reconfigure) ? 1 : 2; }
+ get { return (Reconfigure) ? 1 : 2; }
}
public override void PostAction()
{
- Initialize();
+ Initialize();
}
private bool ProcessTemplate()
{
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "VALID_TEMPLATE"));
- if (Template.IsValid)
- {
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "VALID_TEMPLATE"));
-
- switch (ServerInstallType)
- {
- case ServerInstallType.Dedicated:
- Template.ServerType = IniServerType.Dedicated;
- break;
- case ServerInstallType.Developer:
- Template.ServerType = IniServerType.Developer;
- break;
- case ServerInstallType.Server:
- Template.ServerType = IniServerType.Server;
- break;
- }
-
- // Set reasonable defaults.
- Template.MyisamUsage = 0.05;
- Template.SkipInnodb = false;
- Template.DefaultStorageEngine = "INNODB";
- Template.DefaultCharacterSet = "utf8";
- Template.NumberConnections = 20.0;
- Template.UseQueryCache = 0.0;
- Template.InnoDBBPSUsage = 0.50;
-
- if (EnableTCPIP)
- {
- Template.EnableNetworking = true;
- Template.Port = Port.ToString();
- }
-
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "PROCESS_TEMPLATE"));
- Template.ProcessTemplate();
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "PROCESS_TEMPLATE"));
- processedTemplate = true;
- }
- else
- {
- // Bad Template. Error.
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "VALID_TEMPLATE"));
-
- processedTemplate = false;
- }
-
- return processedTemplate;
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "VALID_TEMPLATE"));
+ if (Template.IsValid)
+ {
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "VALID_TEMPLATE"));
+
+ switch (ServerInstallType)
+ {
+ case ServerInstallationType.Dedicated:
+ Template.ServerType = IniServerType.Dedicated;
+ break;
+ case ServerInstallationType.Developer:
+ Template.ServerType = IniServerType.Developer;
+ break;
+ case ServerInstallationType.Server:
+ Template.ServerType = IniServerType.Server;
+ break;
+ }
+
+ // Set reasonable defaults.
+ Template.MyisamUsage = 0.05;
+ Template.SkipInnodb = false;
+ Template.DefaultStorageEngine = "INNODB";
+ Template.DefaultCharacterSet = "utf8";
+ Template.NumberConnections = 20.0;
+ Template.UseQueryCache = 0.0;
+ Template.InnoDBBPSUsage = 0.50;
+
+ if (EnableTCPIP)
+ {
+ Template.EnableNetworking = true;
+ Template.Port = Port.ToString();
+ }
+
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "PROCESS_TEMPLATE"));
+ Template.ProcessTemplate();
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "PROCESS_TEMPLATE"));
+ processedTemplate = true;
+ }
+ else
+ {
+ // Bad Template. Error.
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "VALID_TEMPLATE"));
+
+ processedTemplate = false;
+ }
+
+ return processedTemplate;
}
private bool ProcessService()
{
- try
- {
- string thisServiceName = ScManager.FindServiceName(Template.BaseDir);
-
- if (thisServiceName.Length > 0)
- //if (it.Reconfiguring)
- {
- // Make sure the existing server uses the new configuration file, then
- // start it.
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "CONFIGURE_SERVICE"));
- ScManager.Update(thisServiceName,
- String.Format("\"{0}bin\\mysqld\" --defaults-file=\"{1}\" {2}",
- Template.BaseDir, Template.ConfigurationFile, thisServiceName));
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "CONFIGURE_SERVICE"));
-
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "START_SERVICE"));
- ScManager.Restart(thisServiceName);
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "START_SERVICE"));
- }
- else
- {
- // Add and Start the service.
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "CONFIGURE_SERVICE"));
- ScManager.Add(ServiceName, ServiceName,
- String.Format("\"{0}bin\\mysqld\" --defaults-file=\"{1}\" {2}", Template.BaseDir, Template.ConfigurationFile, ServiceName));
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "CONFIGURE_SERVICE"));
-
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "START_SERVICE"));
- ScManager.Start(ServiceName);
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "START_SERVICE"));
-
- processedService = false;
- }
-
- processedService = true;
- }
- catch
- {
- // Failed to add or start the server
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "CONFIGURE_SERVICE"));
- }
-
- return processedService;
+ try
+ {
+ string thisServiceName = ScManager.FindServiceName(Template.BaseDir);
+
+ if (thisServiceName.Length > 0)
+ //if (it.Reconfiguring)
+ {
+ // Make sure the existing server uses the new configuration file, then
+ // start it.
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "CONFIGURE_SERVICE"));
+ ScManager.Update(thisServiceName,
+ String.Format("\"{0}bin\\mysqld\" --defaults-file=\"{1}\" {2}",
+ Template.BaseDir, Template.ConfigurationFile, thisServiceName));
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "CONFIGURE_SERVICE"));
+
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "START_SERVICE"));
+ ScManager.Restart(thisServiceName);
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "START_SERVICE"));
+ }
+ else
+ {
+ // Add and Start the service.
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "CONFIGURE_SERVICE"));
+ ScManager.Add(ServiceName, ServiceName,
+ String.Format("\"{0}bin\\mysqld\" --defaults-file=\"{1}\" {2}", Template.BaseDir, Template.ConfigurationFile, ServiceName));
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "CONFIGURE_SERVICE"));
+
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "START_SERVICE"));
+ ScManager.Start(ServiceName);
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "START_SERVICE"));
+
+ processedService = false;
+ }
+
+ processedService = true;
+ }
+ catch
+ {
+ // Failed to add or start the server
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "CONFIGURE_SERVICE"));
+ }
+
+ return processedService;
}
private bool ProcessSecuritySettings()
{
- try
- {
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "SECURITY_SETTING"));
-
- // Set root password.
- MySqlCommand cmd = new MySqlCommand();
- string connectionString = String.Format("server=localhost;user id=root;port={0};database=mysql;", Template.Port);
-
- if (String.IsNullOrEmpty(ExistingRootPassword) == false)
- {
- connectionString += String.Format("password={0}", ExistingRootPassword);
- }
- cmd.Connection = new MySqlConnection(connectionString);
- cmd.Connection.Open();
- cmd.CommandText = String.Format("UPDATE mysql.user SET Password=Password('{0}') WHERE User='root'", RootPassword);
- cmd.ExecuteNonQuery();
- cmd.CommandText = "FLUSH PRIVILEGES";
- cmd.ExecuteNonQuery();
- cmd.Connection.Close();
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "SECURITY_SETTING"));
-
- processedSecuritySettings = true;
- }
- catch (MySqlException)
- {
- // Failed to set root password.
- ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "SECURITY_SETTING"));
- processedSecuritySettings = false;
- }
-
- return processedSecuritySettings;
+ try
+ {
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Info, "SECURITY_SETTING"));
+
+ // Set root password.
+ MySqlCommand cmd = new MySqlCommand();
+ string connectionString = String.Format("server=localhost;user id=root;port={0};database=mysql;", Template.Port);
+
+ if (String.IsNullOrEmpty(ExistingRootPassword) == false)
+ connectionString += String.Format("password={0}", ExistingRootPassword);
+ cmd.Connection = new MySqlConnection(connectionString);
+ cmd.Connection.Open();
+ cmd.CommandText = String.Format("UPDATE mysql.user SET Password=Password('{0}') WHERE User='root'", RootPassword);
+ cmd.ExecuteNonQuery();
+ cmd.CommandText = "FLUSH PRIVILEGES";
+ cmd.ExecuteNonQuery();
+ cmd.Connection.Close();
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Success, "SECURITY_SETTING"));
+
+ processedSecuritySettings = true;
+ }
+ catch (MySqlException)
+ {
+ // Failed to set root password.
+ ReportConfigStatus(new ConfigurationEventArgs(ConfigurationEventType.Error, "SECURITY_SETTING"));
+ processedSecuritySettings = false;
+ }
+
+ return processedSecuritySettings;
}
protected override void BackgroundConfigure(object sender, DoWorkEventArgs e)
{
- if (Template == null)
- Initialize();
+ if (Template == null)
+ Initialize();
- Logger.LogInformation("Beginning product configuration.");
- if (ProcessTemplate())
+ Logger.LogInformation("Beginning product configuration.");
+ if (ProcessTemplate())
+ {
+ if (CreateService)
{
- if (this.CreateService == true)
- {
- if (ProcessService())
- {
- ProcessSecuritySettings();
- }
- }
+ if (ProcessService())
+ ProcessSecuritySettings();
}
+ }
}
public override void Initialize()
{
- Logger.LogInformation("Product configuration controller initialization started.");
-
- if (ScManager == null)
- ScManager = new MySQLServiceControlManager();
-
- string baseDirectory = String.Empty;
- string dataDirectory = String.Empty;
- string foundDataDir = String.Empty;
- string version = String.Empty;
-
- if (Owner != null)
- {
- if (Owner.Installed)
- {
- Logger.LogInformation(String.Format("Product configuration controller found {0} installed.", Owner.Name));
-
- baseDirectory = Owner.GetInstalledProductRegistryKey("Location");
- dataDirectory = Owner.GetInstalledProductRegistryKey("DataLocation");
- foundDataDir = Owner.GetInstalledProductRegistryKey("FoundExistingDataDir");
- version = Owner.GetInstalledProductRegistryKey("Version");
-
- if (!String.IsNullOrEmpty(baseDirectory))
- {
- // Look for existing service.
- this.ServiceName = ScManager.FindServiceName(baseDirectory);
- }
-
- if (String.IsNullOrEmpty(this.ServiceName) && !String.IsNullOrEmpty(version))
- {
- // If no existing service, use default.
- this.ServiceName = String.Format("MySQL{0}{1}", version[0], version[2]);
- }
- }
-
- Reconfigure = (Owner.IsUpgrade && Owner.Installed);
- if (Reconfigure)
- {
- Regex defaultsFilePattern = new Regex(@" --defaults-file=""(?<iniLocation>.+)?"" ");
- Match m = defaultsFilePattern.Match(ScManager.BinaryPath(ServiceName));
- if (m.Success)
- {
- ExistingConfigFile = Path.GetFullPath(m.Groups["iniLocation"].Value);
- string destination = String.Format("{0}{1}", dataDirectory, Path.GetFileName(ExistingConfigFile));
- try
- {
- File.Copy(ExistingConfigFile, destination);
- }
- catch
- {
- }
- }
- }
- }
-
- if (!String.IsNullOrEmpty(baseDirectory) && !String.IsNullOrEmpty(dataDirectory))
- {
- Logger.LogInformation("Product configuration controller creating new template instance.");
-
- Template = new IniTemplate(baseDirectory, dataDirectory, InstallerConfiguration.TemplateName, dataDirectory);
- Template.FoundExistingDataDir = (!String.IsNullOrEmpty(foundDataDir) && foundDataDir == "1");
- }
- else
- {
- Logger.LogInformation("Product not currently installed.");
-
- Template = null;
- }
+ Logger.LogInformation("Product configuration controller initialization started.");
+
+ if (ScManager == null)
+ ScManager = new MySQLServiceControlManager();
+
+ string baseDirectory = String.Empty;
+ string dataDirectory = String.Empty;
+ string foundDataDir = String.Empty;
+ string version = String.Empty;
+
+ if (Owner != null)
+ {
+ if (Owner.Installed)
+ {
+ Logger.LogInformation(String.Format("Product configuration controller found {0} installed.", Owner.Name));
+
+ baseDirectory = Owner.GetInstalledProductRegistryKey("Location");
+ dataDirectory = Owner.GetInstalledProductRegistryKey("DataLocation");
+ foundDataDir = Owner.GetInstalledProductRegistryKey("FoundExistingDataDir");
+ version = Owner.GetInstalledProductRegistryKey("Version");
+
+ if (!String.IsNullOrEmpty(baseDirectory))
+ {
+ // Look for existing service.
+ this.ServiceName = ScManager.FindServiceName(baseDirectory);
+ }
+
+ if (String.IsNullOrEmpty(this.ServiceName) && !String.IsNullOrEmpty(version))
+ {
+ // If no existing service, use default.
+ this.ServiceName = String.Format("MySQL{0}{1}", version[0], version[2]);
+ }
+ }
+
+ Reconfigure = (Owner.IsUpgrade && Owner.Installed);
+ if (Reconfigure)
+ {
+ Regex defaultsFilePattern = new Regex(@" --defaults-file=""(?<iniLocation>.+)?"" ");
+ Match m = defaultsFilePattern.Match(ScManager.BinaryPath(ServiceName));
+ if (m.Success)
+ {
+ ExistingConfigFile = Path.GetFullPath(m.Groups["iniLocation"].Value);
+ string destination = String.Format("{0}{1}", dataDirectory, Path.GetFileName(ExistingConfigFile));
+ try
+ {
+ File.Copy(ExistingConfigFile, destination);
+ }
+ catch
+ {
+ }
+ }
+ }
+ }
+
+ if (!String.IsNullOrEmpty(baseDirectory) && !String.IsNullOrEmpty(dataDirectory))
+ {
+ Logger.LogInformation("Product configuration controller creating new template instance.");
+
+ Template = new IniTemplate(baseDirectory, dataDirectory, InstallerConfiguration.TemplateName, dataDirectory);
+ Template.FoundExistingDataDir = (!String.IsNullOrEmpty(foundDataDir) && foundDataDir == "1");
+ }
+ else
+ {
+ Logger.LogInformation("Product not currently installed.");
+
+ Template = null;
+ }
}
private void GetPages()
{
- if (pages != null) return;
- pages = new UserControl[NumPages];
+ if (pages != null) return;
+ pages = new UserControl[NumPages];
- if (Reconfigure)
- {
- Logger.LogInformation("Setting up product configuration controller for reconfiguration.");
- pages[0]= new ServerConfigStep1a(this);
- }
- else
- {
- Logger.LogInformation("Setting up product configuration controller for new installation.");
- pages[0] = new ServerConfigStep1(this);
- pages[1] = new ServerConfigStep2(this);
- // pages[2] = new ServerConfigStep3(this);
- // pages[3] = new ServerConfigAction(this);
- }
+ if (Reconfigure)
+ {
+ Logger.LogInformation("Setting up product configuration controller for reconfiguration.");
+ pages[0]= new ServerConfigStep1a(this);
+ }
+ else
+ {
+ Logger.LogInformation("Setting up product configuration controller for new installation.");
+ pages[0] = new ServerConfigStep1(this);
+ pages[1] = new ServerConfigStep2(this);
+ // pages[2] = new ServerConfigStep3(this);
+ // pages[3] = new ServerConfigAction(this);
+ }
}
private string GetServerTypeAsString()
{
- if (ServerInstallType == ServerInstallType.Developer)
- return "Development Machine";
- else if (ServerInstallType == ServerInstallType.Server)
- return "Server Machine";
- else
- return "Dedicated Machine";
+ if (ServerInstallType == ServerInstallationType.Developer)
+ return "Development Machine";
+ else if (ServerInstallType == ServerInstallationType.Server)
+ return "Server Machine";
+ else
+ return "Dedicated Machine";
}
protected override void ReportConfigStatus(ConfigurationEventArgs e)
{
- string message = String.Empty;
- int percent = 100 / 11;
-
- switch (e.Type)
- {
- case (ConfigurationEventType.Info):
- switch (e.Action)
- {
- case "VALID_TEMPLATE":
- message = "Looking for valid template.";
- percent *= 1;
- break;
- case "PROCESS_TEMPLATE":
- percent *= 3;
- message = "Attempting to process template.";
- break;
- case "CONFIGURE_SERVICE":
- percent *= 5;
- message = "Attempting to configure service.";
- break;
- case "START_SERVICE":
- percent *= 7;
- message = "Attempting to start service.";
- break;
- case "SECURITY_SETTING":
- percent *= 9;
- message = "Attempting to update security settings.";
- break;
- }
- Logger.LogInformation(message);
- break;
- case (ConfigurationEventType.Success):
- switch (e.Action)
- {
- case "VALID_TEMPLATE":
- percent *= 2;
- message = "Found valid template.";
- break;
- case "PROCESS_TEMPLATE":
- percent *= 4;
- message = "Processed template.";
- break;
- case "CONFIGURE_SERVICE":
- percent *= 6;
- message = "Configured service.";
- break;
- case "START_SERVICE":
- percent *= 8;
- message = "Started service.";
- break;
- case "SECURITY_SETTING":
- percent *= 10;
- message = "Updated security settings.";
- break;
- }
- Logger.LogInformation(message);
- break;
- case (ConfigurationEventType.Error):
- switch (e.Action)
- {
- case "VALID_TEMPLATE":
- message = "Unable to find a valid template.";
- break;
- case "PROCESS_TEMPLATE":
- message = "Failed to process template.";
- break;
- case "CONFIGURE_SERVICE":
- message = "Unable to configure service.";
- break;
- case "START_SERVICE":
- message = "Failed to start service.";
- break;
- case "SECURITY_SETTING":
- message = "Unable to update security settings.";
- break;
- }
- percent *= 11;
- CurrentState = ConfigState.ConfigurationError;
- Logger.LogError(message);
- break;
- case (ConfigurationEventType.Finished):
- message = "Product configuration controller finished configuration.";
- percent *= 11;
- CurrentState = ConfigState.ConfigurationComplete;
- Logger.LogInformation(message);
- break;
- };
- e.Details = message;
- e.PercentComplete = percent;
-
- ReportProgress(percent, e);
+ string message = String.Empty;
+ int percent = 100 / 11;
+
+ switch (e.Type)
+ {
+ case (ConfigurationEventType.Info):
+ switch (e.Action)
+ {
+ case "VALID_TEMPLATE":
+ message = "Looking for valid template.";
+ percent *= 1;
+ break;
+ case "PROCESS_TEMPLATE":
+ percent *= 3;
+ message = "Attempting to process template.";
+ break;
+ case "CONFIGURE_SERVICE":
+ percent *= 5;
+ message = "Attempting to configure service.";
+ break;
+ case "START_SERVICE":
+ percent *= 7;
+ message = "Attempting to start service.";
+ break;
+ case "SECURITY_SETTING":
+ percent *= 9;
+ message = "Attempting to update security settings.";
+ break;
+ }
+ Logger.LogInformation(message);
+ break;
+
+ case ConfigurationEventType.Success:
+ switch (e.Action)
+ {
+ case "VALID_TEMPLATE":
+ percent *= 2;
+ message = "Found valid template.";
+ break;
+ case "PROCESS_TEMPLATE":
+ percent *= 4;
+ message = "Processed template.";
+ break;
+ case "CONFIGURE_SERVICE":
+ percent *= 6;
+ message = "Configured service.";
+ break;
+ case "START_SERVICE":
+ percent *= 8;
+ message = "Started service.";
+ break;
+ case "SECURITY_SETTING":
+ percent *= 10;
+ message = "Updated security settings.";
+ break;
+ }
+ Logger.LogInformation(message);
+ break;
+
+ case ConfigurationEventType.Error:
+ switch (e.Action)
+ {
+ case "VALID_TEMPLATE":
+ message = "Unable to find a valid template.";
+ break;
+ case "PROCESS_TEMPLATE":
+ message = "Failed to process template.";
+ break;
+ case "CONFIGURE_SERVICE":
+ message = "Unable to configure service.";
+ break;
+ case "START_SERVICE":
+ message = "Failed to start service.";
+ break;
+ case "SECURITY_SETTING":
+ message = "Unable to update security settings.";
+ break;
+ }
+ percent *= 11;
+ CurrentState = ConfigState.ConfigurationError;
+ Logger.LogError(message);
+ break;
+
+ case (ConfigurationEventType.Finished):
+ message = "Product configuration controller finished configuration.";
+ percent *= 11;
+ CurrentState = ConfigState.ConfigurationComplete;
+ Logger.LogInformation(message);
+ break;
+ };
+ e.Details = message;
+ e.PercentComplete = percent;
+
+ ReportProgress(percent, e);
}
/// ========================================================================
@@ -413,31 +420,26 @@
/// ========================================================================
public override bool IsRunning
{
- get
- {
- string location = Owner.GetInstalledProductRegistryKey("Location");
- string binary = String.Format(@"{0}bin\mysqld.exe", location);
- return IsProcessRunning(binary);
- }
+ get
+ {
+ string location = Owner.GetInstalledProductRegistryKey("Location");
+ string binary = String.Format(@"{0}bin\mysqld.exe", location);
+ return IsProcessRunning(binary);
+ }
}
private bool IsProcessRunning(string binaryPath)
{
- string path = binaryPath.ToLowerInvariant();
+ string path = binaryPath.ToLowerInvariant();
- foreach (Process p in Process.GetProcesses())
- {
- if (!p.ProcessName.Contains("mysqld")) continue;
- if (p.MainModule.FileName.ToLowerInvariant() == path) return true;
- }
- return false;
+ foreach (Process p in Process.GetProcesses())
+ {
+ if (!p.ProcessName.Contains("mysqld"))
+ continue;
+ if (p.MainModule.FileName.ToLowerInvariant() == path)
+ return true;
+ }
+ return false;
}
}
-
- public enum ServerInstallType
- {
- Developer,
- Server,
- Dedicated
- }
}
=== modified file 'StandardPlugins/Server/ServerConfigPanel1.cs'
--- a/StandardPlugins/Server/ServerConfigPanel1.cs 2011-03-07 12:55:25 +0000
+++ b/StandardPlugins/Server/ServerConfigPanel1.cs 2011-03-08 11:10:55 +0000
@@ -43,11 +43,11 @@
private void machineType_CheckedChanged(object sender, EventArgs e)
{
if (devMachine.Checked)
- Controller.ServerInstallType = ServerInstallType.Developer;
+ Controller.ServerInstallType = ServerInstallationType.Developer;
else if (serverMachine.Checked)
- Controller.ServerInstallType = ServerInstallType.Server;
+ Controller.ServerInstallType = ServerInstallationType.Server;
else if (dedicatedMachine.Checked)
- Controller.ServerInstallType = ServerInstallType.Dedicated;
+ Controller.ServerInstallType = ServerInstallationType.Dedicated;
}
public override bool Next()
=== modified file 'WexInstaller.Core/Product.cs'
--- a/WexInstaller.Core/Product.cs 2011-03-07 16:27:05 +0000
+++ b/WexInstaller.Core/Product.cs 2011-03-08 11:10:55 +0000
@@ -20,7 +20,7 @@
private ProductConfigurationController controller;
private StringBuilder InstallActionLog;
private WebClient webClient;
- private BackgroundWorker bgw;
+ private BackgroundWorker backgroundWorker;
private bool proposedInstalled;
public List<Package> Packages { get; set; }
@@ -88,13 +88,14 @@
public string GetLog()
{
- return InstallActionLog.ToString();
+ return InstallActionLog.ToString();
}
protected void SetProposedInstalled(bool shouldInstall)
{
- if (shouldInstall == proposedInstalled) return;
- proposedInstalled = shouldInstall;
+ if (shouldInstall == proposedInstalled)
+ return;
+ proposedInstalled = shouldInstall;
}
[XmlAttribute("upgradeId")]
@@ -106,26 +107,26 @@
[XmlIgnore]
public bool ProposedInstalled
{
- get { return proposedInstalled; }
- set { SetProposedInstalled(value); }
+ get { return proposedInstalled; }
+ set { SetProposedInstalled(value); }
}
[XmlIgnore]
public bool Installed
{
- get
- {
- return GetPackage().Installed;
- }
+ get
+ {
+ return GetPackage().Installed;
+ }
}
[XmlIgnore]
public bool FoundLocal
{
- get
- {
- return GetPackage().FoundLocal;
- }
+ get
+ {
+ return GetPackage().FoundLocal;
+ }
}
[XmlIgnore]
@@ -141,24 +142,24 @@
[XmlIgnore]
public bool UseCurrentlyInstalledPackage
{
- get
- {
- return useCurrentlyInstalledPackage;
- }
- set
- {
- if (useCurrentlyInstalledPackage != value)
- {
- useCurrentlyInstalledPackage = value;
- PostInitialize(false);
- }
- }
+ get
+ {
+ return useCurrentlyInstalledPackage;
+ }
+ set
+ {
+ if (useCurrentlyInstalledPackage != value)
+ {
+ useCurrentlyInstalledPackage = value;
+ PostInitialize(false);
+ }
+ }
}
[XmlIgnore]
public bool IsServerProduct
{
- get { return Name.StartsWith("mysql-server"); }
+ get { return Name.StartsWith("mysql-server"); }
}
public bool HasChanges()
@@ -172,27 +173,25 @@
public string GetUpgradeDisplayString()
{
- string upgradeDisplayString = String.Empty;
- if (IsUpgrade && Packages.Count == 2)
- {
- upgradeDisplayString = String.Format("Upgrade {0} {1} to {2} {3}", Title, Packages[1].ThisVersion, Title, Packages[0].ThisVersion);
- }
+ string upgradeDisplayString = String.Empty;
+ if (IsUpgrade && Packages.Count == 2)
+ upgradeDisplayString = String.Format("Upgrade {0} {1} to {2} {3}", Title, Packages[1].ThisVersion, Title, Packages[0].ThisVersion);
- return upgradeDisplayString;
+ return upgradeDisplayString;
}
public string GetInstalledProductRegistryKey(string keyName)
{
- string keyValue = String.Empty;
- Package pack = GetPackage();
- pack.RegistryEntries.TryGetValue(keyName, out keyValue);
- return keyValue;
+ string keyValue = String.Empty;
+ Package pack = GetPackage();
+ pack.RegistryEntries.TryGetValue(keyName, out keyValue);
+ return keyValue;
}
public List<ProductFeature> GetProductFeatures()
{
- Package pack = GetPackage();
- return pack.Features;
+ Package pack = GetPackage();
+ return pack.Features;
}
// MSI Installation in a background worker thread.
@@ -200,372 +199,343 @@
protected void DoInstallationProgressChange(ChainedInstallerEventArgs c)
{
- if (ProductInstallationProgressChanged != null)
- ProductInstallationProgressChanged(this, c);
+ if (ProductInstallationProgressChanged != null)
+ ProductInstallationProgressChanged(this, c);
}
private void ChainedInstallerUpdated(object sender, ChainedInstallerEventArgs c)
{
- bgw.ReportProgress(0, c);
+ if (backgroundWorker != null)
+ backgroundWorker.ReportProgress(0, c);
}
private void ExecuteMSI(PackageParameters parameters)
{
- Debug.Assert(bgw == null) ;
- bgw = new BackgroundWorker();
- bgw.WorkerReportsProgress = true;
- bgw.WorkerSupportsCancellation = false;
- bgw.DoWork += new DoWorkEventHandler(bgw_DoExecuteMSI);
- bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunExecuteMSICompleted);
- bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ExecuteMSIProgressChanged);
- bgw.RunWorkerAsync(parameters);
+ Debug.Assert(backgroundWorker == null) ;
+ backgroundWorker = new BackgroundWorker();
+ backgroundWorker.WorkerReportsProgress = true;
+ backgroundWorker.WorkerSupportsCancellation = false;
+ backgroundWorker.DoWork += new DoWorkEventHandler(bgw_DoExecuteMSI);
+ backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunExecuteMSICompleted);
+ backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(bgw_ExecuteMSIProgressChanged);
+ backgroundWorker.RunWorkerAsync(parameters);
}
private void bgw_DoExecuteMSI(object sender, DoWorkEventArgs e)
{
- uint[] returnCodes = null;
- PackageParameters parameters = e.Argument as PackageParameters;
- ChainedInstaller i = new ChainedInstaller();
-
- i.AddPackage(parameters);
- i.Updated += new ChainedInstallerUpdateEventHandler(ChainedInstallerUpdated);
- try
- {
- ChainedInstallerEventArgs cStart = new ChainedInstallerEventArgs();
- cStart.Action = ChainedInstallerAction.StartInstallation;
- ChainedInstallerUpdated(this, cStart);
-
- returnCodes = i.Install();
- }
- finally
- {
- }
- e.Result = returnCodes[0];
-
- ChainedInstallerEventArgs cEnd = new ChainedInstallerEventArgs();
- cEnd.Action = ChainedInstallerAction.EndInstallation;
- ChainedInstallerUpdated(this, cEnd);
-
- return;
+ uint[] returnCodes = null;
+ PackageParameters parameters = e.Argument as PackageParameters;
+ ChainedInstaller installer = new ChainedInstaller();
+
+ installer.AddPackage(parameters);
+ installer.Updated += new ChainedInstallerUpdateEventHandler(ChainedInstallerUpdated);
+ try
+ {
+ ChainedInstallerEventArgs cStart = new ChainedInstallerEventArgs();
+ cStart.Action = ChainedInstallerAction.StartInstallation;
+ ChainedInstallerUpdated(this, cStart);
+
+ returnCodes = installer.Install();
+ }
+ finally
+ {
+ }
+ e.Result = returnCodes[0];
+
+ ChainedInstallerEventArgs cEnd = new ChainedInstallerEventArgs();
+ cEnd.Action = ChainedInstallerAction.EndInstallation;
+ ChainedInstallerUpdated(this, cEnd);
+
+ return;
}
private void bgw_RunExecuteMSICompleted(object sender, RunWorkerCompletedEventArgs e)
{
- if (e.Result.ToString() == "0")
- {
- Logger.LogInformation(String.Format("{0}'s change state request passed.", Name));
- GetPackage().UpdateOptionalParameters();
- CurrentState += 1;
- }
- else
- {
- Logger.LogError(String.Format("{0}'s change state request failed.", Name));
- CurrentState += 2;
- }
- bgw.Dispose();
- bgw = null;
-
- ChainedInstallerEventArgs c = new ChainedInstallerEventArgs();
- c.Action = ChainedInstallerAction.FinalAction;
- c.ExitCode = (uint) Convert.ToInt32(e.Result);
+ if (e.Result.ToString() == "0")
+ {
+ Logger.LogInformation(String.Format("{0}'s change state request passed.", Name));
+ GetPackage().UpdateOptionalParameters();
+ CurrentState += 1;
+ }
+ else
+ {
+ Logger.LogError(String.Format("{0}'s change state request failed.", Name));
+ CurrentState += 2;
+ }
+ backgroundWorker.Dispose();
+ backgroundWorker = null;
+
+ ChainedInstallerEventArgs c = new ChainedInstallerEventArgs();
+ c.Action = ChainedInstallerAction.FinalAction;
+ c.ExitCode = (uint) Convert.ToInt32(e.Result);
+ DoInstallationProgressChange(c);
+
+ return;
+ }
+
+ private void bgw_ExecuteMSIProgressChanged(object sender, ProgressChangedEventArgs e)
+ {
+ if (e.ProgressPercentage == 0)
+ {
+ ChainedInstallerEventArgs c = e.UserState as ChainedInstallerEventArgs;
+ switch (c.Action)
+ {
+ case ChainedInstallerAction.StartInstallation:
+ InstallActionLog.AppendLine(c.Message);
+ if (CurrentState == ProductState.InstallStarted ||
+ CurrentState == ProductState.UpdateStarted ||
+ CurrentState == ProductState.RemoveStarted)
+ CurrentState += 1;
+ break;
+ case ChainedInstallerAction.HandleActionData:
+ InstallActionLog.AppendLine(c.Message);
+ break;
+ case ChainedInstallerAction.HandleActionStart:
+ InstallActionLog.AppendLine(c.Message);
+ break;
+ case ChainedInstallerAction.ProgressSetRange:
+ InstallActionLog.AppendLine(String.Format("Min: {0} Max: {1}", c.ProgressMin.ToString(), c.ProgressMax.ToString()));
+ break;
+ case ChainedInstallerAction.ProgressSetStep:
+ InstallActionLog.AppendLine(String.Format("Step: {0}", c.ProgressStep.ToString()));
+ break;
+ case ChainedInstallerAction.ProgressSetPosition:
+ InstallActionLog.AppendLine(String.Format("Position: {0}", c.ProgressPosition.ToString()));
+ break;
+ case ChainedInstallerAction.ProgressSingleStep:
+ InstallActionLog.AppendLine("DoStep");
+ break;
+ case ChainedInstallerAction.EndInstallation:
+ InstallActionLog.AppendLine(c.Message);
+ break;
+ case ChainedInstallerAction.LogEvent:
+ InstallActionLog.AppendLine(c.Message);
+ break;
+ case ChainedInstallerAction.TerminateUI:
+ InstallActionLog.AppendLine(c.Message);
+ break;
+ }
DoInstallationProgressChange(c);
-
- return;
- }
-
- private void bgw_ExecuteMSIProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- if (e.ProgressPercentage == 0)
- {
- ChainedInstallerEventArgs c = e.UserState as ChainedInstallerEventArgs;
- switch (c.Action)
- {
- case ChainedInstallerAction.StartInstallation:
- InstallActionLog.AppendLine(c.Message);
- if (CurrentState == ProductState.InstallStarted ||
- CurrentState == ProductState.UpdateStarted ||
- CurrentState == ProductState.RemoveStarted)
- CurrentState += 1;
- break;
- case ChainedInstallerAction.HandleActionData:
- InstallActionLog.AppendLine(c.Message);
- break;
- case ChainedInstallerAction.HandleActionStart:
- InstallActionLog.AppendLine(c.Message);
- break;
- case ChainedInstallerAction.ProgressSetRange:
- InstallActionLog.AppendLine(String.Format("Min: {0} Max: {1}", c.ProgressMin.ToString(), c.ProgressMax.ToString()));
- break;
- case ChainedInstallerAction.ProgressSetStep:
- InstallActionLog.AppendLine(String.Format("Step: {0}", c.ProgressStep.ToString()));
- break;
- case ChainedInstallerAction.ProgressSetPosition:
- InstallActionLog.AppendLine(String.Format("Position: {0}", c.ProgressPosition.ToString()));
- break;
- case ChainedInstallerAction.ProgressSingleStep:
- InstallActionLog.AppendLine("DoStep");
- break;
- case ChainedInstallerAction.EndInstallation:
- InstallActionLog.AppendLine(c.Message);
- break;
- case ChainedInstallerAction.LogEvent:
- InstallActionLog.AppendLine(c.Message);
- break;
- case ChainedInstallerAction.TerminateUI:
- InstallActionLog.AppendLine(c.Message);
- break;
- }
- DoInstallationProgressChange(c);
- }
+ }
}
private string GetInstallPath()
{
- string fullInstallPath = InstallerConfiguration.ProposedInstallationPath;
- if (!fullInstallPath.EndsWith("\\"))
- fullInstallPath += "\\";
- fullInstallPath += TitleWithVersion.Replace('/', ' ');
-
- if (Name == "Connector-odbc" || Name.Contains("mysql-server"))
- {
- fullInstallPath = fullInstallPath.Remove(fullInstallPath.LastIndexOf('.'));
- }
- if (Name == "Workbench")
- {
- fullInstallPath = fullInstallPath.Remove(fullInstallPath.LastIndexOf('.')) + " CE";
- }
+ string fullInstallPath = InstallerConfiguration.ProposedInstallationPath;
+ if (!fullInstallPath.EndsWith("\\"))
fullInstallPath += "\\";
-
- return fullInstallPath;
+ fullInstallPath += TitleWithVersion.Replace('/', ' ');
+
+ if (Name == "Connector-odbc" || Name.Contains("mysql-server"))
+ fullInstallPath = fullInstallPath.Remove(fullInstallPath.LastIndexOf('.'));
+ if (Name == "Workbench")
+ fullInstallPath = fullInstallPath.Remove(fullInstallPath.LastIndexOf('.')) + " CE";
+ fullInstallPath += "\\";
+
+ return fullInstallPath;
}
public void Install()
{
- Package p = GetPackage();
- if (p != null)
- {
- PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Install);
- parameters.CommandLine = String.Format("ALLUSERS=1 INSTALLDIR=\"{0}\" {1}", GetInstallPath(), p.GetCommandLine());
-
- Logger.LogInformation(String.Format("Beginning installation of {0} with options {1}", Name, parameters.CommandLine));
- CurrentState = ProductState.InstallStarted;
- ExecuteMSI(parameters);
- }
-
- return;
+ Package p = GetPackage();
+ if (p != null)
+ {
+ PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Install);
+ parameters.CommandLine = String.Format("ALLUSERS=1 INSTALLDIR=\"{0}\" {1}", GetInstallPath(), p.GetCommandLine());
+
+ Logger.LogInformation(String.Format("Beginning installation of {0} with options {1}", Name, parameters.CommandLine));
+ CurrentState = ProductState.InstallStarted;
+ ExecuteMSI(parameters);
+ }
+
+ return;
}
public void Remove()
{
- Package p = GetPackage();
+ Package p = GetPackage();
- if (p != null)
+ if (p != null)
+ {
+ PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Uninstall);
+ if (p.FoundLocal == false)
{
- PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Uninstall);
- if (p.FoundLocal == false)
- {
- parameters.UseProductCode = true;
- parameters.Path = p.Id;
- }
-
- Logger.LogInformation(String.Format("Beginning removal of {0}.", Name));
- CurrentState = ProductState.RemoveStarted;
- ExecuteMSI(parameters);
+ parameters.UseProductCode = true;
+ parameters.Path = p.Id;
}
- return;
+ Logger.LogInformation(String.Format("Beginning removal of {0}.", Name));
+ CurrentState = ProductState.RemoveStarted;
+ ExecuteMSI(parameters);
+ }
+
+ return;
}
public void Update()
{
- Package p = GetPackage();
- if (p != null && p.FullPath.Length > 0)
- {
- PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Reinstall);
- parameters.CommandLine = p.GetCommandLine();
-
- Logger.LogInformation(String.Format("Beginning update of {0} with options {1}", Name, parameters.CommandLine));
- CurrentState = ProductState.UpdateStarted;
- ExecuteMSI(parameters);
- }
- else
- CurrentState = ProductState.UpdateFailed;
-
- return;
+ Package p = GetPackage();
+ if (p != null && p.FullPath.Length > 0)
+ {
+ PackageParameters parameters = new PackageParameters(p.FullPath, InstallAction.Reinstall);
+ parameters.CommandLine = p.GetCommandLine();
+
+ Logger.LogInformation(String.Format("Beginning update of {0} with options {1}", Name, parameters.CommandLine));
+ CurrentState = ProductState.UpdateStarted;
+ ExecuteMSI(parameters);
+ }
+ else
+ CurrentState = ProductState.UpdateFailed;
+
+ return;
}
public void MakeChanges()
{
- if (Installed && ProposedInstalled)
- {
- Update();
- }
- else if (!Installed && ProposedInstalled)
- {
- Install();
- }
- else if (Installed && !ProposedInstalled)
+ if (Installed && ProposedInstalled)
+ Update();
+ else
+ if (!Installed && ProposedInstalled)
+ Install();
+ else
+ if (Installed && !ProposedInstalled)
Remove();
}
public long GetInstallationSizeEstimate()
{
- return GetPackage().GetInstallationSizeEstimate();
+ return GetPackage().GetInstallationSizeEstimate();
}
private string GetMSIProductInfo(string productId, string propertyName)
{
- int productInfoLength = 512;
- StringBuilder productInfo = new StringBuilder(productInfoLength);
- MSIEnumError status = MsiInterop.MsiGetProductInfo(productId, propertyName, productInfo, ref productInfoLength);
+ int productInfoLength = 512;
+ StringBuilder productInfo = new StringBuilder(productInfoLength);
+ MSIEnumError status = MsiInterop.MsiGetProductInfo(productId, propertyName, productInfo, ref productInfoLength);
- return (status == MSIEnumError.Success) ? productInfo.ToString() : String.Empty;
+ return (status == MSIEnumError.Success) ? productInfo.ToString() : String.Empty;
}
private FileVersionInfo msiVersion;
private bool PopulateRelatePackageFeatures(Package targetPackage)
{
- bool FoundInstalledPackage = false;
-
- // Disable MSI UI.
- InstallUILevel internalUILevel = InstallUILevel.None;
-
- if (msiVersion.FileMajorPart >= 5)
- {
- // Allow to installer to elevate, even in silent mode
- internalUILevel |= InstallUILevel.UACOnly;
- }
- MsiInterop.MsiSetInternalUI(internalUILevel, IntPtr.Zero);
-
- UIntPtr packageHandle = UIntPtr.Zero;
- uint openProductResult = MsiInterop.MsiOpenProduct(targetPackage.Id, ref packageHandle);
- if (openProductResult == 0)
- {
- UIntPtr databaseHandle = MsiInterop.MsiGetActiveDatabase(packageHandle);
- if (databaseHandle != UIntPtr.Zero)
+ bool FoundInstalledPackage = false;
+
+ // Disable MSI UI.
+ InstallUILevel internalUILevel = InstallUILevel.None;
+
+ if (msiVersion.FileMajorPart >= 5)
+ {
+ // Allow to installer to elevate, even in silent mode
+ internalUILevel |= InstallUILevel.UACOnly;
+ }
+ MsiInterop.MsiSetInternalUI(internalUILevel, IntPtr.Zero);
+
+ UIntPtr packageHandle = UIntPtr.Zero;
+ uint openProductResult = MsiInterop.MsiOpenProduct(targetPackage.Id, ref packageHandle);
+ if (openProductResult == 0)
+ {
+ UIntPtr databaseHandle = MsiInterop.MsiGetActiveDatabase(packageHandle);
+ if (databaseHandle != UIntPtr.Zero)
+ {
+ UIntPtr view = UIntPtr.Zero;
+ MSIEnumError queryResult = MsiInterop.MsiDatabaseOpenView(databaseHandle,
+ "SELECT DISTINCT Feature.Feature, Feature.Feature_Parent, Feature.Title, Feature.Description, Feature.Display, FeatureComponents.Feature_ FROM Feature, FeatureComponents WHERE Feature.Feature = FeatureComponents.Feature_ ORDER BY Feature.Feature_Parent",
+ ref view);
+ if (queryResult == MSIEnumError.Success)
+ {
+ uint executeResult = MsiInterop.MsiViewExecute(view, UIntPtr.Zero);
+ if (executeResult == 0)
{
- UIntPtr view = UIntPtr.Zero;
- MSIEnumError queryResult = MsiInterop.MsiDatabaseOpenView(databaseHandle,
- "SELECT DISTINCT Feature.Feature, Feature.Feature_Parent, Feature.Title, Feature.Description, Feature.Display, FeatureComponents.Feature_ FROM Feature, FeatureComponents WHERE Feature.Feature = FeatureComponents.Feature_ ORDER BY Feature.Feature_Parent",
- ref view);
- if (queryResult == MSIEnumError.Success)
+ UIntPtr results = UIntPtr.Zero;
+ MSIEnumError fetchResults = MSIEnumError.NoMoreItems;
+ do
+ {
+ fetchResults = MsiInterop.MsiViewFetch(view, ref results);
+ if (fetchResults == MSIEnumError.Success)
{
- uint executeResult = MsiInterop.MsiViewExecute(view, UIntPtr.Zero);
- if (executeResult == 0)
- {
- UIntPtr results = UIntPtr.Zero;
- MSIEnumError fetchResults = MSIEnumError.NoMoreItems;
- do
- {
- fetchResults = MsiInterop.MsiViewFetch(view, ref results);
- if (fetchResults == MSIEnumError.Success)
- {
- //Create a new ProductFeature and use these values.
- ProductFeature pf = new ProductFeature();
+ // Create a new ProductFeature and use these values.
+ ProductFeature pf = new ProductFeature();
- int valueLength = 256;
- StringBuilder value = new StringBuilder(valueLength);
+ int valueLength = 256;
+ StringBuilder value = new StringBuilder(valueLength);
- uint recordResult = MsiInterop.MsiRecordGetString(results, 1, value, ref valueLength);
- if (recordResult == 0)
- {
- pf.Name = value.ToString();
- }
- value.Remove(0, value.Length);
- valueLength = 256;
-
- recordResult = MsiInterop.MsiRecordGetString(results, 2, value, ref valueLength);
- if (recordResult == 0)
- {
- if (value.Length == 0)
- {
- targetPackage.Features.Add(pf);
- }
- else
- {
- string parentName = value.ToString();
- foreach (ProductFeature parentFeature in targetPackage.Features)
- {
- if (parentFeature.Name == parentName)
- {
- parentFeature.Features.Add(pf);
- break;
- }
- }
- }
- }
- value.Remove(0, value.Length);
- valueLength = 256;
-
- recordResult = MsiInterop.MsiRecordGetString(results, 3, value, ref valueLength);
- if (recordResult == 0)
- {
- pf.Title = value.ToString();
- }
- value.Remove(0, value.Length);
- valueLength = 256;
-
- recordResult = MsiInterop.MsiRecordGetString(results, 4, value, ref valueLength);
- if (recordResult == 0)
- {
- pf.Description = value.ToString();
- }
- value.Remove(0, value.Length);
- valueLength = 256;
-
- recordResult = MsiInterop.MsiRecordGetString(results, 5, value, ref valueLength);
- if (recordResult == 0)
- {
- pf.Display = value.ToString();
- }
- value.Remove(0, value.Length);
- valueLength = 256;
-
- recordResult = MsiInterop.MsiRecordGetString(results, 6, value, ref valueLength);
- if (recordResult == 0)
- {
- pf.HasComponents = value.ToString();
- }
- value.Remove(0, value.Length);
- valueLength = 256;
- }
- MsiInterop.MsiCloseHandle(results);
- }
- while (fetchResults == MSIEnumError.Success);
-
- if (fetchResults != MSIEnumError.NoMoreItems)
- {
- Logger.LogError("Failed to completely fetch features from database.");
- }
- else
- {
- FoundInstalledPackage = true;
- }
- }
+ uint recordResult = MsiInterop.MsiRecordGetString(results, 1, value, ref valueLength);
+ if (recordResult == 0)
+ pf.Name = value.ToString();
+ value.Remove(0, value.Length);
+ valueLength = 256;
+
+ recordResult = MsiInterop.MsiRecordGetString(results, 2, value, ref valueLength);
+ if (recordResult == 0)
+ {
+ if (value.Length == 0)
+ targetPackage.Features.Add(pf);
else
{
- Logger.LogError("Failed to execute custom feature query");
+ string parentName = value.ToString();
+ foreach (ProductFeature parentFeature in targetPackage.Features)
+ {
+ if (parentFeature.Equals(parentName))
+ {
+ parentFeature.Features.Add(pf);
+ break;
+ }
+ }
}
- }
- else
- {
- Logger.LogError("Failed to open custom feature view.");
- }
- MsiInterop.MsiCloseHandle(view);
+ }
+ value.Remove(0, value.Length);
+ valueLength = 256;
+
+ recordResult = MsiInterop.MsiRecordGetString(results, 3, value, ref valueLength);
+ if (recordResult == 0)
+ pf.Title = value.ToString();
+ value.Remove(0, value.Length);
+ valueLength = 256;
+
+ recordResult = MsiInterop.MsiRecordGetString(results, 4, value, ref valueLength);
+ if (recordResult == 0)
+ pf.Description = value.ToString();
+ value.Remove(0, value.Length);
+ valueLength = 256;
+
+ recordResult = MsiInterop.MsiRecordGetString(results, 5, value, ref valueLength);
+ if (recordResult == 0)
+ pf.Display = value.ToString();
+ value.Remove(0, value.Length);
+ valueLength = 256;
+
+ recordResult = MsiInterop.MsiRecordGetString(results, 6, value, ref valueLength);
+ if (recordResult == 0)
+ pf.HasComponents = value.ToString();
+ value.Remove(0, value.Length);
+ valueLength = 256;
+ }
+ MsiInterop.MsiCloseHandle(results);
+ }
+ while (fetchResults == MSIEnumError.Success);
+
+ if (fetchResults != MSIEnumError.NoMoreItems)
+ Logger.LogError("Failed to completely fetch features from database.");
+ else
+ FoundInstalledPackage = true;
}
else
- {
- Logger.LogError("Failed to open database handle.");
- }
- MsiInterop.MsiCloseHandle(databaseHandle);
+ Logger.LogError("Failed to execute custom feature query");
+ }
+ else
+ Logger.LogError("Failed to open custom feature view.");
+ MsiInterop.MsiCloseHandle(view);
}
else
- {
- Logger.LogError("Failed to open pacakge handle.");
- }
- MsiInterop.MsiCloseHandle(packageHandle);
+ Logger.LogError("Failed to open database handle.");
+ MsiInterop.MsiCloseHandle(databaseHandle);
+ }
+ else
+ Logger.LogError("Failed to open pacakge handle.");
+ MsiInterop.MsiCloseHandle(packageHandle);
- return FoundInstalledPackage;
+ return FoundInstalledPackage;
}
private bool FindReleatedInstalledProducts()
@@ -839,8 +809,8 @@
case ProductState.InstallStarted:
case ProductState.InstallInProgress:
- if (bgw.WorkerSupportsCancellation)
- bgw.CancelAsync();
+ if (backgroundWorker.WorkerSupportsCancellation)
+ backgroundWorker.CancelAsync();
break;;
}
}
=== modified file 'WexInstaller/Controls/InstallWizardControl.Designer.cs'
--- a/WexInstaller/Controls/InstallWizardControl.Designer.cs 2011-02-02 16:43:49 +0000
+++ b/WexInstaller/Controls/InstallWizardControl.Designer.cs 2011-03-08 11:10:55 +0000
@@ -28,376 +28,376 @@
/// </summary>
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallWizardControl));
- this.label2 = new System.Windows.Forms.Label();
- this.Back = new System.Windows.Forms.Button();
- this.Cancel = new System.Windows.Forms.Button();
- this.Help = new System.Windows.Forms.Button();
- this.Next = new System.Windows.Forms.Button();
- this.wizardPages = new WexInstaller.HiddenTabsControl();
- this.licenseTab = new System.Windows.Forms.TabPage();
- this.licensePanel = new WexInstaller.LicenseAgreement();
- this.updateTab = new System.Windows.Forms.TabPage();
- this.updatePanel = new WexInstaller.UpdateCheck();
- this.detailedUpdateTab = new System.Windows.Forms.TabPage();
- this.detailedUpdatePanel = new WexInstaller.UpgradeCheck();
- this.typeTab = new System.Windows.Forms.TabPage();
- this.typePanel = new WexInstaller.InstallType();
- this.featuresTab = new System.Windows.Forms.TabPage();
- this.featuresPanel = new WexInstaller.FeatureSelection();
- this.requirementsTab = new System.Windows.Forms.TabPage();
- this.checkRequirementsPanel = new WexInstaller.CheckRequirements();
- this.installProgressTab = new System.Windows.Forms.TabPage();
- this.installProgressPanel = new WexInstaller.InstallProgress();
- this.allConfigTab = new System.Windows.Forms.TabPage();
- this.allConfigPanel = new WexInstaller.AllConfigOverview();
- this.completeTab = new System.Windows.Forms.TabPage();
- this.completePanel = new WexInstaller.InstallationComplete();
- this.installWizardSideBarControl1 = new WexInstaller.InstallWizardSideBarControl();
- this.wizardPages.SuspendLayout();
- this.licenseTab.SuspendLayout();
- this.updateTab.SuspendLayout();
- this.detailedUpdateTab.SuspendLayout();
- this.typeTab.SuspendLayout();
- this.featuresTab.SuspendLayout();
- this.requirementsTab.SuspendLayout();
- this.installProgressTab.SuspendLayout();
- this.allConfigTab.SuspendLayout();
- this.completeTab.SuspendLayout();
- this.SuspendLayout();
- //
- // label2
- //
- this.label2.BackColor = System.Drawing.Color.Black;
- this.label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
- this.label2.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.label2.Location = new System.Drawing.Point(245, 508);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(520, 2);
- this.label2.TabIndex = 22;
- this.label2.Text = "label2";
- //
- // Back
- //
- this.Back.BackColor = System.Drawing.SystemColors.Control;
- this.Back.Enabled = false;
- this.Back.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.Back.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.Back.Location = new System.Drawing.Point(402, 520);
- this.Back.Name = "Back";
- this.Back.Size = new System.Drawing.Size(86, 26);
- this.Back.TabIndex = 1;
- this.Back.Text = "< &Back";
- this.Back.UseVisualStyleBackColor = false;
- this.Back.Click += new System.EventHandler(this.Back_Click);
- //
- // Cancel
- //
- this.Cancel.BackColor = System.Drawing.SystemColors.Control;
- this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
- this.Cancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.Cancel.Location = new System.Drawing.Point(586, 520);
- this.Cancel.Name = "Cancel";
- this.Cancel.Size = new System.Drawing.Size(86, 26);
- this.Cancel.TabIndex = 3;
- this.Cancel.Text = "&Cancel";
- this.Cancel.UseVisualStyleBackColor = false;
- this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
- //
- // Help
- //
- this.Help.BackColor = System.Drawing.SystemColors.Control;
- this.Help.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.Help.Location = new System.Drawing.Point(678, 520);
- this.Help.Name = "Help";
- this.Help.Size = new System.Drawing.Size(86, 26);
- this.Help.TabIndex = 4;
- this.Help.Text = "&Help";
- this.Help.UseVisualStyleBackColor = false;
- this.Help.Click += new System.EventHandler(this.Help_Click);
- //
- // Next
- //
- this.Next.BackColor = System.Drawing.SystemColors.Control;
- this.Next.Enabled = false;
- this.Next.ImeMode = System.Windows.Forms.ImeMode.NoControl;
- this.Next.Location = new System.Drawing.Point(494, 520);
- this.Next.Name = "Next";
- this.Next.Size = new System.Drawing.Size(86, 26);
- this.Next.TabIndex = 2;
- this.Next.Text = global::WexInstaller.Properties.Resources.NextButtonDefaultText;
- this.Next.UseVisualStyleBackColor = false;
- this.Next.Click += new System.EventHandler(this.Next_Click);
- //
- // wizardPages
- //
- this.wizardPages.Controls.Add(this.licenseTab);
- this.wizardPages.Controls.Add(this.updateTab);
- this.wizardPages.Controls.Add(this.detailedUpdateTab);
- this.wizardPages.Controls.Add(this.typeTab);
- this.wizardPages.Controls.Add(this.featuresTab);
- this.wizardPages.Controls.Add(this.requirementsTab);
- this.wizardPages.Controls.Add(this.installProgressTab);
- this.wizardPages.Controls.Add(this.allConfigTab);
- this.wizardPages.Controls.Add(this.completeTab);
- this.wizardPages.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.wizardPages.Location = new System.Drawing.Point(226, 3);
- this.wizardPages.Multiline = true;
- this.wizardPages.Name = "wizardPages";
- this.wizardPages.SelectedIndex = 0;
- this.wizardPages.Size = new System.Drawing.Size(555, 505);
- this.wizardPages.TabIndex = 24;
- this.wizardPages.TabStop = false;
- this.wizardPages.SelectedIndexChanged += new System.EventHandler(this.wizardPages_SelectedIndexChanged);
- this.wizardPages.Deselected += new System.Windows.Forms.TabControlEventHandler(this.wizardPages_Deselected);
- //
- // licenseTab
- //
- this.licenseTab.BackColor = System.Drawing.Color.White;
- this.licenseTab.Controls.Add(this.licensePanel);
- this.licenseTab.Location = new System.Drawing.Point(4, 40);
- this.licenseTab.Name = "licenseTab";
- this.licenseTab.Padding = new System.Windows.Forms.Padding(3);
- this.licenseTab.Size = new System.Drawing.Size(547, 461);
- this.licenseTab.TabIndex = 0;
- this.licenseTab.Text = "License Information";
- //
- // licensePanel
- //
- this.licensePanel.BackColor = System.Drawing.SystemColors.Window;
- this.licensePanel.Caption = "License Agreement";
- this.licensePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.licensePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.licensePanel.Location = new System.Drawing.Point(3, 3);
- this.licensePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.licensePanel.Name = "licensePanel";
- this.licensePanel.Size = new System.Drawing.Size(541, 455);
- this.licensePanel.TabIndex = 0;
- //
- // updateTab
- //
- this.updateTab.BackColor = System.Drawing.Color.White;
- this.updateTab.Controls.Add(this.updatePanel);
- this.updateTab.Location = new System.Drawing.Point(4, 40);
- this.updateTab.Name = "updateTab";
- this.updateTab.Padding = new System.Windows.Forms.Padding(3);
- this.updateTab.Size = new System.Drawing.Size(547, 461);
- this.updateTab.TabIndex = 1;
- this.updateTab.Text = "Find latest products";
- //
- // updatePanel
- //
- this.updatePanel.BackColor = System.Drawing.SystemColors.Window;
- this.updatePanel.Caption = "Find latest products";
- this.updatePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.updatePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.updatePanel.Location = new System.Drawing.Point(3, 3);
- this.updatePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.updatePanel.Name = "updatePanel";
- this.updatePanel.Size = new System.Drawing.Size(541, 455);
- this.updatePanel.TabIndex = 1;
- //
- // detailedUpdateTab
- //
- this.detailedUpdateTab.BackColor = System.Drawing.Color.White;
- this.detailedUpdateTab.Controls.Add(this.detailedUpdatePanel);
- this.detailedUpdateTab.Location = new System.Drawing.Point(4, 40);
- this.detailedUpdateTab.Name = "detailedUpdateTab";
- this.detailedUpdateTab.Padding = new System.Windows.Forms.Padding(3);
- this.detailedUpdateTab.Size = new System.Drawing.Size(547, 461);
- this.detailedUpdateTab.TabIndex = 2;
- this.detailedUpdateTab.Text = "Apply updates";
- //
- // detailedUpdatePanel
- //
- this.detailedUpdatePanel.BackColor = System.Drawing.SystemColors.Window;
- this.detailedUpdatePanel.Caption = "Apply Updates";
- this.detailedUpdatePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.detailedUpdatePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.detailedUpdatePanel.Location = new System.Drawing.Point(3, 3);
- this.detailedUpdatePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.detailedUpdatePanel.Name = "detailedUpdatePanel";
- this.detailedUpdatePanel.Size = new System.Drawing.Size(541, 455);
- this.detailedUpdatePanel.TabIndex = 2;
- //
- // typeTab
- //
- this.typeTab.BackColor = System.Drawing.Color.White;
- this.typeTab.Controls.Add(this.typePanel);
- this.typeTab.Location = new System.Drawing.Point(4, 40);
- this.typeTab.Name = "typeTab";
- this.typeTab.Padding = new System.Windows.Forms.Padding(3);
- this.typeTab.Size = new System.Drawing.Size(547, 461);
- this.typeTab.TabIndex = 3;
- this.typeTab.Text = "Setup Type";
- //
- // typePanel
- //
- this.typePanel.BackColor = System.Drawing.SystemColors.Window;
- this.typePanel.Caption = "Choosing a Setup Type";
- this.typePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.typePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.typePanel.Location = new System.Drawing.Point(3, 3);
- this.typePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.typePanel.Name = "typePanel";
- this.typePanel.Size = new System.Drawing.Size(541, 455);
- this.typePanel.TabIndex = 3;
- //
- // featuresTab
- //
- this.featuresTab.BackColor = System.Drawing.Color.White;
- this.featuresTab.Controls.Add(this.featuresPanel);
- this.featuresTab.Location = new System.Drawing.Point(4, 40);
- this.featuresTab.Name = "featuresTab";
- this.featuresTab.Padding = new System.Windows.Forms.Padding(3);
- this.featuresTab.Size = new System.Drawing.Size(547, 461);
- this.featuresTab.TabIndex = 4;
- this.featuresTab.Text = "Feature Selection";
- //
- // featuresPanel
- //
- this.featuresPanel.BackColor = System.Drawing.SystemColors.Window;
- this.featuresPanel.Caption = "Feature Selection";
- this.featuresPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.featuresPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.featuresPanel.Location = new System.Drawing.Point(3, 3);
- this.featuresPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.featuresPanel.Name = "featuresPanel";
- this.featuresPanel.Size = new System.Drawing.Size(541, 455);
- this.featuresPanel.TabIndex = 4;
- //
- // requirementsTab
- //
- this.requirementsTab.BackColor = System.Drawing.Color.White;
- this.requirementsTab.Controls.Add(this.checkRequirementsPanel);
- this.requirementsTab.Location = new System.Drawing.Point(4, 40);
- this.requirementsTab.Name = "requirementsTab";
- this.requirementsTab.Padding = new System.Windows.Forms.Padding(3);
- this.requirementsTab.Size = new System.Drawing.Size(547, 461);
- this.requirementsTab.TabIndex = 5;
- this.requirementsTab.Text = "Check Requirements";
- //
- // checkRequirementsPanel
- //
- this.checkRequirementsPanel.BackColor = System.Drawing.SystemColors.Window;
- this.checkRequirementsPanel.Caption = "Check Requirements";
- this.checkRequirementsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.checkRequirementsPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.checkRequirementsPanel.Location = new System.Drawing.Point(3, 3);
- this.checkRequirementsPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.checkRequirementsPanel.Name = "checkRequirementsPanel";
- this.checkRequirementsPanel.Size = new System.Drawing.Size(186, 14);
- this.checkRequirementsPanel.TabIndex = 5;
- //
- // installProgressTab
- //
- this.installProgressTab.BackColor = System.Drawing.Color.White;
- this.installProgressTab.Controls.Add(this.installProgressPanel);
- this.installProgressTab.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.installProgressTab.Location = new System.Drawing.Point(4, 40);
- this.installProgressTab.Name = "installProgressTab";
- this.installProgressTab.Padding = new System.Windows.Forms.Padding(3);
- this.installProgressTab.Size = new System.Drawing.Size(547, 461);
- this.installProgressTab.TabIndex = 6;
- this.installProgressTab.Text = "Installation";
- //
- // installProgressPanel
- //
- this.installProgressPanel.BackColor = System.Drawing.SystemColors.Window;
- this.installProgressPanel.Caption = "Installation Progress";
- this.installProgressPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.installProgressPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.installProgressPanel.Location = new System.Drawing.Point(3, 3);
- this.installProgressPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.installProgressPanel.Name = "installProgressPanel";
- this.installProgressPanel.Size = new System.Drawing.Size(186, 14);
- this.installProgressPanel.TabIndex = 6;
- //
- // allConfigTab
- //
- this.allConfigTab.BackColor = System.Drawing.Color.White;
- this.allConfigTab.Controls.Add(this.allConfigPanel);
- this.allConfigTab.Location = new System.Drawing.Point(4, 40);
- this.allConfigTab.Name = "allConfigTab";
- this.allConfigTab.Size = new System.Drawing.Size(547, 461);
- this.allConfigTab.TabIndex = 7;
- this.allConfigTab.Text = "Configuration";
- this.allConfigTab.UseVisualStyleBackColor = true;
- //
- // allConfigPanel
- //
- this.allConfigPanel.BackColor = System.Drawing.SystemColors.Window;
- this.allConfigPanel.Caption = "Configuration Overview";
- this.allConfigPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.allConfigPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.allConfigPanel.Location = new System.Drawing.Point(0, 0);
- this.allConfigPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
- this.allConfigPanel.Name = "allConfigPanel";
- this.allConfigPanel.Size = new System.Drawing.Size(547, 461);
- this.allConfigPanel.TabIndex = 7;
- //
- // completeTab
- //
- this.completeTab.BackColor = System.Drawing.Color.White;
- this.completeTab.Controls.Add(this.completePanel);
- this.completeTab.Location = new System.Drawing.Point(4, 40);
- this.completeTab.Name = "completeTab";
- this.completeTab.Padding = new System.Windows.Forms.Padding(3);
- this.completeTab.Size = new System.Drawing.Size(547, 461);
- this.completeTab.TabIndex = 8;
- this.completeTab.Text = "Complete";
- //
- // completePanel
- //
- this.completePanel.BackColor = System.Drawing.SystemColors.Window;
- this.completePanel.Caption = "Installation Complete";
- this.completePanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.completePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.completePanel.Location = new System.Drawing.Point(3, 3);
- this.completePanel.Name = "completePanel";
- this.completePanel.Size = new System.Drawing.Size(186, 0);
- this.completePanel.TabIndex = 8;
- //
- // installWizardSideBarControl1
- //
- this.installWizardSideBarControl1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("installWizardSideBarControl1.BackgroundImage")));
- this.installWizardSideBarControl1.Dock = System.Windows.Forms.DockStyle.Left;
- this.installWizardSideBarControl1.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.installWizardSideBarControl1.HiliteBackground = global::WexInstaller.Properties.Resources.WizardSelection;
- this.installWizardSideBarControl1.Location = new System.Drawing.Point(0, 0);
- this.installWizardSideBarControl1.Name = "installWizardSideBarControl1";
- this.installWizardSideBarControl1.Size = new System.Drawing.Size(220, 562);
- this.installWizardSideBarControl1.TabIndex = 0;
- this.installWizardSideBarControl1.TabTop = 134;
- //
- // InstallWizardControl
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BackColor = System.Drawing.Color.White;
- this.Controls.Add(this.wizardPages);
- this.Controls.Add(this.label2);
- this.Controls.Add(this.Back);
- this.Controls.Add(this.Cancel);
- this.Controls.Add(this.Help);
- this.Controls.Add(this.installWizardSideBarControl1);
- this.Controls.Add(this.Next);
- this.DoubleBuffered = true;
- this.Font = new System.Drawing.Font("Tahoma", 8.25F);
- this.Name = "InstallWizardControl";
- this.Size = new System.Drawing.Size(784, 562);
- this.wizardPages.ResumeLayout(false);
- this.licenseTab.ResumeLayout(false);
- this.updateTab.ResumeLayout(false);
- this.detailedUpdateTab.ResumeLayout(false);
- this.typeTab.ResumeLayout(false);
- this.featuresTab.ResumeLayout(false);
- this.requirementsTab.ResumeLayout(false);
- this.installProgressTab.ResumeLayout(false);
- this.allConfigTab.ResumeLayout(false);
- this.completeTab.ResumeLayout(false);
- this.ResumeLayout(false);
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallWizardControl));
+ this.label2 = new System.Windows.Forms.Label();
+ this.Back = new System.Windows.Forms.Button();
+ this.Cancel = new System.Windows.Forms.Button();
+ this.Help = new System.Windows.Forms.Button();
+ this.Next = new System.Windows.Forms.Button();
+ this.wizardPages = new WexInstaller.HiddenTabsControl();
+ this.licenseTab = new System.Windows.Forms.TabPage();
+ this.licensePanel = new WexInstaller.LicenseAgreement();
+ this.updateTab = new System.Windows.Forms.TabPage();
+ this.updatePanel = new WexInstaller.UpdateCheck();
+ this.detailedUpdateTab = new System.Windows.Forms.TabPage();
+ this.detailedUpdatePanel = new WexInstaller.UpgradeCheck();
+ this.typeTab = new System.Windows.Forms.TabPage();
+ this.typePanel = new WexInstaller.InstallType();
+ this.featuresTab = new System.Windows.Forms.TabPage();
+ this.featuresPanel = new WexInstaller.FeatureSelection();
+ this.requirementsTab = new System.Windows.Forms.TabPage();
+ this.checkRequirementsPanel = new WexInstaller.CheckRequirements();
+ this.installProgressTab = new System.Windows.Forms.TabPage();
+ this.installProgressPanel = new WexInstaller.InstallProgress();
+ this.allConfigTab = new System.Windows.Forms.TabPage();
+ this.allConfigPanel = new WexInstaller.AllConfigOverview();
+ this.completeTab = new System.Windows.Forms.TabPage();
+ this.completePanel = new WexInstaller.InstallationComplete();
+ this.installWizardSideBarControl1 = new WexInstaller.InstallWizardSideBarControl();
+ this.wizardPages.SuspendLayout();
+ this.licenseTab.SuspendLayout();
+ this.updateTab.SuspendLayout();
+ this.detailedUpdateTab.SuspendLayout();
+ this.typeTab.SuspendLayout();
+ this.featuresTab.SuspendLayout();
+ this.requirementsTab.SuspendLayout();
+ this.installProgressTab.SuspendLayout();
+ this.allConfigTab.SuspendLayout();
+ this.completeTab.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // label2
+ //
+ this.label2.BackColor = System.Drawing.Color.Black;
+ this.label2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+ this.label2.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.label2.Location = new System.Drawing.Point(245, 508);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(520, 2);
+ this.label2.TabIndex = 22;
+ this.label2.Text = "label2";
+ //
+ // Back
+ //
+ this.Back.BackColor = System.Drawing.SystemColors.Control;
+ this.Back.Enabled = false;
+ this.Back.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.Back.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.Back.Location = new System.Drawing.Point(402, 520);
+ this.Back.Name = "Back";
+ this.Back.Size = new System.Drawing.Size(86, 26);
+ this.Back.TabIndex = 1;
+ this.Back.Text = "< &Back";
+ this.Back.UseVisualStyleBackColor = false;
+ this.Back.Click += new System.EventHandler(this.Back_Click);
+ //
+ // Cancel
+ //
+ this.Cancel.BackColor = System.Drawing.SystemColors.Control;
+ this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.Cancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.Cancel.Location = new System.Drawing.Point(586, 520);
+ this.Cancel.Name = "Cancel";
+ this.Cancel.Size = new System.Drawing.Size(86, 26);
+ this.Cancel.TabIndex = 3;
+ this.Cancel.Text = "&Cancel";
+ this.Cancel.UseVisualStyleBackColor = false;
+ this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
+ //
+ // Help
+ //
+ this.Help.BackColor = System.Drawing.SystemColors.Control;
+ this.Help.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.Help.Location = new System.Drawing.Point(678, 520);
+ this.Help.Name = "Help";
+ this.Help.Size = new System.Drawing.Size(86, 26);
+ this.Help.TabIndex = 4;
+ this.Help.Text = "&Help";
+ this.Help.UseVisualStyleBackColor = false;
+ this.Help.Click += new System.EventHandler(this.Help_Click);
+ //
+ // Next
+ //
+ this.Next.BackColor = System.Drawing.SystemColors.Control;
+ this.Next.Enabled = false;
+ this.Next.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.Next.Location = new System.Drawing.Point(494, 520);
+ this.Next.Name = "Next";
+ this.Next.Size = new System.Drawing.Size(86, 26);
+ this.Next.TabIndex = 2;
+ this.Next.Text = global::WexInstaller.Properties.Resources.NextButtonDefaultText;
+ this.Next.UseVisualStyleBackColor = false;
+ this.Next.Click += new System.EventHandler(this.Next_Click);
+ //
+ // wizardPages
+ //
+ this.wizardPages.Controls.Add(this.licenseTab);
+ this.wizardPages.Controls.Add(this.updateTab);
+ this.wizardPages.Controls.Add(this.detailedUpdateTab);
+ this.wizardPages.Controls.Add(this.typeTab);
+ this.wizardPages.Controls.Add(this.featuresTab);
+ this.wizardPages.Controls.Add(this.requirementsTab);
+ this.wizardPages.Controls.Add(this.installProgressTab);
+ this.wizardPages.Controls.Add(this.allConfigTab);
+ this.wizardPages.Controls.Add(this.completeTab);
+ this.wizardPages.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.wizardPages.Location = new System.Drawing.Point(226, 3);
+ this.wizardPages.Multiline = true;
+ this.wizardPages.Name = "wizardPages";
+ this.wizardPages.SelectedIndex = 0;
+ this.wizardPages.Size = new System.Drawing.Size(555, 505);
+ this.wizardPages.TabIndex = 24;
+ this.wizardPages.TabStop = false;
+ this.wizardPages.SelectedIndexChanged += new System.EventHandler(this.wizardPages_SelectedIndexChanged);
+ this.wizardPages.Deselected += new System.Windows.Forms.TabControlEventHandler(this.wizardPages_Deselected);
+ //
+ // licenseTab
+ //
+ this.licenseTab.BackColor = System.Drawing.Color.White;
+ this.licenseTab.Controls.Add(this.licensePanel);
+ this.licenseTab.Location = new System.Drawing.Point(4, 40);
+ this.licenseTab.Name = "licenseTab";
+ this.licenseTab.Padding = new System.Windows.Forms.Padding(3);
+ this.licenseTab.Size = new System.Drawing.Size(547, 461);
+ this.licenseTab.TabIndex = 0;
+ this.licenseTab.Text = "License Information";
+ //
+ // licensePanel
+ //
+ this.licensePanel.BackColor = System.Drawing.SystemColors.Window;
+ this.licensePanel.Caption = "License Agreement";
+ this.licensePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.licensePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.licensePanel.Location = new System.Drawing.Point(3, 3);
+ this.licensePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.licensePanel.Name = "licensePanel";
+ this.licensePanel.Size = new System.Drawing.Size(541, 455);
+ this.licensePanel.TabIndex = 0;
+ //
+ // updateTab
+ //
+ this.updateTab.BackColor = System.Drawing.Color.White;
+ this.updateTab.Controls.Add(this.updatePanel);
+ this.updateTab.Location = new System.Drawing.Point(4, 40);
+ this.updateTab.Name = "updateTab";
+ this.updateTab.Padding = new System.Windows.Forms.Padding(3);
+ this.updateTab.Size = new System.Drawing.Size(547, 461);
+ this.updateTab.TabIndex = 1;
+ this.updateTab.Text = "Find latest products";
+ //
+ // updatePanel
+ //
+ this.updatePanel.BackColor = System.Drawing.SystemColors.Window;
+ this.updatePanel.Caption = "Find latest products";
+ this.updatePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.updatePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.updatePanel.Location = new System.Drawing.Point(3, 3);
+ this.updatePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.updatePanel.Name = "updatePanel";
+ this.updatePanel.Size = new System.Drawing.Size(541, 455);
+ this.updatePanel.TabIndex = 1;
+ //
+ // detailedUpdateTab
+ //
+ this.detailedUpdateTab.BackColor = System.Drawing.Color.White;
+ this.detailedUpdateTab.Controls.Add(this.detailedUpdatePanel);
+ this.detailedUpdateTab.Location = new System.Drawing.Point(4, 40);
+ this.detailedUpdateTab.Name = "detailedUpdateTab";
+ this.detailedUpdateTab.Padding = new System.Windows.Forms.Padding(3);
+ this.detailedUpdateTab.Size = new System.Drawing.Size(547, 461);
+ this.detailedUpdateTab.TabIndex = 2;
+ this.detailedUpdateTab.Text = "Apply updates";
+ //
+ // detailedUpdatePanel
+ //
+ this.detailedUpdatePanel.BackColor = System.Drawing.SystemColors.Window;
+ this.detailedUpdatePanel.Caption = "Apply Updates";
+ this.detailedUpdatePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.detailedUpdatePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.detailedUpdatePanel.Location = new System.Drawing.Point(3, 3);
+ this.detailedUpdatePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.detailedUpdatePanel.Name = "detailedUpdatePanel";
+ this.detailedUpdatePanel.Size = new System.Drawing.Size(541, 455);
+ this.detailedUpdatePanel.TabIndex = 2;
+ //
+ // typeTab
+ //
+ this.typeTab.BackColor = System.Drawing.Color.White;
+ this.typeTab.Controls.Add(this.typePanel);
+ this.typeTab.Location = new System.Drawing.Point(4, 40);
+ this.typeTab.Name = "typeTab";
+ this.typeTab.Padding = new System.Windows.Forms.Padding(3);
+ this.typeTab.Size = new System.Drawing.Size(547, 461);
+ this.typeTab.TabIndex = 3;
+ this.typeTab.Text = "Setup Type";
+ //
+ // typePanel
+ //
+ this.typePanel.BackColor = System.Drawing.SystemColors.Window;
+ this.typePanel.Caption = "Choosing a Setup Type";
+ this.typePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.typePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.typePanel.Location = new System.Drawing.Point(3, 3);
+ this.typePanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.typePanel.Name = "typePanel";
+ this.typePanel.Size = new System.Drawing.Size(541, 455);
+ this.typePanel.TabIndex = 3;
+ //
+ // featuresTab
+ //
+ this.featuresTab.BackColor = System.Drawing.Color.White;
+ this.featuresTab.Controls.Add(this.featuresPanel);
+ this.featuresTab.Location = new System.Drawing.Point(4, 40);
+ this.featuresTab.Name = "featuresTab";
+ this.featuresTab.Padding = new System.Windows.Forms.Padding(3);
+ this.featuresTab.Size = new System.Drawing.Size(547, 461);
+ this.featuresTab.TabIndex = 4;
+ this.featuresTab.Text = "Feature Selection";
+ //
+ // featuresPanel
+ //
+ this.featuresPanel.BackColor = System.Drawing.SystemColors.Window;
+ this.featuresPanel.Caption = "Feature Selection";
+ this.featuresPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.featuresPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.featuresPanel.Location = new System.Drawing.Point(3, 3);
+ this.featuresPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.featuresPanel.Name = "featuresPanel";
+ this.featuresPanel.Size = new System.Drawing.Size(541, 455);
+ this.featuresPanel.TabIndex = 4;
+ //
+ // requirementsTab
+ //
+ this.requirementsTab.BackColor = System.Drawing.Color.White;
+ this.requirementsTab.Controls.Add(this.checkRequirementsPanel);
+ this.requirementsTab.Location = new System.Drawing.Point(4, 40);
+ this.requirementsTab.Name = "requirementsTab";
+ this.requirementsTab.Padding = new System.Windows.Forms.Padding(3);
+ this.requirementsTab.Size = new System.Drawing.Size(547, 461);
+ this.requirementsTab.TabIndex = 5;
+ this.requirementsTab.Text = "Check Requirements";
+ //
+ // checkRequirementsPanel
+ //
+ this.checkRequirementsPanel.BackColor = System.Drawing.SystemColors.Window;
+ this.checkRequirementsPanel.Caption = "Check Requirements";
+ this.checkRequirementsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.checkRequirementsPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.checkRequirementsPanel.Location = new System.Drawing.Point(3, 3);
+ this.checkRequirementsPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.checkRequirementsPanel.Name = "checkRequirementsPanel";
+ this.checkRequirementsPanel.Size = new System.Drawing.Size(541, 455);
+ this.checkRequirementsPanel.TabIndex = 5;
+ //
+ // installProgressTab
+ //
+ this.installProgressTab.BackColor = System.Drawing.Color.White;
+ this.installProgressTab.Controls.Add(this.installProgressPanel);
+ this.installProgressTab.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.installProgressTab.Location = new System.Drawing.Point(4, 40);
+ this.installProgressTab.Name = "installProgressTab";
+ this.installProgressTab.Padding = new System.Windows.Forms.Padding(3);
+ this.installProgressTab.Size = new System.Drawing.Size(547, 461);
+ this.installProgressTab.TabIndex = 6;
+ this.installProgressTab.Text = "Installation";
+ //
+ // installProgressPanel
+ //
+ this.installProgressPanel.BackColor = System.Drawing.SystemColors.Window;
+ this.installProgressPanel.Caption = "Installation Progress";
+ this.installProgressPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.installProgressPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.installProgressPanel.Location = new System.Drawing.Point(3, 3);
+ this.installProgressPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.installProgressPanel.Name = "installProgressPanel";
+ this.installProgressPanel.Size = new System.Drawing.Size(541, 455);
+ this.installProgressPanel.TabIndex = 6;
+ //
+ // allConfigTab
+ //
+ this.allConfigTab.BackColor = System.Drawing.Color.White;
+ this.allConfigTab.Controls.Add(this.allConfigPanel);
+ this.allConfigTab.Location = new System.Drawing.Point(4, 40);
+ this.allConfigTab.Name = "allConfigTab";
+ this.allConfigTab.Size = new System.Drawing.Size(547, 461);
+ this.allConfigTab.TabIndex = 7;
+ this.allConfigTab.Text = "Configuration";
+ this.allConfigTab.UseVisualStyleBackColor = true;
+ //
+ // allConfigPanel
+ //
+ this.allConfigPanel.BackColor = System.Drawing.SystemColors.Window;
+ this.allConfigPanel.Caption = "Configuration Overview";
+ this.allConfigPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.allConfigPanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.allConfigPanel.Location = new System.Drawing.Point(0, 0);
+ this.allConfigPanel.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+ this.allConfigPanel.Name = "allConfigPanel";
+ this.allConfigPanel.Size = new System.Drawing.Size(547, 461);
+ this.allConfigPanel.TabIndex = 7;
+ //
+ // completeTab
+ //
+ this.completeTab.BackColor = System.Drawing.Color.White;
+ this.completeTab.Controls.Add(this.completePanel);
+ this.completeTab.Location = new System.Drawing.Point(4, 40);
+ this.completeTab.Name = "completeTab";
+ this.completeTab.Padding = new System.Windows.Forms.Padding(3);
+ this.completeTab.Size = new System.Drawing.Size(547, 461);
+ this.completeTab.TabIndex = 8;
+ this.completeTab.Text = "Complete";
+ //
+ // completePanel
+ //
+ this.completePanel.BackColor = System.Drawing.SystemColors.Window;
+ this.completePanel.Caption = "Installation Complete";
+ this.completePanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.completePanel.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.completePanel.Location = new System.Drawing.Point(3, 3);
+ this.completePanel.Name = "completePanel";
+ this.completePanel.Size = new System.Drawing.Size(541, 455);
+ this.completePanel.TabIndex = 8;
+ //
+ // installWizardSideBarControl1
+ //
+ this.installWizardSideBarControl1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("installWizardSideBarControl1.BackgroundImage")));
+ this.installWizardSideBarControl1.Dock = System.Windows.Forms.DockStyle.Left;
+ this.installWizardSideBarControl1.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.installWizardSideBarControl1.HiliteBackground = global::WexInstaller.Properties.Resources.WizardSelection;
+ this.installWizardSideBarControl1.Location = new System.Drawing.Point(0, 0);
+ this.installWizardSideBarControl1.Name = "installWizardSideBarControl1";
+ this.installWizardSideBarControl1.Size = new System.Drawing.Size(220, 562);
+ this.installWizardSideBarControl1.TabIndex = 0;
+ this.installWizardSideBarControl1.TabTop = 134;
+ //
+ // InstallWizardControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.Controls.Add(this.wizardPages);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.Back);
+ this.Controls.Add(this.Cancel);
+ this.Controls.Add(this.Help);
+ this.Controls.Add(this.installWizardSideBarControl1);
+ this.Controls.Add(this.Next);
+ this.DoubleBuffered = true;
+ this.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ this.Name = "InstallWizardControl";
+ this.Size = new System.Drawing.Size(784, 562);
+ this.wizardPages.ResumeLayout(false);
+ this.licenseTab.ResumeLayout(false);
+ this.updateTab.ResumeLayout(false);
+ this.detailedUpdateTab.ResumeLayout(false);
+ this.typeTab.ResumeLayout(false);
+ this.featuresTab.ResumeLayout(false);
+ this.requirementsTab.ResumeLayout(false);
+ this.installProgressTab.ResumeLayout(false);
+ this.allConfigTab.ResumeLayout(false);
+ this.completeTab.ResumeLayout(false);
+ this.ResumeLayout(false);
}
=== modified file 'WexInstaller/Controls/InstallWizardControl.cs'
--- a/WexInstaller/Controls/InstallWizardControl.cs 2011-03-07 12:55:25 +0000
+++ b/WexInstaller/Controls/InstallWizardControl.cs 2011-03-08 11:10:55 +0000
@@ -268,5 +268,6 @@
panel.Activate();
}
}
+
}
}
=== modified file 'WexInstaller/Controls/InstallWizardControl.resx'
--- a/WexInstaller/Controls/InstallWizardControl.resx 2011-01-23 17:51:26 +0000
+++ b/WexInstaller/Controls/InstallWizardControl.resx 2011-03-08 11:10:55 +0000
@@ -121,687 +121,687 @@
<data name="installWizardSideBarControl1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
- 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
+ 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
</value>
</data>
</root>
\ No newline at end of file
=== modified file 'WexInstaller/InstallWizard/DetailedUpdateCheck.cs'
--- a/WexInstaller/InstallWizard/DetailedUpdateCheck.cs 2011-02-25 15:04:43 +0000
+++ b/WexInstaller/InstallWizard/DetailedUpdateCheck.cs 2011-03-08 11:10:55 +0000
@@ -1,253 +1,254 @@
using System;
-using System.Collections.Generic;
using System.ComponentModel;
+using System.Diagnostics;
using System.Drawing;
-using System.Text;
+using System.IO;
+using System.Reflection;
using System.Windows.Forms;
+
+using WexInstaller.Core;
using WexInstaller.Properties;
-using WexInstaller.Core;
-using System.Net;
-using System.Reflection;
-using System.IO;
-using System.Diagnostics;
namespace WexInstaller
{
- public partial class UpgradeCheck : InstallerPanel
- {
- private bool nextOk;
- private bool executed;
-
- public UpgradeCheck()
- {
- InitializeComponent();
- Caption = "Apply Updates";
- nextOk = true;
- executed = false;
- }
-
- public override bool NextOk()
- {
- return nextOk;
- }
-
- public override bool BackOk()
- {
- return true;
- }
-
- public override bool Next()
- {
- if (!executed)
- {
- Logger.LogInformation("Begin Product manifest update.");
-
- executed = true;
- NextButton.Text = Properties.Resources.NextButtonDefaultText;
- NextButton.Enabled = false;
- NextButton.Refresh();
- nextOk = false;
- SignalChange();
-
- currentActionIcon.Visible = true;
- connectionEmptyIcon.Visible = false;
-
- ProductManager.DownloadManifestCompleted += new DownloadManifestCompleteHandler(ProductManager_DownloadManifestCompleted);
- if (!ProductManager.DownloadManifest())
- {
- Logger.LogError("Unable to begin download.");
-
- currentActionIcon.Visible = false;
-
- currentActionFailedIcon.Visible = true;
- currentActionFailedIcon.BringToFront();
- }
- else
- {
- connectionSuccessIcon.Visible = true;
- Point p = currentActionIcon.Location;
- p.Y += 28;
- currentActionIcon.Location = p;
- currentActionFailedIcon.Location = p;
- fetchEmptyIcon.Visible = false;
- }
-
- return false;
- }
-
- foreach (ProductCategory pc in ProductManager.ProductCategories)
- {
- foreach (Product p in pc.Products)
- {
- p.ProposedInstalled = false;
- }
- }
-
- foreach (ListViewItem li in productList.CheckedItems)
- {
- Product p = li.Tag as Product;
- p.ProposedInstalled = true;
- }
-
- return base.Next();
- }
-
- public override bool Back()
- {
- ProductManager.CancelDownload();
- if (!executed)
- {
- NextButton.Text = Properties.Resources.NextButtonDefaultText;
- NextButton.Refresh();
- }
-
- return base.Back();
- }
-
- public override bool Cancel()
- {
- Logger.LogInformation("Product Manifest Update Canceled.");
-
- ProductManager.CancelDownload();
- nextOk = false;
- NextButton.Enabled = false;
- NextButton.Refresh();
- return base.Cancel();
- }
-
- public override void Activate()
- {
- executed = false;
+ public partial class UpgradeCheck : InstallerPanel
+ {
+ private bool nextOk;
+ private bool executed;
+
+ public UpgradeCheck()
+ {
+ InitializeComponent();
+ Caption = "Apply Updates";
+ nextOk = true;
+ executed = false;
+ }
+
+ public override bool NextOk()
+ {
+ return nextOk;
+ }
+
+ public override bool BackOk()
+ {
+ return true;
+ }
+
+ public override bool Next()
+ {
+ if (!executed)
+ {
+ Logger.LogInformation("Begin Product manifest update.");
+
+ executed = true;
+ NextButton.Text = Properties.Resources.NextButtonDefaultText;
+ NextButton.Enabled = false;
+ NextButton.Refresh();
+ nextOk = false;
+ SignalChange();
+
+ currentActionIcon.Visible = true;
+ connectionEmptyIcon.Visible = false;
+
+ ProductManager.DownloadManifestCompleted += new DownloadManifestCompleteHandler(ProductManager_DownloadManifestCompleted);
+ if (!ProductManager.DownloadManifest())
+ {
+ Logger.LogError("Unable to begin download.");
+
+ currentActionIcon.Visible = false;
+
+ currentActionFailedIcon.Visible = true;
+ currentActionFailedIcon.BringToFront();
+ }
+ else
+ {
+ connectionSuccessIcon.Visible = true;
+ Point p = currentActionIcon.Location;
+ p.Y += 28;
+ currentActionIcon.Location = p;
+ currentActionFailedIcon.Location = p;
+ fetchEmptyIcon.Visible = false;
+ }
+
+ return false;
+ }
+
+ foreach (ProductCategory pc in ProductManager.ProductCategories)
+ foreach (Product p in pc.Products)
+ p.ProposedInstalled = false;
+
+ foreach (ListViewItem li in productList.CheckedItems)
+ {
+ Product p = li.Tag as Product;
+ p.ProposedInstalled = true;
+ }
+
+ return base.Next();
+ }
+
+ public override bool Back()
+ {
+ ProductManager.CancelDownload();
+ if (!executed)
+ {
+ NextButton.Text = Properties.Resources.NextButtonDefaultText;
+ NextButton.Refresh();
+ }
+
+ return base.Back();
+ }
+
+ public override bool Cancel()
+ {
+ Logger.LogInformation("Product Manifest Update Canceled.");
+
+ ProductManager.CancelDownload();
+ nextOk = false;
+ NextButton.Enabled = false;
+ NextButton.Refresh();
+ return base.Cancel();
+ }
+
+ public override void Activate()
+ {
+ executed = false;
- //Re-set the icon locations.
- Point p = connectionEmptyIcon.Location;
- p.X = currentActionIcon.Location.X;
- currentActionIcon.Location = p;
- currentActionFailedIcon.Location = p;
- currentActionIcon.Visible = false;
- currentActionFailedIcon.Visible = false;
-
- connectionSuccessIcon.Visible = false;
- connectionEmptyIcon.BringToFront();
- connectionEmptyIcon.Visible = true;
-
- fetchSuccessIcon.Visible = false;
- fetchEmptyIcon.BringToFront();
- fetchEmptyIcon.Visible = true;
-
- NextButton.Text = Properties.Resources.NextButtonExecuteText;
- NextButton.Enabled = true;
- NextButton.Refresh();
- nextOk = true;
-
- UpdateProductList();
-
- skipUpdates.Enabled = (productList.Items.Count != 0);
- skipUpdates.Visible = skipUpdates.Enabled;
-
- base.Activate();
- }
-
- private void UpdateProductList()
- {
- productList.Items.Clear();
-
- foreach (ProductCategory pc in ProductManager.ProductCategories)
- {
- foreach (Product p in pc.Products)
- {
- if (p.IsUpgrade)
- {
- string detailed = p.GetUpgradeDisplayString();
- ListViewItem item = new ListViewItem(detailed);
- item.Name = p.Title;
- item.Tag = p;
- item.SubItems.Add(String.Empty);
- item.Checked = true;
- productList.Items.Add(item);
- }
- }
- }
- }
-
- private void skipUpdates_CheckedChanged(object sender, EventArgs e)
- {
- if (skipUpdates.Checked == true)
- {
- executed = true;
- nextOk = (productList.Items.Count > 0);
- NextButton.Text = Properties.Resources.NextButtonDefaultText;
- NextButton.Enabled = nextOk;
- NextButton.Refresh();
- }
- else
- {
- executed = false;
- nextOk = true;
- NextButton.Text = Properties.Resources.NextButtonExecuteText;
- NextButton.Enabled = true;
- NextButton.Refresh();
- }
- SignalChange();
- }
-
- private void ProductManager_DownloadManifestCompleted(object sender, AsyncCompletedEventArgs e)
- {
- currentActionIcon.Visible = false;
-
- if (e.Cancelled == false && e.Error == null)
- {
- fetchSuccessIcon.Visible = true;
+ //Re-set the icon locations.
+ Point p = connectionEmptyIcon.Location;
+ p.X = currentActionIcon.Location.X;
+ currentActionIcon.Location = p;
+ currentActionFailedIcon.Location = p;
+ currentActionIcon.Visible = false;
+ currentActionFailedIcon.Visible = false;
+
+ connectionSuccessIcon.Visible = false;
+ connectionEmptyIcon.BringToFront();
+ connectionEmptyIcon.Visible = true;
+
+ fetchSuccessIcon.Visible = false;
+ fetchEmptyIcon.BringToFront();
+ fetchEmptyIcon.Visible = true;
+
+ NextButton.Text = Properties.Resources.NextButtonExecuteText;
+ NextButton.Enabled = true;
+ NextButton.Refresh();
+ nextOk = true;
+
+ UpdateProductList();
+
+ skipUpdates.Enabled = (productList.Items.Count != 0);
+ skipUpdates.Visible = skipUpdates.Enabled;
+
+ base.Activate();
+ }
+
+ private void UpdateProductList()
+ {
+ productList.Items.Clear();
+
+ foreach (ProductCategory pc in ProductManager.ProductCategories)
+ {
+ foreach (Product p in pc.Products)
+ {
+ if (p.IsUpgrade)
+ {
+ string detailed = p.GetUpgradeDisplayString();
+ ListViewItem item = new ListViewItem(detailed);
+ item.Name = p.Title;
+ item.Tag = p;
+ item.SubItems.Add(String.Empty);
+ item.Checked = true;
+ productList.Items.Add(item);
+ }
+ }
+ }
+ }
+
+ private void skipUpdates_CheckedChanged(object sender, EventArgs e)
+ {
+ if (skipUpdates.Checked == true)
+ {
+ executed = true;
+ nextOk = (productList.Items.Count > 0);
+ NextButton.Text = Properties.Resources.NextButtonDefaultText;
+ NextButton.Enabled = nextOk;
+ NextButton.Refresh();
+ }
+ else
+ {
+ executed = false;
+ nextOk = true;
+ NextButton.Text = Properties.Resources.NextButtonExecuteText;
+ NextButton.Enabled = true;
+ NextButton.Refresh();
+ }
+ SignalChange();
+ }
+
+ private void ProductManager_DownloadManifestCompleted(object sender, AsyncCompletedEventArgs e)
+ {
+ currentActionIcon.Visible = false;
+ if (e.Cancelled == false && e.Error == null)
+ {
+ fetchSuccessIcon.Visible = true;
- UpdateProductList();
-
- // this checks our new manifest to see if there is an update to ourselves
- if (CheckForUpdate())
- Application.OpenForms[0].Close();
-
- nextOk = (productList.Items.Count > 0);
- currentActionIcon.Visible = false;
- skipUpdates.Enabled = false;
- }
- else
- {
- currentActionFailedIcon.Visible = true;
- currentActionFailedIcon.BringToFront();
- }
-
- SignalChange();
- }
-
- private bool CheckForUpdate()
+ UpdateProductList();
+
+ // this checks our new manifest to see if there is an update to ourselves
+ if (CheckForUpdate())
+ Application.OpenForms[0].Close();
+
+ nextOk = (productList.Items.Count > 0);
+ currentActionIcon.Visible = false;
+ skipUpdates.Enabled = false;
+ }
+ else
+ {
+ currentActionFailedIcon.Visible = true;
+ currentActionFailedIcon.BringToFront();
+ }
+
+ SignalChange();
+ }
+
+ /// <summary>
+ /// Checks if there is an update for the installer itself available and run it if so.
+ /// </summary>
+ private bool CheckForUpdate()
+ {
+ if (String.IsNullOrEmpty(ProductManager.Manifest.UpdateVersion))
+ return false;
+
+ Assembly assembly = Assembly.GetExecutingAssembly();
+ Version version = assembly.GetName().Version;
+ try
+ {
+ Version updateVersion = new Version(ProductManager.Manifest.UpdateVersion);
+ if (version >= updateVersion)
+ return false;
+
+ DialogResult confirm = MessageBox.Show(Resources.UpdateAvailable, Resources.UpdateCaption,
+ MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+ if (confirm != DialogResult.Yes)
+ return false;
+
+ string path = Path.GetDirectoryName(assembly.Location);
+ string updateTool = Path.Combine(path, "WexInstallerUpdater.exe");
+ if (!File.Exists(updateTool))
{
- Assembly assembly = Assembly.GetExecutingAssembly();
- Version version = assembly.GetName().Version;
- try
- {
- Version updateVersion = new Version(ProductManager.Manifest.UpdateVersion);
- if (version >= updateVersion) return false;
- DialogResult confirm = MessageBox.Show(Resources.UpdateAvailable, Resources.UpdateCaption,
- MessageBoxButtons.YesNo, MessageBoxIcon.Question);
- if (confirm == DialogResult.No) return false;
- string path = Path.GetDirectoryName(assembly.Location);
- string updateTool = String.Format("{0}{1}WexInstallerUpdater.exe",
- path, Path.DirectorySeparatorChar);
- if (!File.Exists(updateTool))
- {
- Logger.LogError("Unable to find update tool - " + updateTool);
- return false;
- }
- ProcessStartInfo psi = new ProcessStartInfo();
- psi.FileName = updateTool;
- Process.Start(psi);
- return true;
- }
- catch (Exception ex)
- {
- Logger.LogException(ex);
- return false;
- }
+ Logger.LogError("Unable to find update tool - " + updateTool);
+ return false;
}
-
+ ProcessStartInfo psi = new ProcessStartInfo();
+ psi.FileName = updateTool;
+ Process.Start(psi);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Logger.LogException(ex);
+ return false;
+ }
}
+ }
}
=== modified file 'WexInstaller/InstallWizard/InstallProgressPanel.cs'
--- a/WexInstaller/InstallWizard/InstallProgressPanel.cs 2011-03-07 16:27:05 +0000
+++ b/WexInstaller/InstallWizard/InstallProgressPanel.cs 2011-03-08 11:10:55 +0000
@@ -47,11 +47,11 @@
public InstallProgress()
{
- InitializeComponent();
- nextOk = true;
- installedProductsNeedConfig = false;
- progressLevels = new Dictionary<string, int>();
- ListViewHelper.EnableDoubleBuffer(productList);
+ InitializeComponent();
+ nextOk = true;
+ installedProductsNeedConfig = false;
+ progressLevels = new Dictionary<string, int>();
+ ListViewHelper.EnableDoubleBuffer(productList);
}
#endregion
@@ -292,9 +292,12 @@
void product_DownloadProductCompleted(object sender, AsyncCompletedEventArgs e)
{
Product p = (sender as Product);
- ListViewItem currentItem = productList.Items.Find(p.Name, false)[0];
- Debug.Assert(currentItem != null);
-
+
+ ListViewItem[] items = productList.Items.Find(p.Name, false);
+ if (items.Length == 0) // Can happen when we cancel everything.
+ return;
+
+ ListViewItem currentItem = items[0];
currentItem.StateImageIndex = (int)InstallProgressState.None;
currentItem.SubItems[2].Text = GetProductStateString(p.CurrentState);
if ((p.CurrentState == ProductState.DownloadError) ||
Attachment: [text/bzr-bundle] bzr/mike.lischke@oracle.com-20110308111055-pqh3gl2gxva8xc3w.bundle
| Thread |
|---|
| • bzr commit into wex-installer-1.0 branch (mike.lischke:357) | Mike Lischke | 8 Mar |