diff --git a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs
index 273fbfaf..6d4f921b 100644
--- a/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs
+++ b/WebsitePanel.Installer/Sources/Setup.WIXInstaller/Product.wxs
@@ -563,8 +563,8 @@
-
-
+
+
@@ -599,7 +599,7 @@
-
+
@@ -607,14 +607,14 @@
-
+
-
+
@@ -649,7 +649,7 @@
- 1
+
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
index 6bf1759f..e0215046 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Common/Global.cs
@@ -39,6 +39,7 @@ namespace WebsitePanel.Setup
public const string DefaultInstallPathRoot = @"C:\WebsitePanel";
public const string LoopbackIPv4 = "127.0.0.1";
public const string InstallerProductCode = "cfg core";
+ public const string DefaultProductName = "WebsitePanel";
public abstract class Parameters
{
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs
index f0f28301..5eeb3a0c 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/Adapter.cs
@@ -170,9 +170,13 @@ namespace WebsitePanel.Setup.Internal
}
public static string GetComponentID(SetupVariables Ctx)
{
- var XmlPath = string.Format("//component[.//add/@key='ComponentCode' and .//add/@value='{0}']", Ctx.ComponentCode);
+ return GetComponentID(GetFullConfigPath(Ctx), Ctx.ComponentCode);
+ }
+ public static string GetComponentID(string Cfg, string ComponentCode)
+ {
+ var XmlPath = string.Format("//component[.//add/@key='ComponentCode' and .//add/@value='{0}']", ComponentCode);
var Xml = new XmlDocument();
- Xml.Load(GetFullConfigPath(Ctx));
+ Xml.Load(Cfg);
var Node = Xml.SelectSingleNode(XmlPath) as XmlElement;
return Node == null ? null : Node.GetAttribute("id");
}
@@ -3926,20 +3930,20 @@ namespace WebsitePanel.Setup.Internal
try
{
Log.WriteStart("RestoreXmlConfigs");
- var Backup = BackupRestore.Find(Ctx.InstallerFolder, "WebsitePanel", Ctx.ComponentName);
+ var Backup = BackupRestore.Find(Ctx.InstallerFolder, Global.DefaultProductName, Ctx.ComponentName);
switch(Ctx.ComponentCode)
{
- case "server":
+ case Global.Server.ComponentCode:
{
Backup.XmlFiles.Add("Web.config");
}
break;
- case "enterpriseserver":
+ case Global.EntServer.ComponentCode:
{
Backup.XmlFiles.Add("Web.config");
}
break;
- case "portal":
+ case Global.WebPortal.ComponentCode:
{
Backup.XmlFiles.Add("Web.config");
Backup.XmlFiles.Add(@"App_Data\Countries.config");
@@ -3957,9 +3961,7 @@ namespace WebsitePanel.Setup.Internal
break;
}
var MainCfg = Path.Combine(Ctx.InstallerFolder, BackupRestore.MainConfig);
- var XCfg = new XmlDocument();
- XCfg.Load(MainCfg);
- if (XCfg.SelectSingleNode("//components").ChildNodes.Count == 0)
+ if (!BackupRestore.HaveChild(MainCfg, "//components"))
{
Log.WriteInfo("Restoring main config...");
XmlDocumentMerge.Process(Backup.BackupMainConfigFile, MainCfg);
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/BackupRestore.cs b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/BackupRestore.cs
index 5778175f..91890d6e 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/BackupRestore.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.Setup/Internal/BackupRestore.cs
@@ -8,7 +8,7 @@ using Ionic.Zip;
namespace WebsitePanel.Setup.Internal
{
- class BackupRestore
+ public class BackupRestore
{
struct DirectoryTag
{
@@ -47,9 +47,7 @@ namespace WebsitePanel.Setup.Internal
Version BckpVersion;
var StrVersion = VersionName.Substring(FullId.Length);
if (Version.TryParse(StrVersion, out BckpVersion))
- {
DirList.Add(new DirectoryTag { Name = VersionItem, Date = date, Version = BckpVersion });
- }
}
}
}
@@ -61,6 +59,16 @@ namespace WebsitePanel.Setup.Internal
}
return Result;
}
+ public static bool HaveChild(string XmlDocPath, string XmlPath)
+ {
+ var Result = false;
+ var XCfg = new XmlDocument();
+ XCfg.Load(XmlDocPath);
+ var Node = XCfg.SelectSingleNode(XmlPath);
+ if (Node != null)
+ Result = Node.ChildNodes.Count > 0;
+ return Result;
+ }
private static string GetComponentRoot(DirectoryTag DirTag, string Id)
{
var Cfg = GetMainConfig(DirTag);
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs
index 3bc32d46..0ff7782e 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/CustomAction.cs
@@ -27,6 +27,7 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
+using System.Configuration;
using System.Configuration.Install;
using System.Data;
using System.Data.Sql;
@@ -87,6 +88,102 @@ namespace WebsitePanel.WIXInstaller
var Ctx = session;
Ctx.AttachToSetupLog();
Log.WriteStart("PreFillSettings");
+ var WSP = Ctx["WEBSITEPANELDIR"];
+ var CfgStr = string.Empty;
+ Func GetCfg = (string CfgDir) =>
+ {
+ if (Directory.Exists(CfgDir))
+ {
+ var CfgFile = Path.Combine(CfgDir, BackupRestore.MainConfig);
+ if (File.Exists(CfgFile) && BackupRestore.HaveChild(CfgFile, "//components"))
+ return CfgFile;
+ else
+ {
+ var Names = new string[] { Global.Server.ComponentName, Global.EntServer.ComponentName, Global.WebPortal.ComponentName };
+ foreach (var Name in Names)
+ {
+ var Backup = BackupRestore.Find(CfgDir, Global.DefaultProductName, Name);
+ if (Backup != null && BackupRestore.HaveChild(Backup.BackupMainConfigFile, "//components"))
+ return CfgStr = Backup.BackupMainConfigFile;
+ }
+ }
+ }
+ return string.Empty;
+ };
+ Func SetProperty = (Session CtxSession, string Prop, string Value) =>
+ {
+ if(!string.IsNullOrWhiteSpace(Value))
+ {
+ CtxSession[Prop] = Value;
+ return true;
+ }
+ return false;
+ };
+ CfgStr = GetCfg(WSP);
+ if(string.IsNullOrWhiteSpace(CfgStr))
+ {
+ var Drives = from Drive in DriveInfo.GetDrives() where Drive.DriveType == DriveType.Fixed select Drive;
+ foreach(var Drive in Drives)
+ {
+ var Dir = Path.Combine(Drive.RootDirectory.FullName, Global.DefaultProductName);
+ CfgStr = GetCfg(Dir);
+ if (!string.IsNullOrWhiteSpace(CfgStr))
+ break;
+ }
+ }
+ if (!string.IsNullOrWhiteSpace(CfgStr))
+ {
+ var EServerUrl = string.Empty;
+ AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = CfgStr });
+ var CtxVars = new SetupVariables();
+ CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.Server.ComponentCode);
+ if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
+ {
+ AppConfig.LoadComponentSettings(CtxVars);
+ Ctx["COMPFOUND_SERVER"] = "1";
+ SetProperty(Ctx, "PI_SERVER_IP", CtxVars.WebSiteIP);
+ SetProperty(Ctx, "PI_SERVER_PORT", CtxVars.WebSitePort);
+ SetProperty(Ctx, "PI_SERVER_HOST", CtxVars.WebSiteDomain);
+ SetProperty(Ctx, "PI_SERVER_LOGIN", CtxVars.UserAccount);
+ SetProperty(Ctx, "PI_SERVER_PASSWORD", CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_SERVER_PASSWORD_CONFIRM",CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_SERVER_DOMAIN", CtxVars.UserDomain);
+ SetProperty(Ctx, "SERVER_ACCESS_PASSWORD", CtxVars.ServerPassword);
+ SetProperty(Ctx, "SERVER_ACCESS_PASSWORD_CONFIRM", CtxVars.ServerPassword);
+ }
+ CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.EntServer.ComponentCode);
+ if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
+ {
+ AppConfig.LoadComponentSettings(CtxVars);
+ Ctx["COMPFOUND_ESERVER"] = "1";
+ SetProperty(Ctx, "PI_ESERVER_IP", CtxVars.WebSiteIP);
+ SetProperty(Ctx, "PI_ESERVER_PORT", CtxVars.WebSitePort);
+ SetProperty(Ctx, "PI_ESERVER_HOST", CtxVars.WebSiteDomain);
+ SetProperty(Ctx, "PI_ESERVER_LOGIN", CtxVars.UserAccount);
+ SetProperty(Ctx, "PI_ESERVER_PASSWORD", CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_ESERVER_PASSWORD_CONFIRM", CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_ESERVER_DOMAIN", CtxVars.UserDomain);
+ SetProperty(Ctx, "SERVERADMIN_PASSWORD", CtxVars.ServerAdminPassword);
+ SetProperty(Ctx, "SERVERADMIN_PASSWORD_CONFIRM", CtxVars.ServerAdminPassword);
+ EServerUrl = string.Format("http://{0}:{1}", CtxVars.WebSiteIP, CtxVars.WebSitePort);
+ }
+ CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.WebPortal.ComponentCode);
+ if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
+ {
+ AppConfig.LoadComponentSettings(CtxVars);
+ Ctx["COMPFOUND_PORTAL"] = "1";
+ SetProperty(Ctx, "PI_PORTAL_IP", CtxVars.WebSiteIP);
+ SetProperty(Ctx, "PI_PORTAL_PORT", CtxVars.WebSitePort);
+ SetProperty(Ctx, "PI_PORTAL_HOST", CtxVars.WebSiteDomain);
+ SetProperty(Ctx, "PI_PORTAL_LOGIN", CtxVars.UserAccount);
+ SetProperty(Ctx, "PI_PORTAL_PASSWORD", CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_PORTAL_PASSWORD_CONFIRM", CtxVars.UserPassword);
+ SetProperty(Ctx, "PI_PORTAL_DOMAIN", CtxVars.UserDomain);
+ if (!SetProperty(Ctx, "PI_ESERVER_URL", CtxVars.EnterpriseServerURL))
+ if (!SetProperty(Ctx, "PI_ESERVER_URL", EServerUrl))
+ SetProperty(Ctx, "PI_ESERVER_URL", Global.WebPortal.DefaultEntServURL);
+ }
+ }
TryApllyNewPassword(Ctx, "PI_SERVER_PASSWORD");
TryApllyNewPassword(Ctx, "PI_ESERVER_PASSWORD");
TryApllyNewPassword(Ctx, "PI_PORTAL_PASSWORD");
diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/WebsitePanel.WIXInstaller.csproj b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/WebsitePanel.WIXInstaller.csproj
index 1a4b44b7..0aee4f2c 100644
--- a/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/WebsitePanel.WIXInstaller.csproj
+++ b/WebsitePanel.Installer/Sources/WebsitePanel.WIXInstaller/WebsitePanel.WIXInstaller.csproj
@@ -47,6 +47,7 @@
..\..\Lib\Microsoft.Web.Administration.dll
+