示例#1
0
		internal static object InstallBase(object obj, string minimalInstallerVersion)
		{
			var args = Utils.GetSetupParameters(obj);
			//check CS version
			var shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
			var shellMode = Utils.GetStringSetupParameter(args, Global.Parameters.ShellMode);
			var version = new Version(shellVersion);

			var setupVariables = new SetupVariables
			{
				ConnectionString = Global.EntServer.AspNetConnectionStringFormat,
				DatabaseServer = Global.EntServer.DefaultDbServer,
				Database = Global.EntServer.DefaultDatabase,
				CreateDatabase = true,
				WebSiteIP = Global.EntServer.DefaultIP,
				WebSitePort = Global.EntServer.DefaultPort,
				WebSiteDomain = String.Empty,
				NewWebSite = true,
				NewVirtualDirectory = false,
				ConfigurationFile = "web.config",
				UpdateServerAdminPassword = true,
				ServerAdminPassword = "",
			};

			//
			InitInstall(args, setupVariables);
			//
			var eam = new EntServerActionManager(setupVariables);
			//
			eam.PrepareDistributiveDefaults();
			//
			if (shellMode.Equals(Global.SilentInstallerShell, StringComparison.OrdinalIgnoreCase))
			{
				if (version < new Version(minimalInstallerVersion))
				{
					Utils.ShowConsoleErrorMessage(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion);
					//
					return false;
				}

				try
				{
					var success = true;
					//
					setupVariables.ServerAdminPassword = Utils.GetStringSetupParameter(args, Global.Parameters.ServerAdminPassword);
					setupVariables.Database = Utils.GetStringSetupParameter(args, Global.Parameters.DatabaseName);
					setupVariables.DatabaseServer = Utils.GetStringSetupParameter(args, Global.Parameters.DatabaseServer);
					//
					setupVariables.DbInstallConnectionString = SqlUtils.BuildDbServerMasterConnectionString(
						setupVariables.DatabaseServer,
						Utils.GetStringSetupParameter(args, Global.Parameters.DbServerAdmin),
						Utils.GetStringSetupParameter(args, Global.Parameters.DbServerAdminPassword)
					);
					//
					eam.ActionError += new EventHandler<ActionErrorEventArgs>((object sender, ActionErrorEventArgs e) =>
					{
						Utils.ShowConsoleErrorMessage(e.ErrorMessage);
						//
						Log.WriteError(e.ErrorMessage);
						//
						success = false;
					});
					//
					eam.Start();
					//
					return success;
				}
				catch (Exception ex)
				{
					Log.WriteError("Failed to install the component", ex);
					//
					return false;
				}
			}
			else
			{
				if (version < new Version(minimalInstallerVersion))
				{
					MessageBox.Show(string.Format(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion), "Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
					return DialogResult.Cancel;
				}

				InstallerForm form = new InstallerForm();
				Wizard wizard = form.Wizard;
				wizard.SetupVariables = setupVariables;
				wizard.ActionManager = eam;

				//Unattended setup
				LoadSetupVariablesFromSetupXml(wizard.SetupVariables.SetupXml, wizard.SetupVariables);
				//create wizard pages
				var introPage = new IntroductionPage();
				var licPage = new LicenseAgreementPage();
				var page1 = new ConfigurationCheckPage();
				//
				ConfigurationCheck check1 = new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement");
				ConfigurationCheck check2 = new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement");
				ConfigurationCheck check3 = new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement");
				//
				page1.Checks.AddRange(new ConfigurationCheck[] { check1, check2, check3 });
				//
				var page2 = new InstallFolderPage();
				var page3 = new WebPage();
				var page4 = new UserAccountPage();
				var page5 = new DatabasePage();
				var passwordPage = new ServerAdminPasswordPage();
				//
				var page6 = new ExpressInstallPage2();
				//
				var page7 = new FinishPage();
				wizard.Controls.AddRange(new Control[] { introPage, licPage, page1, page2, page3, page4, page5, passwordPage, page6, page7 });
				wizard.LinkPages();
				wizard.SelectedPage = introPage;

				//show wizard
				IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;
				return form.ShowModal(owner);
			}
		}
示例#2
0
		internal static object InstallBase(object obj, string minimalInstallerVersion)
		{
			Hashtable args = Utils.GetSetupParameters(obj);

			//check CS version
			string shellVersion = Utils.GetStringSetupParameter(args, Global.Parameters.ShellVersion);
			var shellMode = Utils.GetStringSetupParameter(args, Global.Parameters.ShellMode);
			Version version = new Version(shellVersion);
			//
			var setupVariables = new SetupVariables
			{
				SetupAction = SetupActions.Install,
				IISVersion = Global.IISVersion
			};
			//
			InitInstall(args, setupVariables);
			//Unattended setup
			LoadSetupVariablesFromSetupXml(setupVariables.SetupXml, setupVariables);
			//
			var sam = new ServerActionManager(setupVariables);
			// Prepare installation defaults
			sam.PrepareDistributiveDefaults();
			// Silent Installer Mode
			if (shellMode.Equals(Global.SilentInstallerShell, StringComparison.OrdinalIgnoreCase))
			{
				if (version < new Version(minimalInstallerVersion))
				{
					Utils.ShowConsoleErrorMessage(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion);
					//
					return false;
				}

				try
				{
					var success = true;
					//
					setupVariables.ServerPassword = Utils.GetStringSetupParameter(args, Global.Parameters.ServerPassword);
					//
					sam.ActionError += new EventHandler<ActionErrorEventArgs>((object sender, ActionErrorEventArgs e) =>
					{
						Utils.ShowConsoleErrorMessage(e.ErrorMessage);
						//
						Log.WriteError(e.ErrorMessage);
						//
						success = false;
					});
					//
					sam.Start();
					//
					return success;
				}
				catch (Exception ex)
				{
					Log.WriteError("Failed to install the component", ex);
					//
					return false;
				}
			}
			else
			{
				if (version < new Version(minimalInstallerVersion))
				{
					MessageBox.Show(String.Format(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion), "Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
					//
					return DialogResult.Cancel;
				}

				var form = new InstallerForm();
				var wizard = form.Wizard;
				wizard.SetupVariables = setupVariables;
				//
				wizard.ActionManager = sam;

				//create wizard pages
				var introPage = new IntroductionPage();
				var licPage = new LicenseAgreementPage();
				//
				var page1 = new ConfigurationCheckPage();
				page1.Checks.AddRange(new ConfigurationCheck[]
				{ 
					new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement"), 
					new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement"), 
					new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement")
				});
				//
				var page2 = new InstallFolderPage();
				var page3 = new WebPage();
				var page4 = new UserAccountPage();
				var page5 = new ServerPasswordPage();
				var page6 = new ExpressInstallPage2();
				var page7 = new FinishPage();
				//
				wizard.Controls.AddRange(new Control[] { introPage, licPage, page1, page2, page3, page4, page5, page6, page7 });
				wizard.LinkPages();
				wizard.SelectedPage = introPage;

				//show wizard
				IWin32Window owner = args["ParentForm"] as IWin32Window;
				return form.ShowModal(owner);
			}
		}
示例#3
0
		public static DialogResult Setup(object obj)
		{
			Hashtable args = Utils.GetSetupParameters(obj);
			string shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
			//
			var setupVariables = new SetupVariables
			{
				ComponentId = Utils.GetStringSetupParameter(args, Global.Parameters.ComponentId),
				ConfigurationFile = "web.config",
				IISVersion = Global.IISVersion,
				SetupAction = SetupActions.Setup
			};
			//
			AppConfig.LoadConfiguration();

			InstallerForm form = new InstallerForm();
			Wizard wizard = form.Wizard;
			wizard.SetupVariables = setupVariables;
			//
			AppConfig.LoadComponentSettings(wizard.SetupVariables);

			//IntroductionPage page1 = new IntroductionPage();
			WebPage page1 = new WebPage();
			ServerAdminPasswordPage page2 = new ServerAdminPasswordPage();
			ExpressInstallPage page3 = new ExpressInstallPage();
			//create install currentScenario
			InstallAction action = new InstallAction(ActionTypes.UpdateWebSite);
			action.Description = "Updating web site...";
			page3.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateServerAdminPassword);
			action.Description = "Updating serveradmin password...";
			page3.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateConfig);
			action.Description = "Updating system configuration...";
			page3.Actions.Add(action);

			FinishPage page4 = new FinishPage();
			wizard.Controls.AddRange(new Control[] { page1, page2, page3, page4 });
			wizard.LinkPages();
			wizard.SelectedPage = page1;

			//show wizard
			IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;
			return form.ShowModal(owner);
		}
示例#4
0
		public static DialogResult SetupBase(object obj)
		{
			Hashtable args = Utils.GetSetupParameters(obj);
			string shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
			string componentId = Utils.GetStringSetupParameter(args, "ComponentId");
			AppConfig.LoadConfiguration();

			InstallerForm form = new InstallerForm();
			Wizard wizard = form.Wizard;
			wizard.SetupVariables.SetupAction = SetupActions.Setup;
			LoadSetupVariablesFromConfig(wizard.SetupVariables, componentId);
			wizard.SetupVariables.WebSiteId = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteId");
			wizard.SetupVariables.WebSiteIP = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteIP");
			wizard.SetupVariables.WebSitePort = AppConfig.GetComponentSettingStringValue(componentId, "WebSitePort");
			wizard.SetupVariables.WebSiteDomain = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteDomain");
			wizard.SetupVariables.NewWebSite = AppConfig.GetComponentSettingBooleanValue(componentId, "NewWebSite");
			wizard.SetupVariables.NewVirtualDirectory = AppConfig.GetComponentSettingBooleanValue(componentId, "NewVirtualDirectory");
			wizard.SetupVariables.VirtualDirectory = AppConfig.GetComponentSettingStringValue(componentId, "VirtualDirectory");
			wizard.SetupVariables.IISVersion = Utils.GetVersionSetupParameter(args, "IISVersion");
			//IntroductionPage page1 = new IntroductionPage();
			WebPage page2 = new WebPage();
			ExpressInstallPage page3 = new ExpressInstallPage();
			//create install currentScenario
			InstallAction action = new InstallAction(ActionTypes.UpdateWebSite);
			action.Description = "Updating web site...";
			page3.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateConfig);
			action.Description = "Updating system configuration...";
			page3.Actions.Add(action);

			FinishPage page4 = new FinishPage();
			wizard.Controls.AddRange(new Control[] { page2, page3, page4 });
			wizard.LinkPages();
			wizard.SelectedPage = page2;

			//show wizard
			IWin32Window owner = args["ParentForm"] as IWin32Window;
			return form.ShowModal(owner);
		}
示例#5
0
		internal static DialogResult InstallBase(object obj, string minimalInstallerVersion)
		{
			Hashtable args = Utils.GetSetupParameters(obj);

			//check CS version
			string shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
			Version version = new Version(shellVersion);
			if (version < new Version(minimalInstallerVersion))
			{
				MessageBox.Show(
					string.Format("WebsitePanel Installer {0} or higher required.", minimalInstallerVersion),
					"Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
				return DialogResult.Cancel;
			}

			InstallerForm form = new InstallerForm();
			Wizard wizard = form.Wizard;
			InitInstall(args, wizard);

			//web settings
			wizard.SetupVariables.WebSiteIP = "127.0.0.1";
			wizard.SetupVariables.WebSitePort = "9003";
			wizard.SetupVariables.WebSiteDomain = string.Empty;
			wizard.SetupVariables.NewWebSite = true;
			wizard.SetupVariables.NewVirtualDirectory = false;
			if(wizard.SetupVariables.IISVersion.Major == 7)
				wizard.SetupVariables.UserMembership = new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_IUSRS" };
			else
				wizard.SetupVariables.UserMembership = new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_WPG" };
			wizard.SetupVariables.ConfigurationFile = "web.config";

			//Unattended setup
			LoadSetupVariablesFromSetupXml(wizard.SetupVariables.SetupXml, wizard.SetupVariables);

			//create wizard pages
			IntroductionPage introPage = new IntroductionPage();
			LicenseAgreementPage licPage = new LicenseAgreementPage();
			ConfigurationCheckPage page1 = new ConfigurationCheckPage();
			ConfigurationCheck check1 = new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement");
			ConfigurationCheck check2 = new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement");
			ConfigurationCheck check3 = new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement");
			page1.Checks.AddRange(new ConfigurationCheck[] { check1, check2, check3 });
			InstallFolderPage page2 = new InstallFolderPage();
			WebPage page3 = new WebPage();
			UserAccountPage page4 = new UserAccountPage();
			ServerPasswordPage page5 = new ServerPasswordPage();
			ExpressInstallPage page6 = new ExpressInstallPage();
		
			//create install actions
			InstallAction action = new InstallAction(ActionTypes.CopyFiles);
			action.Description = "Copying files...";
			page6.Actions.Add(action);


			action = new InstallAction(ActionTypes.CreateWebSite);
			action.Description = "Creating web site...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.FolderPermissions);
			action.Description = "Configuring folder permissions...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.ServerPassword);
			action.Description = "Updating server password...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateConfig);
			action.Description = "Updating system configuration...";
			page6.Actions.Add(action);

			
			FinishPage page7 = new FinishPage();
			wizard.Controls.AddRange(new Control[] { introPage, licPage, page1, page2, page3, page4, page5, page6, page7 });
			wizard.LinkPages();
			wizard.SelectedPage = introPage;
			
			//show wizard
			IWin32Window owner = args["ParentForm"] as IWin32Window;
			return form.ShowModal(owner);
		}
		internal static DialogResult InstallBase(object obj, string minimalInstallerVersion)
		{
			Hashtable args = Utils.GetSetupParameters(obj);

			//check CS version
			string shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
			Version version = new Version(shellVersion);
			if (version < new Version(minimalInstallerVersion))
			{
				MessageBox.Show(
					string.Format("WebsitePanel Installer {0} or higher required.", minimalInstallerVersion),
					"Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
				return DialogResult.Cancel;
			}

			InstallerForm form = new InstallerForm();
			Wizard wizard = form.Wizard;
			//load config file
			AppConfig.LoadConfiguration();

			//general settings
			wizard.SetupVariables.ApplicationName = Utils.GetStringSetupParameter(args, "ApplicationName");
			wizard.SetupVariables.Version = Utils.GetStringSetupParameter(args, "Version");
			wizard.SetupVariables.Installer = Utils.GetStringSetupParameter(args, "Installer");
			wizard.SetupVariables.InstallerPath = Utils.GetStringSetupParameter(args, "InstallerPath");
			wizard.SetupVariables.IISVersion = Utils.GetVersionSetupParameter(args, "IISVersion");
			wizard.SetupVariables.SetupAction = SetupActions.Install;
			wizard.SetupVariables.SetupXml = Utils.GetStringSetupParameter(args, "SetupXml");
		

			//********************  Server ****************
			//general settings 
			string serverId = Guid.NewGuid().ToString();
			wizard.SetupVariables.ServerComponentId = serverId;
			wizard.SetupVariables.ComponentId = serverId;
			wizard.SetupVariables.Instance = string.Empty;
			wizard.SetupVariables.ComponentName = "Server";
			wizard.SetupVariables.ComponentCode = "server";
			wizard.SetupVariables.ComponentDescription = "WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one.";
			wizard.SetupVariables.InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Server");
			wizard.SetupVariables.InstallerType = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "Server");
			wizard.SetupVariables.InstallationFolder = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Server");
			//web settings
			wizard.SetupVariables.UserAccount = "WPServer";
			wizard.SetupVariables.UserPassword = Guid.NewGuid().ToString("P");
			wizard.SetupVariables.UserDomain = null;
			wizard.SetupVariables.WebSiteIP = "127.0.0.1";
			wizard.SetupVariables.WebSitePort = "9003";
			wizard.SetupVariables.WebSiteDomain = string.Empty;
			wizard.SetupVariables.NewWebSite = true;
			wizard.SetupVariables.NewVirtualDirectory = false;
			wizard.SetupVariables.UserMembership = (wizard.SetupVariables.IISVersion.Major == 7) ?
				new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_IUSRS" } :
				new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_WPG" };
			wizard.SetupVariables.ConfigurationFile = "web.config";
			
			wizard.SetupVariables.UpdateServerPassword = true;

			//Unattended setup
			LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

			//create component settings node
			wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(serverId);
			//write component settings to xml
			CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, serverId);
			//save settings
			SetupVariables serverSetupVariables = wizard.SetupVariables.Clone();

			//server password
			string serverPassword = serverSetupVariables.ServerPassword;
			if ( string.IsNullOrEmpty(serverPassword))
			{
				serverPassword = Guid.NewGuid().ToString("N").Substring(0, 10);
			}
			serverSetupVariables.ServerPassword = Utils.ComputeSHA1(serverPassword);
			//add password to config
			AppConfig.SetComponentSettingStringValue(serverSetupVariables.ComponentId, "Password", serverSetupVariables.ServerPassword);
			wizard.SetupVariables.RemoteServerPassword = serverPassword;
			//server url
			wizard.SetupVariables.RemoteServerUrl = GetUrl(serverSetupVariables.WebSiteDomain, serverSetupVariables.WebSiteIP, serverSetupVariables.WebSitePort);

			//********************  Portal ****************
			//general settings
			string portalId = Guid.NewGuid().ToString();
			wizard.SetupVariables.PortalComponentId = portalId;
			wizard.SetupVariables.ComponentId = portalId;
			wizard.SetupVariables.Instance = string.Empty;
			wizard.SetupVariables.ComponentName = "Portal";
			wizard.SetupVariables.ComponentCode = "portal";
			wizard.SetupVariables.ComponentDescription = "WebsitePanel Portal is a control panel itself with user interface which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc.";
			wizard.SetupVariables.InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Portal");
			wizard.SetupVariables.InstallerType = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "Portal");
			wizard.SetupVariables.InstallationFolder = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Portal");
			//web settings
			wizard.SetupVariables.UserAccount = "WPPortal";
			wizard.SetupVariables.UserPassword = Guid.NewGuid().ToString("P");
			wizard.SetupVariables.UserDomain = null;
			wizard.SetupVariables.WebSiteIP = string.Empty; //empty - to detect IP 
			wizard.SetupVariables.WebSitePort = "9001";
			wizard.SetupVariables.WebSiteDomain = string.Empty;
			wizard.SetupVariables.NewWebSite = true;
			wizard.SetupVariables.NewVirtualDirectory = false;
			wizard.SetupVariables.UserMembership = (wizard.SetupVariables.IISVersion.Major == 7) ?
				new string[] { "IIS_IUSRS" } :
				new string[] { "IIS_WPG" };
			wizard.SetupVariables.ConfigurationFile = "web.config";
			//ES url
			wizard.SetupVariables.EnterpriseServerURL = "http://127.0.0.1:9002";
			
			//Unattended setup
			LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

			//create component settings node
			wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(portalId);
			//add default component settings
			CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, portalId);
			//save settings
			SetupVariables portalSetupVariables = wizard.SetupVariables.Clone();

			//********************  Enterprise Server ****************
			//general settings 
			string enterpriseServerId = Guid.NewGuid().ToString();
			wizard.SetupVariables.EnterpriseServerComponentId = enterpriseServerId;
			wizard.SetupVariables.ComponentId = enterpriseServerId;
			wizard.SetupVariables.Instance = string.Empty;
			wizard.SetupVariables.ComponentName = "Enterprise Server";
			wizard.SetupVariables.ComponentCode = "enterprise server";
			wizard.SetupVariables.ComponentDescription = "Enterprise Server is the heart of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications.";
			wizard.SetupVariables.InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Enterprise Server");
			wizard.SetupVariables.InstallerType = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "EnterpriseServer");
			wizard.SetupVariables.InstallationFolder = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Enterprise Server");
			//web settings
			wizard.SetupVariables.UserAccount = "WPEnterpriseServer";
			wizard.SetupVariables.UserPassword = Guid.NewGuid().ToString("P");
			wizard.SetupVariables.UserDomain = null;
			wizard.SetupVariables.WebSiteIP = "127.0.0.1";
			wizard.SetupVariables.WebSitePort = "9002";
			wizard.SetupVariables.WebSiteDomain = string.Empty;
			wizard.SetupVariables.NewWebSite = true;
			wizard.SetupVariables.NewVirtualDirectory = false;
			wizard.SetupVariables.UserMembership = (wizard.SetupVariables.IISVersion.Major == 7) ?
				new string[] { "IIS_IUSRS" } :
				new string[] { "IIS_WPG" };
			wizard.SetupVariables.ConfigurationFile = "web.config";
			//db settings
			wizard.SetupVariables.DatabaseServer = "localhost\\sqlexpress";
			wizard.SetupVariables.Database = "WebsitePanel";
			wizard.SetupVariables.CreateDatabase = true;
			//serveradmin settings
			wizard.SetupVariables.UpdateServerAdminPassword = true;
			wizard.SetupVariables.ServerAdminPassword = string.Empty;
			
			//Unattended setup
			LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

			//create component settings node
			wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(enterpriseServerId);
			//add default component settings
			CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, enterpriseServerId);
			//save settings
			SetupVariables enterpiseServerSetupVariables = wizard.SetupVariables.Clone();
			///////////////////////
		
			//create wizard pages
			IntroductionPage introPage = new IntroductionPage();
			LicenseAgreementPage licPage = new LicenseAgreementPage();
			ConfigurationCheckPage page2 = new ConfigurationCheckPage();
			ConfigurationCheck check1 = new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement");
			ConfigurationCheck check2 = new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement");
			ConfigurationCheck check3 = new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement");
			ConfigurationCheck check4 = new ConfigurationCheck(CheckTypes.WPServer, "WebsitePanel Server Requirement");
			check4.SetupVariables = serverSetupVariables;
			ConfigurationCheck check5 = new ConfigurationCheck(CheckTypes.WPEnterpriseServer, "WebsitePanel Enterprise Server Requirement");
			check5.SetupVariables = enterpiseServerSetupVariables;
			ConfigurationCheck check6 = new ConfigurationCheck(CheckTypes.WPPortal, "WebsitePanel Portal Requirement");
			check6.SetupVariables = portalSetupVariables;

			page2.Checks.AddRange(new ConfigurationCheck[] { check1, check2, check3, check4, check5, check6 });
			WebPage page3 = new WebPage();
			//use portal settings for this page
			page3.SetupVariables = portalSetupVariables;
			DatabasePage page4 = new DatabasePage();
			//use ES settings for this page
			page4.SetupVariables = enterpiseServerSetupVariables;
			ServerAdminPasswordPage page5 = new ServerAdminPasswordPage();
			page5.SetupVariables = enterpiseServerSetupVariables;
			page5.NoteText = "Note: Both serveradmin and admin accounts will use this password. You can always change password for serveradmin or admin accounts through control panel."; 
			ExpressInstallPage page6 = new ExpressInstallPage();
			wizard.SetupVariables.ComponentName = string.Empty;

			//create install actions

			//************ Server **************
			InstallAction action = new InstallAction(ActionTypes.InitSetupVariables);
			action.Description = "Installing WebsitePanel Server...";
			action.SetupVariables = serverSetupVariables;
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CopyFiles);
			action.Description = "Copying files...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateWebSite);
			action.Description = "Creating web site...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.FolderPermissions);
			action.Description = "Configuring folder permissions...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.ServerPassword);
			action.Description = "Setting server password...";
			page6.Actions.Add(action);

			//************* Enterprise server *********
			action = new InstallAction(ActionTypes.InitSetupVariables);
			action.Description = "Installing WebsitePanel Enterprise Server...";
			action.SetupVariables = enterpiseServerSetupVariables;
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CopyFiles);
			action.Description = "Copying files...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateWebSite);
			action.Description = "Creating web site...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CryptoKey);
			action.Description = "Generating crypto key...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateDatabase);
			action.Description = "Creating SQL Server database...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateDatabaseUser);
			action.Description = "Creating SQL Server user...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.ExecuteSql);
			action.Description = "Creating database objects...";
			action.Path = "setup\\install_db.sql";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateWPServerLogin);
			action.Description = "Creating WebsitePanel login...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateServerAdminPassword);
			action.Description = "Updating serveradmin password...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateLicenseInformation);
			action.Description = "Updating license information...";
			page6.Actions.Add(action);

			//************* Portal *********
			action = new InstallAction(ActionTypes.InitSetupVariables);
			action.Description = "Installing WebsitePanel Portal...";
			action.SetupVariables = portalSetupVariables;
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CopyFiles);
			action.Description = "Copying files...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CopyWebConfig);
			action.Description = "Copying web.config...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateWebSite);
			action.Description = "Creating web site...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateEnterpriseServerUrl);
			action.Description = "Updating site settings...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.UpdateConfig);
			action.Description = "Updating system configuration...";
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.CreateShortcuts);
			action.Description = "Creating shortcut...";
			page6.Actions.Add(action);

			//************* Standalone server provisioning *********
			action = new InstallAction(ActionTypes.InitSetupVariables);
			action.SetupVariables = enterpiseServerSetupVariables;
			page6.Actions.Add(action);

			action = new InstallAction(ActionTypes.ConfigureStandaloneServerData);
			action.Description = "Configuring server data...";
			action.Url = portalSetupVariables.EnterpriseServerURL;
			page6.Actions.Add(action);

			SetupCompletePage page7 = new SetupCompletePage();
			page7.SetupVariables = portalSetupVariables;
			wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3, page4, page5, page6, page7 });
			wizard.LinkPages();
			wizard.SelectedPage = introPage;

			//show wizard
			IWin32Window owner = args["ParentForm"] as IWin32Window;
			return form.ShowModal(owner);
		}
		internal static object InstallBase(object obj, string minimalInstallerVersion)
		{
			Hashtable args = Utils.GetSetupParameters(obj);

			//check CS version
			string shellVersion = Utils.GetStringSetupParameter(args, Global.Parameters.ShellVersion);
			var shellMode = Utils.GetStringSetupParameter(args, Global.Parameters.ShellMode);
			Version version = new Version(shellVersion);

			//********************  Server ****************
			var serverSetup = new SetupVariables
			{
				ComponentId = Guid.NewGuid().ToString(),
				Instance = String.Empty,
				ComponentName = Global.Server.ComponentName,
				ComponentCode = Global.Server.ComponentCode,
				ComponentDescription = Global.Server.ComponentDescription,
				//
				ServerPassword = Guid.NewGuid().ToString("N").Substring(0, 10),
				//
				SetupAction = SetupActions.Install,
				IISVersion = Global.IISVersion,
				ApplicationName = Utils.GetStringSetupParameter(args, Global.Parameters.ApplicationName),
				Version = Utils.GetStringSetupParameter(args, Global.Parameters.Version),
				Installer = Utils.GetStringSetupParameter(args, Global.Parameters.Installer),
				InstallerPath = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerPath),
				SetupXml = Utils.GetStringSetupParameter(args, Global.Parameters.SetupXml),
				//
				InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, Global.Parameters.InstallerFolder), Global.Server.ComponentName),
				InstallerType = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerType).Replace(Global.StandaloneServer.SetupController, Global.Server.SetupController),
				InstallationFolder = Path.Combine(Path.Combine(Utils.GetSystemDrive(), "WebsitePanel"), Global.Server.ComponentName),
				ConfigurationFile = "web.config",
			};
			// Load config file
			AppConfig.LoadConfiguration();
			//
			LoadComponentVariablesFromSetupXml(serverSetup.ComponentCode, serverSetup.SetupXml, serverSetup);
			//
			//serverSetup.ComponentConfig = AppConfig.CreateComponentConfig(serverSetup.ComponentId);
			//serverSetup.RemoteServerUrl = GetUrl(serverSetup.WebSiteDomain, serverSetup.WebSiteIP, serverSetup.WebSitePort);
			//
			//CreateComponentSettingsFromSetupVariables(serverSetup, serverSetup.ComponentId);

			//********************  Enterprise Server ****************
			var esServerSetup = new SetupVariables
			{
				ComponentId = Guid.NewGuid().ToString(),
				SetupAction = SetupActions.Install,
				IISVersion = Global.IISVersion,
				//
				Instance = String.Empty,
				ComponentName = Global.EntServer.ComponentName,
				ComponentCode = Global.EntServer.ComponentCode,
				ApplicationName = Utils.GetStringSetupParameter(args, Global.Parameters.ApplicationName),
				Version = Utils.GetStringSetupParameter(args, Global.Parameters.Version),
				ComponentDescription = Global.EntServer.ComponentDescription,
				Installer = Utils.GetStringSetupParameter(args, Global.Parameters.Installer),
				InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, Global.Parameters.InstallerFolder), Global.EntServer.ComponentName),
				InstallerType = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerType).Replace(Global.StandaloneServer.SetupController, Global.EntServer.SetupController),
				InstallationFolder = Path.Combine(Path.Combine(Utils.GetSystemDrive(), "WebsitePanel"), Global.EntServer.ComponentName),
				InstallerPath = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerPath),
				SetupXml = Utils.GetStringSetupParameter(args, Global.Parameters.SetupXml),
				//
				ConfigurationFile = "web.config",
				ConnectionString = Global.EntServer.AspNetConnectionStringFormat,
				DatabaseServer = Global.EntServer.DefaultDbServer,
				Database = Global.EntServer.DefaultDatabase,
				CreateDatabase = true,
				UpdateServerAdminPassword = true,
				//
				WebSiteIP = Global.EntServer.DefaultIP,
				WebSitePort = Global.EntServer.DefaultPort,
				WebSiteDomain = String.Empty,
			};
			//
			LoadComponentVariablesFromSetupXml(esServerSetup.ComponentCode, esServerSetup.SetupXml, esServerSetup);
			//
			//esServerSetup.ComponentConfig = AppConfig.CreateComponentConfig(esServerSetup.ComponentId);
			//
			//CreateComponentSettingsFromSetupVariables(esServerSetup, esServerSetup.ComponentId);

			//********************  Portal ****************
			#region Portal Setup Variables
			var portalSetup = new SetupVariables
				{
					ComponentId = Guid.NewGuid().ToString(),
					SetupAction = SetupActions.Install,
					IISVersion = Global.IISVersion,
					//
					Instance = String.Empty,
					ComponentName = Global.WebPortal.ComponentName,
					ComponentCode = Global.WebPortal.ComponentCode,
					ApplicationName = Utils.GetStringSetupParameter(args, Global.Parameters.ApplicationName),
					Version = Utils.GetStringSetupParameter(args, Global.Parameters.Version),
					ComponentDescription = Global.WebPortal.ComponentDescription,
					Installer = Utils.GetStringSetupParameter(args, Global.Parameters.Installer),
					InstallerFolder = Path.Combine(Utils.GetStringSetupParameter(args, Global.Parameters.InstallerFolder), Global.WebPortal.ComponentName),
					InstallerType = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerType).Replace(Global.StandaloneServer.SetupController, Global.WebPortal.SetupController),
					InstallationFolder = Path.Combine(Path.Combine(Utils.GetSystemDrive(), "WebsitePanel"), Global.WebPortal.ComponentName),
					InstallerPath = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerPath),
					SetupXml = Utils.GetStringSetupParameter(args, Global.Parameters.SetupXml),
					//
					ConfigurationFile = "web.config",
					EnterpriseServerURL = Global.WebPortal.DefaultEntServURL,
				};
			//
			LoadComponentVariablesFromSetupXml(portalSetup.ComponentCode, portalSetup.SetupXml, portalSetup);
			//
			//portalSetup.ComponentConfig = AppConfig.CreateComponentConfig(portalSetup.ComponentId);
			//
			//CreateComponentSettingsFromSetupVariables(portalSetup, portalSetup.ComponentId); 
			#endregion

			//
			var stdssam = new StandaloneServerActionManager(serverSetup, esServerSetup, portalSetup);
			//
			stdssam.PrepareDistributiveDefaults();

			//
			if (shellMode.Equals(Global.SilentInstallerShell, StringComparison.OrdinalIgnoreCase))
			{
				// Validate the setup controller's bootstrapper version
				if (version < new Version(minimalInstallerVersion))
				{
					Utils.ShowConsoleErrorMessage(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion);
					//
					return false;
				}

				try
				{
					var success = true;
					
					// Retrieve WebsitePanel Enterprise Server component's settings from the command-line
					var adminPassword = Utils.GetStringSetupParameter(args, Global.Parameters.ServerAdminPassword);
					// This has been designed to make an installation process via Web PI more secure
					if (String.IsNullOrEmpty(adminPassword))
					{
						// Set serveradmin password
						esServerSetup.ServerAdminPassword = Guid.NewGuid().ToString();
						// Set peer admin password
						esServerSetup.PeerAdminPassword = Guid.NewGuid().ToString();
						// Instruct provisioning scenario to enter the application in SCPA mode (Setup Control Panel Acounts)
						esServerSetup.EnableScpaMode = true;
					}
					else
					{
						esServerSetup.ServerAdminPassword = esServerSetup.PeerAdminPassword = adminPassword;
					}
					//
					esServerSetup.Database = Utils.GetStringSetupParameter(args, Global.Parameters.DatabaseName);
					esServerSetup.DatabaseServer = Utils.GetStringSetupParameter(args, Global.Parameters.DatabaseServer);
					esServerSetup.DbInstallConnectionString = SqlUtils.BuildDbServerMasterConnectionString(
						esServerSetup.DatabaseServer,
						Utils.GetStringSetupParameter(args, Global.Parameters.DbServerAdmin),
						Utils.GetStringSetupParameter(args, Global.Parameters.DbServerAdminPassword)
					);

					//
					stdssam.ActionError += new EventHandler<ActionErrorEventArgs>((object sender, ActionErrorEventArgs e) =>
					{
						Utils.ShowConsoleErrorMessage(e.ErrorMessage);
						//
						Log.WriteError(e.ErrorMessage);
						//
						success = false;
					});
					//
					stdssam.Start();
					//
					return success;
				}
				catch (Exception ex)
				{
					Log.WriteError("Failed to install the component", ex);
					//
					return false;
				}
			}
			else
			{
				// Validate the setup controller's bootstrapper version
				if (version < new Version(minimalInstallerVersion))
				{
					MessageBox.Show(String.Format(Global.Messages.InstallerVersionIsObsolete, minimalInstallerVersion),
						"Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
					//
					return DialogResult.Cancel;
				}

				// NOTE: there is no assignment to SetupVariables property of the wizard as usually because we have three components 
				// to setup here and thus we have created SwapSetupVariablesAction setup action to swap corresponding variables 
				// back and forth while executing the installation scenario.
				InstallerForm form = new InstallerForm();
				Wizard wizard = form.Wizard;
				wizard.SetupVariables = serverSetup;
				// Assign corresponding action manager to the wizard.
				wizard.ActionManager = stdssam;
				// Initialize wizard pages and their properties
				var introPage = new IntroductionPage();
				var licPage = new LicenseAgreementPage();
				var page2 = new ConfigurationCheckPage();			
				// Setup prerequisites validation
				page2.Checks.AddRange(new ConfigurationCheck[] { 
					new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement"), 
					new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement"), 
					new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement"), 
					// Validate Server installation prerequisites
					new ConfigurationCheck(CheckTypes.WPServer, "WebsitePanel Server Requirement") { SetupVariables = serverSetup }, 
					// Validate EnterpriseServer installation prerequisites
					new ConfigurationCheck(CheckTypes.WPEnterpriseServer, "WebsitePanel Enterprise Server Requirement") { SetupVariables = esServerSetup }, 
					// Validate WebPortal installation prerequisites
					new ConfigurationCheck(CheckTypes.WPPortal, "WebsitePanel Portal Requirement") { SetupVariables = portalSetup }
				});
				// Assign WebPortal setup variables set to acquire corresponding settings
				var page3 = new WebPage { SetupVariables = portalSetup };
				// Assign EnterpriseServer setup variables set to acquire corresponding settings
				var page4 = new DatabasePage { SetupVariables = esServerSetup };
				// Assign EnterpriseServer setup variables set to acquire corresponding settings
				var page5 = new ServerAdminPasswordPage
				{
					SetupVariables = esServerSetup,
					NoteText = "Note: Both serveradmin and admin accounts will use this password. You can always change password for serveradmin or admin accounts through control panel."
				};
				//
				var page6 = new ExpressInstallPage2();
				// Assign WebPortal setup variables set to acquire corresponding settings
				var page7 = new SetupCompletePage { SetupVariables = portalSetup };
				//
				wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3, page4, page5, page6, page7 });
				wizard.LinkPages();
				wizard.SelectedPage = introPage;
				// Run wizard
				IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;
				return form.ShowModal(owner);
			}
		}
        internal static DialogResult InstallBase(object obj, string minimalInstallerVersion)
        {
            Hashtable args = Utils.GetSetupParameters(obj);

            //check CS version
            string  shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
            Version version      = new Version(shellVersion);

            if (version < new Version(minimalInstallerVersion))
            {
                MessageBox.Show(
                    string.Format("WebsitePanel Installer {0} or higher required.", minimalInstallerVersion),
                    "Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(DialogResult.Cancel);
            }

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            //load config file
            AppConfig.LoadConfiguration();

            //general settings
            wizard.SetupVariables.ApplicationName = Utils.GetStringSetupParameter(args, "ApplicationName");
            wizard.SetupVariables.Version         = Utils.GetStringSetupParameter(args, "Version");
            wizard.SetupVariables.Installer       = Utils.GetStringSetupParameter(args, "Installer");
            wizard.SetupVariables.InstallerPath   = Utils.GetStringSetupParameter(args, "InstallerPath");
            wizard.SetupVariables.IISVersion      = Utils.GetVersionSetupParameter(args, "IISVersion");
            wizard.SetupVariables.SetupAction     = SetupActions.Install;
            wizard.SetupVariables.SetupXml        = Utils.GetStringSetupParameter(args, "SetupXml");


            //********************  Server ****************
            //general settings
            string serverId = Guid.NewGuid().ToString();

            wizard.SetupVariables.ServerComponentId    = serverId;
            wizard.SetupVariables.ComponentId          = serverId;
            wizard.SetupVariables.Instance             = string.Empty;
            wizard.SetupVariables.ComponentName        = "Server";
            wizard.SetupVariables.ComponentCode        = "server";
            wizard.SetupVariables.ComponentDescription = "WebsitePanel Server is a set of services running on the remote server to be controlled. Server application should be reachable from Enterprise Server one.";
            wizard.SetupVariables.InstallerFolder      = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Server");
            wizard.SetupVariables.InstallerType        = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "Server");
            wizard.SetupVariables.InstallationFolder   = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Server");
            //web settings
            wizard.SetupVariables.UserAccount         = "WPServer";
            wizard.SetupVariables.UserPassword        = Guid.NewGuid().ToString("P");
            wizard.SetupVariables.UserDomain          = null;
            wizard.SetupVariables.WebSiteIP           = "127.0.0.1";
            wizard.SetupVariables.WebSitePort         = "9003";
            wizard.SetupVariables.WebSiteDomain       = string.Empty;
            wizard.SetupVariables.NewWebSite          = true;
            wizard.SetupVariables.NewVirtualDirectory = false;
            wizard.SetupVariables.UserMembership      = (wizard.SetupVariables.IISVersion.Major == 7) ?
                                                        new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_IUSRS" } :
            new string[] { "AD:Domain Admins", "SID:" + SystemSID.ADMINISTRATORS, "IIS_WPG" };
            wizard.SetupVariables.ConfigurationFile = "web.config";

            wizard.SetupVariables.UpdateServerPassword = true;

            //Unattended setup
            LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

            //create component settings node
            wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(serverId);
            //write component settings to xml
            CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, serverId);
            //save settings
            SetupVariables serverSetupVariables = wizard.SetupVariables.Clone();

            //server password
            string serverPassword = serverSetupVariables.ServerPassword;

            if (string.IsNullOrEmpty(serverPassword))
            {
                serverPassword = Guid.NewGuid().ToString("N").Substring(0, 10);
            }
            serverSetupVariables.ServerPassword = Utils.ComputeSHA1(serverPassword);
            //add password to config
            AppConfig.SetComponentSettingStringValue(serverSetupVariables.ComponentId, "Password", serverSetupVariables.ServerPassword);
            wizard.SetupVariables.RemoteServerPassword = serverPassword;
            //server url
            wizard.SetupVariables.RemoteServerUrl = GetUrl(serverSetupVariables.WebSiteDomain, serverSetupVariables.WebSiteIP, serverSetupVariables.WebSitePort);

            //********************  Portal ****************
            //general settings
            string portalId = Guid.NewGuid().ToString();

            wizard.SetupVariables.PortalComponentId    = portalId;
            wizard.SetupVariables.ComponentId          = portalId;
            wizard.SetupVariables.Instance             = string.Empty;
            wizard.SetupVariables.ComponentName        = "Portal";
            wizard.SetupVariables.ComponentCode        = "portal";
            wizard.SetupVariables.ComponentDescription = "WebsitePanel Portal is a control panel itself with user interface which allows managing user accounts, hosting spaces, web sites, FTP accounts, files, etc.";
            wizard.SetupVariables.InstallerFolder      = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Portal");
            wizard.SetupVariables.InstallerType        = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "Portal");
            wizard.SetupVariables.InstallationFolder   = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Portal");
            //web settings
            wizard.SetupVariables.UserAccount         = "WPPortal";
            wizard.SetupVariables.UserPassword        = Guid.NewGuid().ToString("P");
            wizard.SetupVariables.UserDomain          = null;
            wizard.SetupVariables.WebSiteIP           = string.Empty;   //empty - to detect IP
            wizard.SetupVariables.WebSitePort         = "9001";
            wizard.SetupVariables.WebSiteDomain       = string.Empty;
            wizard.SetupVariables.NewWebSite          = true;
            wizard.SetupVariables.NewVirtualDirectory = false;
            wizard.SetupVariables.UserMembership      = (wizard.SetupVariables.IISVersion.Major == 7) ?
                                                        new string[] { "IIS_IUSRS" } :
            new string[] { "IIS_WPG" };
            wizard.SetupVariables.ConfigurationFile = "web.config";
            //ES url
            wizard.SetupVariables.EnterpriseServerURL = "http://127.0.0.1:9002";

            //Unattended setup
            LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

            //create component settings node
            wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(portalId);
            //add default component settings
            CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, portalId);
            //save settings
            SetupVariables portalSetupVariables = wizard.SetupVariables.Clone();

            //********************  Enterprise Server ****************
            //general settings
            string enterpriseServerId = Guid.NewGuid().ToString();

            wizard.SetupVariables.EnterpriseServerComponentId = enterpriseServerId;
            wizard.SetupVariables.ComponentId          = enterpriseServerId;
            wizard.SetupVariables.Instance             = string.Empty;
            wizard.SetupVariables.ComponentName        = "Enterprise Server";
            wizard.SetupVariables.ComponentCode        = "enterprise server";
            wizard.SetupVariables.ComponentDescription = "Enterprise Server is the heart of WebsitePanel system. It includes all business logic of the application. Enterprise Server should have access to Server and be accessible from Portal applications.";
            wizard.SetupVariables.InstallerFolder      = Path.Combine(Utils.GetStringSetupParameter(args, "InstallerFolder"), "Enterprise Server");
            wizard.SetupVariables.InstallerType        = Utils.GetStringSetupParameter(args, "InstallerType").Replace("StandaloneServerSetup", "EnterpriseServer");
            wizard.SetupVariables.InstallationFolder   = Path.Combine(Utils.GetSystemDrive(), "WebsitePanel\\Enterprise Server");
            //web settings
            wizard.SetupVariables.UserAccount         = "WPEnterpriseServer";
            wizard.SetupVariables.UserPassword        = Guid.NewGuid().ToString("P");
            wizard.SetupVariables.UserDomain          = null;
            wizard.SetupVariables.WebSiteIP           = "127.0.0.1";
            wizard.SetupVariables.WebSitePort         = "9002";
            wizard.SetupVariables.WebSiteDomain       = string.Empty;
            wizard.SetupVariables.NewWebSite          = true;
            wizard.SetupVariables.NewVirtualDirectory = false;
            wizard.SetupVariables.UserMembership      = (wizard.SetupVariables.IISVersion.Major == 7) ?
                                                        new string[] { "IIS_IUSRS" } :
            new string[] { "IIS_WPG" };
            wizard.SetupVariables.ConfigurationFile = "web.config";
            //db settings
            wizard.SetupVariables.DatabaseServer = "localhost\\sqlexpress";
            wizard.SetupVariables.Database       = "WebsitePanel";
            wizard.SetupVariables.CreateDatabase = true;
            //serveradmin settings
            wizard.SetupVariables.UpdateServerAdminPassword = true;
            wizard.SetupVariables.ServerAdminPassword       = string.Empty;

            //Unattended setup
            LoadComponentVariablesFromSetupXml(wizard.SetupVariables.ComponentCode, wizard.SetupVariables.SetupXml, wizard.SetupVariables);

            //create component settings node
            wizard.SetupVariables.ComponentConfig = AppConfig.CreateComponentConfig(enterpriseServerId);
            //add default component settings
            CreateComponentSettingsFromSetupVariables(wizard.SetupVariables, enterpriseServerId);
            //save settings
            SetupVariables enterpiseServerSetupVariables = wizard.SetupVariables.Clone();
            ///////////////////////

            //create wizard pages
            IntroductionPage       introPage = new IntroductionPage();
            LicenseAgreementPage   licPage   = new LicenseAgreementPage();
            ConfigurationCheckPage page2     = new ConfigurationCheckPage();
            ConfigurationCheck     check1    = new ConfigurationCheck(CheckTypes.OperationSystem, "Operating System Requirement");
            ConfigurationCheck     check2    = new ConfigurationCheck(CheckTypes.IISVersion, "IIS Requirement");
            ConfigurationCheck     check3    = new ConfigurationCheck(CheckTypes.ASPNET, "ASP.NET Requirement");
            ConfigurationCheck     check4    = new ConfigurationCheck(CheckTypes.WPServer, "WebsitePanel Server Requirement");

            check4.SetupVariables = serverSetupVariables;
            ConfigurationCheck check5 = new ConfigurationCheck(CheckTypes.WPEnterpriseServer, "WebsitePanel Enterprise Server Requirement");

            check5.SetupVariables = enterpiseServerSetupVariables;
            ConfigurationCheck check6 = new ConfigurationCheck(CheckTypes.WPPortal, "WebsitePanel Portal Requirement");

            check6.SetupVariables = portalSetupVariables;

            page2.Checks.AddRange(new ConfigurationCheck[] { check1, check2, check3, check4, check5, check6 });
            WebPage page3 = new WebPage();

            //use portal settings for this page
            page3.SetupVariables = portalSetupVariables;
            DatabasePage page4 = new DatabasePage();

            //use ES settings for this page
            page4.SetupVariables = enterpiseServerSetupVariables;
            ServerAdminPasswordPage page5 = new ServerAdminPasswordPage();

            page5.SetupVariables = enterpiseServerSetupVariables;
            page5.NoteText       = "Note: Both serveradmin and admin accounts will use this password. You can always change password for serveradmin or admin accounts through control panel.";
            ExpressInstallPage page6 = new ExpressInstallPage();

            wizard.SetupVariables.ComponentName = string.Empty;

            //create install actions

            //************ Server **************
            InstallAction action = new InstallAction(ActionTypes.InitSetupVariables);

            action.Description    = "Installing WebsitePanel Server...";
            action.SetupVariables = serverSetupVariables;
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateWebSite);
            action.Description = "Creating web site...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.FolderPermissions);
            action.Description = "Configuring folder permissions...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.ServerPassword);
            action.Description = "Setting server password...";
            page6.Actions.Add(action);

            //************* Enterprise server *********
            action                = new InstallAction(ActionTypes.InitSetupVariables);
            action.Description    = "Installing WebsitePanel Enterprise Server...";
            action.SetupVariables = enterpiseServerSetupVariables;
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateWebSite);
            action.Description = "Creating web site...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CryptoKey);
            action.Description = "Generating crypto key...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateDatabase);
            action.Description = "Creating SQL Server database...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateDatabaseUser);
            action.Description = "Creating SQL Server user...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.ExecuteSql);
            action.Description = "Creating database objects...";
            action.Path        = "setup\\install_db.sql";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateWPServerLogin);
            action.Description = "Creating WebsitePanel login...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateServerAdminPassword);
            action.Description = "Updating serveradmin password...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateLicenseInformation);
            action.Description = "Updating license information...";
            page6.Actions.Add(action);

            //************* Portal *********
            action                = new InstallAction(ActionTypes.InitSetupVariables);
            action.Description    = "Installing WebsitePanel Portal...";
            action.SetupVariables = portalSetupVariables;
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyWebConfig);
            action.Description = "Copying web.config...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateWebSite);
            action.Description = "Creating web site...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateEnterpriseServerUrl);
            action.Description = "Updating site settings...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CreateShortcuts);
            action.Description = "Creating shortcut...";
            page6.Actions.Add(action);

            //************* Standalone server provisioning *********
            action = new InstallAction(ActionTypes.InitSetupVariables);
            action.SetupVariables = enterpiseServerSetupVariables;
            page6.Actions.Add(action);

            action             = new InstallAction(ActionTypes.ConfigureStandaloneServerData);
            action.Description = "Configuring server data...";
            action.Url         = portalSetupVariables.EnterpriseServerURL;
            page6.Actions.Add(action);

            SetupCompletePage page7 = new SetupCompletePage();

            page7.SetupVariables = portalSetupVariables;
            wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3, page4, page5, page6, page7 });
            wizard.LinkPages();
            wizard.SelectedPage = introPage;

            //show wizard
            IWin32Window owner = args["ParentForm"] as IWin32Window;

            return(form.ShowModal(owner));
        }