Improvements WiX UI, installed component detection, update via UI.
This commit is contained in:
parent
473fd3c3ef
commit
ce508b178c
6 changed files with 127 additions and 18 deletions
|
@ -563,8 +563,8 @@
|
|||
<Property Id="COMPFOUND_SERVER" Secure="yes" Value="0" />
|
||||
<Property Id="COMPFOUND_ESERVER" Secure="yes" Value="0" />
|
||||
<Property Id="COMPFOUND_PORTAL" Secure="yes" Value="0" />
|
||||
<Property Id="COMPFOUND_WDPORTAL" Secure="yes" Value="0" />
|
||||
<Property Id="COMPFOUND_SCHEDULER" Secure="yes" Value="0" />
|
||||
<Property Id="COMPFOUND_WDPORTAL" Secure="yes" Value="1" />
|
||||
<Property Id="COMPFOUND_SCHEDULER" Secure="yes" Value="1" />
|
||||
<!--CustomActions.-->
|
||||
<!-- <CustomAction Id='AlreadyUpdated' Error='Product has already been updated to $(var.VERSION) or newer.' />
|
||||
<CustomAction Id='NoDowngrade' Error='A later version of [ProductName] is already installed.' /> -->
|
||||
|
@ -649,7 +649,7 @@
|
|||
<Custom Action="CA_PropertyMaintenancePortal" After="InstallInitialize"><![CDATA[&PortalFeature=-1 AND !PortalFeature=3]]></Custom>
|
||||
<Custom Action="CA_MaintenancePortal" After="CA_PropertyMaintenancePortal"><![CDATA[&PortalFeature=-1 AND !PortalFeature=3]]></Custom>
|
||||
<!---->
|
||||
<Custom Action="CA_PreFillSettings" After="SetWEBSITEPANELDIR">1</Custom>
|
||||
<!--<Custom Action="CA_PreFillSettings" After="SetWEBSITEPANELDIR">1</Custom>-->
|
||||
</InstallExecuteSequence>
|
||||
<InstallUISequence>
|
||||
<Custom Action="CA_PreFillSettings" Before="CA_InstallWebFeatures" />
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -8,7 +8,7 @@ using Ionic.Zip;
|
|||
|
||||
namespace WebsitePanel.Setup.Internal
|
||||
{
|
||||
class BackupRestore
|
||||
public class BackupRestore
|
||||
{
|
||||
struct DirectoryTag
|
||||
{
|
||||
|
@ -47,13 +47,11 @@ 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 });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var ByVersion = from i in DirList where i.Version == (from v in DirList select v.Version).Max() select i;
|
||||
var ByDate = from i in ByVersion where i.Date == (from v in ByVersion select v.Date).Max() select i;
|
||||
var SrcTag = ByDate.First();
|
||||
|
@ -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);
|
||||
|
|
|
@ -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<string, string> 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<Session, string, string, bool> 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");
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
<HintPath>..\..\Lib\Microsoft.Web.Administration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Configuration.Install" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue