Installer: old to new update #1

This commit is contained in:
McMak 2015-05-19 14:15:06 +03:00
parent cfe3210b58
commit f34ff4f2c5
5 changed files with 2056 additions and 509 deletions

View file

@ -596,13 +596,13 @@
<CustomAction Id="CA_InstallWebFeatures" BinaryKey="Assembly_CA" DllEntry="InstallWebFeatures" Impersonate="no" /> <CustomAction Id="CA_InstallWebFeatures" BinaryKey="Assembly_CA" DllEntry="InstallWebFeatures" Impersonate="no" />
<!--Run corresponding install scripts.--> <!--Run corresponding install scripts.-->
<!--Server.--> <!--Server.-->
<CustomAction Id="CA_PropertyOnServerInstall" Property="CA_OnServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.ServerTitle);ComponentCode=server;ComponentDescription=$(var.ServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLSERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_SERVER_IP];WebSitePort=[PI_SERVER_PORT];WebSiteDomain=[PI_SERVER_HOST];UserDomain=[PI_SERVER_DOMAIN];UserAccount=[PI_SERVER_LOGIN];UserPassword=[PI_SERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" /> <CustomAction Id="CA_PropertyOnServerInstall" Property="CA_OnServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.ServerTitle);ComponentCode=server;ComponentDescription=$(var.ServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLSERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=Microsoft Windows Installer;InstallerType=MSI;InstallerPath=[OriginalDatabase];IISVersion=[];SetupXml=[];WebSiteIP=[PI_SERVER_IP];WebSitePort=[PI_SERVER_PORT];WebSiteDomain=[PI_SERVER_HOST];UserDomain=[PI_SERVER_DOMAIN];UserAccount=[PI_SERVER_LOGIN];UserPassword=[PI_SERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/> <CustomAction Id="CA_OnServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--EServer.--> <!--EServer.-->
<CustomAction Id="CA_PropertyOnEServerInstall" Property="CA_OnEServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.EServerTitle);ComponentCode=enterprise server;ComponentDescription=$(var.EServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLENTERPRISESERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_ESERVER_IP];WebSitePort=[PI_ESERVER_PORT];WebSiteDomain=[PI_ESERVER_HOST];UserDomain=[PI_ESERVER_DOMAIN];UserAccount=[PI_ESERVER_LOGIN];UserPassword=[PI_ESERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" /> <CustomAction Id="CA_PropertyOnEServerInstall" Property="CA_OnEServerInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.EServerTitle);ComponentCode=enterprise server;ComponentDescription=$(var.EServerDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLENTERPRISESERVERFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=Microsoft Windows Installer;InstallerType=MSI;InstallerPath=[OriginalDatabase];IISVersion=[];SetupXml=[];WebSiteIP=[PI_ESERVER_IP];WebSitePort=[PI_ESERVER_PORT];WebSiteDomain=[PI_ESERVER_HOST];UserDomain=[PI_ESERVER_DOMAIN];UserAccount=[PI_ESERVER_LOGIN];UserPassword=[PI_ESERVER_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnEServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnEServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/> <CustomAction Id="CA_OnEServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnEServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--Portal.--> <!--Portal.-->
<CustomAction Id="CA_PropertyOnPortalInstall" Property="CA_OnPortalInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.PortalTitle);ComponentCode=portal;ComponentDescription=$(var.PortalDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLPORTALFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=[];InstallerType=[];InstallerPath=[];IISVersion=[];SetupXml=[];WebSiteIP=[PI_PORTAL_IP];WebSitePort=[PI_PORTAL_PORT];WebSiteDomain=[PI_PORTAL_HOST];UserDomain=[PI_PORTAL_DOMAIN];UserAccount=[PI_PORTAL_LOGIN];UserPassword=[PI_PORTAL_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" /> <CustomAction Id="CA_PropertyOnPortalInstall" Property="CA_OnPortalInstall" Value="ApplicationName=$(var.NAME);ComponentName=$(var.PortalTitle);ComponentCode=portal;ComponentDescription=$(var.PortalDescription);Version=$(var.VERSION);InstallationFolder=[INSTALLPORTALFOLDER];InstallerFolder=[WEBSITEPANELDIR];Installer=Microsoft Windows Installer;InstallerType=MSI;InstallerPath=[OriginalDatabase];IISVersion=[];SetupXml=[];WebSiteIP=[PI_PORTAL_IP];WebSitePort=[PI_PORTAL_PORT];WebSiteDomain=[PI_PORTAL_HOST];UserDomain=[PI_PORTAL_DOMAIN];UserAccount=[PI_PORTAL_LOGIN];UserPassword=[PI_PORTAL_PASSWORD];ServerPassword=[SERVER_ACCESS_PASSWORD];EnterpriseServerUrl=[PI_ESERVER_URL];ServerAdminPassword=[SERVERADMIN_PASSWORD];DatabaseServer=[DB_SERVER];DatabaseName=[DB_DATABASE];DbServerAdmin=[DB_LOGIN];DbServerAdminPassword=[DB_PASSWORD];BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnPortalInstall" BinaryKey ="Assembly_CA" DllEntry="OnPortalInstall" Impersonate="no" Execute="deferred" HideTarget="no"/> <CustomAction Id="CA_OnPortalInstall" BinaryKey ="Assembly_CA" DllEntry="OnPortalInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--Run corresponding uninstall scripts.--> <!--Run corresponding uninstall scripts.-->
<CustomAction Id="CA_PropertyOnServerRemove" Property="CA_OnServerRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=server;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" /> <CustomAction Id="CA_PropertyOnServerRemove" Property="CA_OnServerRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=server;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />

View file

@ -3928,6 +3928,13 @@ namespace WebsitePanel.Setup.Internal
{ {
try try
{ {
XmlDocumentMerge.KeyAttributes = new List<string> { "name", "id", "key", "pageID", "localName", "xmlns", "privatePath", "moduleDefinitionID", "ref", "verb;path", "controlRenderingCompatibilityVersion;clientIDMode" };
XmlDocumentMerge.FrozenAttributes = new List<XmlDocumentMerge.FrozenAttrTag>
{
new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/microsoft.web.services3/security/securityTokenManager/add", Attributes = new List<string>() {"localName"} },
new XmlDocumentMerge.FrozenAttrTag(true) { Path="compilation", Attributes = new List<string>() {"targetFramework"} },
new XmlDocumentMerge.FrozenAttrTag() { Path="configuration/startup/supportedRuntime", Attributes = new List<string>() {"version", "sku" } }
};
Log.WriteStart("RestoreXmlConfigs"); Log.WriteStart("RestoreXmlConfigs");
var Backup = BackupRestore.Find(Ctx.InstallerFolder, Global.DefaultProductName, Ctx.ComponentName); var Backup = BackupRestore.Find(Ctx.InstallerFolder, Global.DefaultProductName, Ctx.ComponentName);
switch(Ctx.ComponentCode) switch(Ctx.ComponentCode)
@ -3940,21 +3947,13 @@ namespace WebsitePanel.Setup.Internal
case Global.EntServer.ComponentCode: case Global.EntServer.ComponentCode:
{ {
Backup.XmlFiles.Add("Web.config"); Backup.XmlFiles.Add("Web.config");
Backup.XmlFiles.Add(@"bin\WebsitePanel.SchedulerService.exe.config");
} }
break; break;
case Global.WebPortal.ComponentCode: case Global.WebPortal.ComponentCode:
{ {
Backup.XmlFiles.Add("Web.config"); Backup.XmlFiles.Add("Web.config");
Backup.XmlFiles.Add(@"App_Data\Countries.config");
Backup.XmlFiles.Add(@"App_Data\CountryStates.config");
Backup.XmlFiles.Add(@"App_Data\Ecommerce_Modules.config");
Backup.XmlFiles.Add(@"App_Data\Ecommerce_Pages.config");
Backup.XmlFiles.Add(@"App_Data\ESModule_ControlsHierarchy.config");
Backup.XmlFiles.Add(@"App_Data\ModulesData.config");
Backup.XmlFiles.Add(@"App_Data\SiteSettings.config"); Backup.XmlFiles.Add(@"App_Data\SiteSettings.config");
Backup.XmlFiles.Add(@"App_Data\SupportedLocales.config");
Backup.XmlFiles.Add(@"App_Data\SupportedThemes.config");
Backup.XmlFiles.Add(@"App_Data\WebsitePanel_Modules.config");
Backup.XmlFiles.Add(@"App_Data\WebsitePanel_Pages.config"); Backup.XmlFiles.Add(@"App_Data\WebsitePanel_Pages.config");
} }
break; break;

View file

@ -8,14 +8,46 @@ namespace WebsitePanel.Setup.Internal
{ {
public static class XmlDocumentMerge public static class XmlDocumentMerge
{ {
public class AttrTag
{
public AttrTag()
: this(null)
{
}
public AttrTag(params string[] Attributes)
{
this.Attributes = Attributes;
Priority = Attributes == null ? 0 : (ulong)Attributes.LongLength;
}
public ulong Priority { get; private set; }
public string[] Attributes;
}
public class FrozenAttrTag
{
public FrozenAttrTag()
: this(false)
{
}
public FrozenAttrTag(bool Relative)
{
IsRelative = Relative;
}
public string Path { get; set; }
public IList<string> Attributes { get; set; }
public bool IsRelative { get; private set; }
}
const string SuccessFormat = "Success: {0}."; const string SuccessFormat = "Success: {0}.";
const string ErrorFormat = "Error: {0}."; const string ErrorFormat = "Error: {0}.";
const string MergeCompleted = "XmlDocumentMerge completed"; const string MergeCompleted = "XmlDocumentMerge completed";
static XmlDocumentMerge() static XmlDocumentMerge()
{ {
KeyAttributes = new List<string> { "name", "id", "key" }; KeyAttributes = new List<string>();
FrozenAttributes = new List<FrozenAttrTag>();
} }
public static List<string> KeyAttributes { get; set; } public static IList<string> KeyAttributes { get; set; }
public static IList<FrozenAttrTag> FrozenAttributes { get; set; }
public static string Process(string Src, string Dst, string SaveTo = "") public static string Process(string Src, string Dst, string SaveTo = "")
{ {
var Result = string.Empty; var Result = string.Empty;
@ -83,57 +115,97 @@ namespace WebsitePanel.Setup.Internal
} }
private static string NodeView(XPathNavigator Navi) private static string NodeView(XPathNavigator Navi)
{ {
foreach (var Attr in KeyAttributes) foreach (var Item in GetProcessingChain(KeyAttributes))
{ {
var Value = Navi.GetAttribute(Attr, string.Empty); string Result = string.Empty;
if (!string.IsNullOrWhiteSpace(Value)) foreach (var Attr in Item.Attributes)
return string.Format("{0}[@{1}='{2}']", Navi.Name, Attr, Value); {
var Value = Navi.GetAttribute(Attr, string.Empty);
if (string.IsNullOrWhiteSpace(Value))
{
Result = string.Empty;
continue;
}
else
{
if (string.IsNullOrWhiteSpace(Result))
Result = string.Format("@{0}='{1}'", Attr, Value);
else
Result = string.Format("{0} and @{1}='{2}'", Result, Attr, Value);
}
}
if (!string.IsNullOrWhiteSpace(Result))
return string.Format("{0}[{1}]", Navi.Name, Result);
} }
return Navi.Name; return Navi.Name;
} }
private static void Merge(XPathNavigator DstNavi, XmlDocument SrcDoc, string Parent) private static void Merge(XPathNavigator DstNavi, XmlDocument SrcDoc, string Parent)
{ {
if (DstNavi.NodeType == XPathNodeType.Element) var Current = NodePath(Parent, NodeView(DstNavi));
if (!string.IsNullOrWhiteSpace(Current))
{ {
var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, NodeView(DstNavi))); if (DstNavi.NodeType == XPathNodeType.Element)
if (SrcElem != null)
{ {
if (DstNavi.MoveToFirstAttribute()) var SrcElem = SrcDoc.SelectSingleNode(Current);
if (SrcElem != null)
{ {
do var Frozen = GetFrozenAttributes(Current, FrozenAttributes);
if (DstNavi.MoveToFirstAttribute())
{ {
var SrcElemAttr = SrcElem.Attributes[DstNavi.LocalName]; do
if (SrcElemAttr != null) {
DstNavi.SetValue(SrcElemAttr.Value); var SrcElemAttr = SrcElem.Attributes[DstNavi.LocalName];
if (SrcElemAttr != null && CanProcess(DstNavi.LocalName, Frozen))
DstNavi.SetValue(SrcElemAttr.Value);
}
while (DstNavi.MoveToNextAttribute());
DstNavi.MoveToParent();
} }
while (DstNavi.MoveToNextAttribute());
DstNavi.MoveToParent();
} }
} }
} else if (DstNavi.NodeType == XPathNodeType.Text)
else if (DstNavi.NodeType == XPathNodeType.Text)
{
var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, NodeView(DstNavi)));
if (SrcElem != null)
DstNavi.SetValue(SrcElem.InnerText);
}
var Here = NodeView(DstNavi);
if (DstNavi.MoveToFirstChild())
{
do
{ {
Merge(DstNavi, SrcDoc, NodePath(Parent, Here)); var SrcElem = SrcDoc.SelectSingleNode(Current);
if (SrcElem != null)
DstNavi.SetValue(SrcElem.InnerText);
}
if (DstNavi.MoveToFirstChild())
{
do
{
Merge(DstNavi, SrcDoc, Current);
}
while (DstNavi.MoveToNext());
DstNavi.MoveToParent();
}
else if (DstNavi.NodeType == XPathNodeType.Element)
{
var SrcElem = SrcDoc.SelectSingleNode(Current);
if (SrcElem != null && !string.IsNullOrWhiteSpace(SrcElem.InnerXml))
foreach (XmlNode Child in SrcElem.ChildNodes)
DstNavi.AppendChild(Child.CloneNode(true).CreateNavigator());
} }
while (DstNavi.MoveToNext());
DstNavi.MoveToParent();
}
else if (DstNavi.NodeType == XPathNodeType.Element)
{
var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, Here));
if (SrcElem != null && !string.IsNullOrWhiteSpace(SrcElem.InnerXml))
foreach (XmlNode Child in SrcElem.ChildNodes)
DstNavi.AppendChild(Child.CloneNode(true).CreateNavigator());
} }
} }
private static IList<AttrTag> GetProcessingChain(IEnumerable<string> Attributes)
{
var Delimiter = ";";
var Chain = new List<AttrTag>();
foreach (var Attribute in Attributes)
Chain.Add(new AttrTag(Attribute.Split(new string[] { Delimiter }, StringSplitOptions.RemoveEmptyEntries)));
Chain.Sort(delegate(AttrTag a, AttrTag b) { return a.Priority == b.Priority ? 0 : a.Priority > b.Priority ? -1 : 1; });
return Chain;
}
private static FrozenAttrTag GetFrozenAttributes(string Path, IEnumerable<FrozenAttrTag> Frozens)
{
foreach (var Frozen in Frozens)
if (Frozen.IsRelative ? Path.IndexOf(Frozen.Path, 1) == -1 : Path.StartsWith(Frozen.Path))
return Frozen;
return null;
}
private static bool CanProcess(string Name, FrozenAttrTag Frozen)
{
return Frozen == null ? true : !Frozen.Attributes.Contains(Name);
}
} }
} }

View file

@ -44364,7 +44364,7 @@ Hello #user.FirstName#,
</p> </p>
<p> <p>
Please, find below details of your control panel account. Please, find below details of your control panel account. The one time password was generated for you. You should change the password after login.
</p> </p>
<h1>Control Panel URL</h1> <h1>Control Panel URL</h1>
@ -44373,7 +44373,7 @@ Please, find below details of your control panel account.
<tr> <tr>
<th>Control Panel URL</th> <th>Control Panel URL</th>
<th>Username</th> <th>Username</th>
<th>Password</th> <th>One Time Password</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -44411,11 +44411,11 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property
Hello #user.FirstName#, Hello #user.FirstName#,
Please, find below details of your control panel account. Please, find below details of your control panel account. The one time password was generated for you. You should change the password after login.
Control Panel URL: http://panel.AcmeHosting.com Control Panel URL: http://panel.AcmeHosting.com
Username: #user.Username# Username: #user.Username#
Password: #user.Password# One Time Password: #user.Password#
If you have any questions regarding your hosting account, feel free to contact our support department at any time. If you have any questions regarding your hosting account, feel free to contact our support department at any time.

File diff suppressed because it is too large Load diff