This commit is contained in:
Virtuworks 2015-05-21 09:53:43 -04:00
commit 72654d111e
17 changed files with 2565 additions and 891 deletions

View file

@ -10,38 +10,38 @@
<Media Id="1" EmbedCab="yes" Cabinet="websitepanel_cab" />
<!-- Use WIX_UPGRADE_DETECTED -->
<MajorUpgrade DowngradeErrorMessage="A later version of [ProductName] is already installed."/>
<Feature Id ="WebsitePanel" Title="Website Panel" Level="1" ConfigurableDirectory="WEBSITEPANELDIR" AllowAdvertise="no" Display="expand"
<Feature Id ="WebsitePanel" Title="Website Panel" Level="1" ConfigurableDirectory="WSP_INSTALL_DIR" AllowAdvertise="no" Display="expand"
Description="WebsitePanel is a complete portal for Cloud Computing Companies and IT Providers to automate the provisioning of a full suite of services on Windows servers.">
<ComponentGroupRef Id="WebsitePanelFiles" />
<Feature Id="ServerFeature" Title="$(var.ServerTitle)" Level="1" ConfigurableDirectory="INSTALLSERVERFOLDER" AllowAdvertise="no"
<Feature Id="ServerFeature" Title="$(var.ServerTitle)" Level="1" ConfigurableDirectory="PI_SERVER_INSTALL_DIR" AllowAdvertise="no"
Description="$(var.ServerDescription)">
<ComponentGroupRef Id="ServerFiles" />
</Feature>
<Feature Id="EnterpriseServerFeature" Title="$(var.EServerTitle)" Level="1" ConfigurableDirectory="INSTALLENTERPRISESERVERFOLDER" AllowAdvertise="no"
<Feature Id="EnterpriseServerFeature" Title="$(var.EServerTitle)" Level="1" ConfigurableDirectory="PI_ESERVER_INSTALL_DIR" AllowAdvertise="no"
Description="$(var.ServerDescription)">
<ComponentGroupRef Id="EnterpriseServerFiles" />
<ComponentGroupRef Id="DatabaseInstallation"/>
</Feature>
<Feature Id="PortalFeature" Title="$(var.PortalTitle)" Level="1" ConfigurableDirectory="INSTALLPORTALFOLDER" AllowAdvertise="no"
<Feature Id="PortalFeature" Title="$(var.PortalTitle)" Level="1" ConfigurableDirectory="PI_PORTAL_INSTALL_DIR" AllowAdvertise="no"
Description="$(var.PortalDescription)">
<ComponentGroupRef Id="PortalFiles" />
</Feature>
<Feature Id="SchedulerServiceFeature" Title="Scheduler Service" Level="1" ConfigurableDirectory="INSTALLSERVICEFOLDER" AllowAdvertise="no" Description="WebsitePanel Scheduler Service">
<Feature Id="SchedulerServiceFeature" Title="Scheduler Service" Level="1" ConfigurableDirectory="PI_SCHEDULER_INSTALL_DIR" AllowAdvertise="no" Description="WebsitePanel Scheduler Service">
<ComponentGroupRef Id="SchedulerServiceFiles" />
</Feature>
<Feature Id ="WDPortalFeature" Title="WebDAV Portal" Level="100" ConfigurableDirectory="INSTALLWEBDAVPORTALFOLDER" AllowAdvertise ="no"
<Feature Id ="WDPortalFeature" Title="WebDAV Portal" Level="100" ConfigurableDirectory="PI_WDPORTAL_INSTALL_DIR" AllowAdvertise ="no"
Description="WebsitePanel WebDAV Portal">
<ComponentGroupRef Id="WebDavPortalFiles"/>
</Feature>
</Feature>
<!--Destinations.-->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="WEBSITEPANELDIR" Name="WebsitePanel">
<Directory Id="INSTALLSERVICEFOLDER" Name="SchedulerService" />
<Directory Id="INSTALLSERVERFOLDER" Name="Server" />
<Directory Id="INSTALLENTERPRISESERVERFOLDER" Name="Enterprise Server" />
<Directory Id="INSTALLPORTALFOLDER" Name="Portal" />
<Directory Id="INSTALLWEBDAVPORTALFOLDER" Name="WebDavPortal"/>
<Directory Id="WSP_INSTALL_DIR" Name="WebsitePanel">
<Directory Id="PI_SERVER_INSTALL_DIR" Name="Server" />
<Directory Id="PI_ESERVER_INSTALL_DIR" Name="Enterprise Server" />
<Directory Id="PI_PORTAL_INSTALL_DIR" Name="Portal" />
<Directory Id="PI_SCHEDULER_INSTALL_DIR" Name="SchedulerService" />
<Directory Id="PI_WDPORTAL_INSTALL_DIR" Name="WebDavPortal"/>
</Directory>
</Directory>
<EnsureTable Id="ComboBox"/>
@ -565,11 +565,18 @@
<Property Id="COMPFOUND_PORTAL" Secure="yes" Value="0" />
<Property Id="COMPFOUND_WDPORTAL" Secure="yes" Value="1" />
<Property Id="COMPFOUND_SCHEDULER" Secure="yes" Value="1" />
<Property Id="COMPFOUND_SERVER_ID" Secure="yes" />
<Property Id="COMPFOUND_ESERVER_ID" Secure="yes" />
<Property Id="COMPFOUND_PORTAL_ID" Secure="yes" />
<Property Id="COMPFOUND_WDPORTAL_ID" Secure="yes" />
<Property Id="COMPFOUND_SCHEDULER_ID" Secure="yes" />
<Property Id="COMPFOUND_SERVER_MAIN_CFG" Secure="yes" />
<Property Id="COMPFOUND_ESERVER_MAIN_CFG" Secure="yes" />
<Property Id="COMPFOUND_PORTAL_MAIN_CFG" Secure="yes" />
<Property Id="COMPFOUND_WDPORTAL_MAIN_CFG" Secure="yes" />
<Property Id="COMPFOUND_SCHEDULER_MAIN_CFG" Secure="yes" />
<!--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.' /> -->
<CustomAction Id="CA_CheckConnectionUI" BinaryKey="Assembly_CA" DllEntry="CheckConnectionUI" />
<!-- <CustomAction Id='CA_PropertyFinalizeInstall' Property='CA_FinalizeInstall' Value='ConnectionString=[CONNECTIONSTRING];PreviousConnectionString=[PREVIOUSCONNECTIONSTRING];ServiceFolder=[SERVICEFOLDER];PreviousCryptoKey=[PREVIOUSCRYPTOKEY]' Return="check"/> -->
<CustomAction Id="CA_PropertyFinalizeInstall" Property="CA_FinalizeInstall" Value="" Return="check"/>
<CustomAction Id="CA_FinalizeInstall" BinaryKey ="Assembly_CA" DllEntry="FinalizeInstall" Impersonate="no" Execute="deferred" Return="check" HideTarget="yes"/>
<CustomAction Id="CA_PreInstallationAction" BinaryKey="Assembly_CA" DllEntry="PreInstallationAction" />
@ -595,38 +602,54 @@
<CustomAction Id="CA_SetEServerUrlUI" BinaryKey ="Assembly_CA" DllEntry="SetEServerUrlUI" />
<CustomAction Id="CA_InstallWebFeatures" BinaryKey="Assembly_CA" DllEntry="InstallWebFeatures" Impersonate="no" />
<!--Run corresponding install scripts.-->
<!-- Prepare and backup when upgrading from old to new installer type.
Yes, session variables and custom action data are identical almost for corresponding WebsitePanel components in prepare and install scripts.
Prepare scripts must be run before normal installation process and file copying.-->
<CustomAction Id="CA_PropertyOnServerPrepare" Property="CA_OnServerPrepare" Value ="ApplicationName=$(var.NAME);ComponentName=$(var.ServerTitle);ComponentCode=server;ComponentDescription=$(var.ServerDescription);Version=$(var.VERSION);InstallationFolder=[PI_SERVER_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_SERVER_ID];MainConfig=[COMPFOUND_SERVER_MAIN_CFG]" />
<CustomAction Id="CA_OnServerPrepare" BinaryKey="Assembly_CA" DllEntry="OnServerPrepare" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnEServerPrepare" Property="CA_OnEServerPrepare" Value ="ApplicationName=$(var.NAME);ComponentName=$(var.EServerTitle);ComponentCode=enterprise server;ComponentDescription=$(var.EServerDescription);Version=$(var.VERSION);InstallationFolder=[PI_ESERVER_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_ESERVER_ID];MainConfig=[COMPFOUND_ESERVER_MAIN_CFG]" />
<CustomAction Id="CA_OnEServerPrepare" BinaryKey="Assembly_CA" DllEntry="OnEServerPrepare" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnPortalPrepare" Property="CA_OnPortalPrepare" Value ="ApplicationName=$(var.NAME);ComponentName=$(var.PortalTitle);ComponentCode=portal;ComponentDescription=$(var.PortalDescription);Version=$(var.VERSION);InstallationFolder=[PI_PORTAL_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_PORTAL_ID];MainConfig=[COMPFOUND_PORTAL_MAIN_CFG]" />
<CustomAction Id="CA_OnPortalPrepare" BinaryKey="Assembly_CA" DllEntry="OnPortalPrepare" Impersonate="no" Execute="deferred" HideTarget="no" />
<!--Install scripts.-->
<!--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=[PI_SERVER_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_SERVER_ID]" />
<CustomAction Id="CA_OnServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--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=[PI_ESERVER_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_ESERVER_ID]" />
<CustomAction Id="CA_OnEServerInstall" BinaryKey ="Assembly_CA" DllEntry="OnEServerInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--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=[PI_PORTAL_INSTALL_DIR];InstallerFolder=[WSP_INSTALL_DIR];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=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE];ComponentId=[COMPFOUND_PORTAL_ID]" />
<CustomAction Id="CA_OnPortalInstall" BinaryKey ="Assembly_CA" DllEntry="OnPortalInstall" Impersonate="no" Execute="deferred" HideTarget="no"/>
<!--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=[WSP_INSTALL_DIR];ComponentCode=server;BaseDirectory=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnServerRemove" BinaryKey="Assembly_CA" DllEntry="OnServerRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnEServerRemove" Property="CA_OnEServerRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=enterprise server;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_PropertyOnEServerRemove" Property="CA_OnEServerRemove" Value="InstallerFolder=[WSP_INSTALL_DIR];ComponentCode=enterprise server;BaseDirectory=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnEServerRemove" BinaryKey="Assembly_CA" DllEntry="OnEServerRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyOnPortalRemove" Property="CA_OnPortalRemove" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=portal;BaseDirectory=[WEBSITEPANELDIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_PropertyOnPortalRemove" Property="CA_OnPortalRemove" Value="InstallerFolder=[WSP_INSTALL_DIR];ComponentCode=portal;BaseDirectory=[WSP_INSTALL_DIR];MODE_UP=[WIX_UPGRADE_DETECTED];MODE_RUP=[UPGRADINGPRODUCTCODE]" />
<CustomAction Id="CA_OnPortalRemove" BinaryKey="Assembly_CA" DllEntry="OnPortalRemove" Impersonate="no" Execute="deferred" HideTarget="no" />
<!--Maintenance mode.-->
<CustomAction Id="CA_PropertyMaintenanceServer" Property="CA_MaintenanceServer" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=server;BaseDirectory=[WEBSITEPANELDIR];ServerPassword=[SERVER_ACCESS_PASSWORD]" />
<CustomAction Id="CA_PropertyMaintenanceServer" Property="CA_MaintenanceServer" Value="InstallerFolder=[WSP_INSTALL_DIR];ComponentCode=server;BaseDirectory=[WSP_INSTALL_DIR];ServerPassword=[SERVER_ACCESS_PASSWORD]" />
<CustomAction Id="CA_MaintenanceServer" BinaryKey="Assembly_CA" DllEntry="MaintenanceServer" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyMaintenanceEServer" Property="CA_MaintenanceEServer" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=enterprise server;BaseDirectory=[WEBSITEPANELDIR];ServerAdminPassword=[SERVERADMIN_PASSWORD];" />
<CustomAction Id="CA_PropertyMaintenanceEServer" Property="CA_MaintenanceEServer" Value="InstallerFolder=[WSP_INSTALL_DIR];ComponentCode=enterprise server;BaseDirectory=[WSP_INSTALL_DIR];ServerAdminPassword=[SERVERADMIN_PASSWORD];" />
<CustomAction Id="CA_MaintenanceEServer" BinaryKey="Assembly_CA" DllEntry="MaintenanceEServer" Impersonate="no" Execute="deferred" HideTarget="no" />
<CustomAction Id="CA_PropertyMaintenancePortal" Property="CA_MaintenancePortal" Value="InstallerFolder=[WEBSITEPANELDIR];ComponentCode=portal;BaseDirectory=[WEBSITEPANELDIR];EnterpriseServerUrl=[PI_ESERVER_URL]" />
<CustomAction Id="CA_PropertyMaintenancePortal" Property="CA_MaintenancePortal" Value="InstallerFolder=[WSP_INSTALL_DIR];ComponentCode=portal;BaseDirectory=[WSP_INSTALL_DIR];EnterpriseServerUrl=[PI_ESERVER_URL]" />
<CustomAction Id="CA_MaintenancePortal" BinaryKey="Assembly_CA" DllEntry="MaintenancePortal" Impersonate="no" Execute="deferred" HideTarget="no" />
<!---->
<SetProperty Id="WEBSITEPANELDIR" After="AppSearch" Value="[WSP_BASE]">WSP_BASE</SetProperty>
<SetProperty Id="WSP_INSTALL_DIR" After="AppSearch" Value="[WSP_BASE]">WSP_BASE</SetProperty>
<SetProperty Id="ARPINSTALLLOCATION" Value="[WSP_INSTALL_DIR]" After="InstallValidate" Sequence="execute" />
<CustomAction Id="CA_PreFillSettings" BinaryKey="Assembly_CA" DllEntry="PreFillSettings" />
<!--Exe sequence.-->
<InstallExecuteSequence>
<!--Preinstall.-->
<Custom Action="CA_InstallWebFeatures" Before="CostInitialize"><![CDATA[(&ServerFeature=3) OR (&EnterpriseServerFeature=3) OR (&PortalFeature=3) OR (&SchedulerServiceFeature=3) OR (&WDPortalFeature=3)]]></Custom>
<!--<Custom Action="CA_PropertyFinalizeInstall" After='InstallValidate'/>
<Custom Action="CA_FinalizeUnInstall" After="InstallValidate">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
<Custom Action="CA_FinalizeInstall" After="InstallFiles" >NOT Installed or REINSTALL</Custom>-->
<!--Preparation when "old to new installer update".-->
<Custom Action="CA_PropertyOnServerPrepare" Before="InstallFiles"><![CDATA[COMPFOUND_SERVER=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<Custom Action="CA_OnServerPrepare" After="CA_PropertyOnServerPrepare"><![CDATA[COMPFOUND_SERVER=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<Custom Action="CA_PropertyOnEServerPrepare" Before="InstallFiles"><![CDATA[COMPFOUND_ESERVER=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<Custom Action="CA_OnEServerPrepare" After="CA_PropertyOnEServerPrepare"><![CDATA[COMPFOUND_ESERVER=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<Custom Action="CA_PropertyOnPortalPrepare" Before="InstallFiles"><![CDATA[COMPFOUND_PORTAL=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<Custom Action="CA_OnPortalPrepare" After="CA_PropertyOnPortalPrepare"><![CDATA[COMPFOUND_PORTAL=1 AND NOT WIX_UPGRADE_DETECTED AND NOT UPGRADINGPRODUCTCODE]]></Custom>
<!--First Install. [Installed] property not used here because we distinguish per feature basis.-->
<Custom Action="CA_PropertyOnServerInstall" After="InstallValidate"><![CDATA[(&ServerFeature=3) AND NOT(!ServerFeature=3)]]></Custom>
<Custom Action="CA_OnServerInstall" After="InstallFiles"><![CDATA[(&ServerFeature=3) AND NOT(!ServerFeature=3)]]></Custom>
@ -649,7 +672,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="SetWSP_INSTALL_DIR">1</Custom>-->
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="CA_PreFillSettings" Before="CA_InstallWebFeatures" />
@ -668,10 +691,10 @@
<ComponentRef Id="UpdateDatabaseSql"/>
<ComponentRef Id="UpdateDatabaseWin"/>
</ComponentGroup>
<DirectoryRef Id="INSTALLENTERPRISESERVERFOLDER">
<DirectoryRef Id="PI_ESERVER_INSTALL_DIR">
<Component Id="InstallDatabaseSql" Guid="{81FB6008-A445-464F-8A0E-2EE076027FF3}">
<CreateFolder />
<Condition>(NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND NOT(DB_AUTH = "Windows Authentication")</Condition>
<Condition>(NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND NOT(DB_AUTH = "Windows Authentication") AND (COMPFOUND_ESERVER="0")</Condition>
<util:User Id="SqlUser" Name="[DB_LOGIN]" Password="[DB_PASSWORD]" CreateUser="no" />
<sql:SqlDatabase Id="SqlDatabaseInstallSql" ConfirmOverwrite="yes" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
@ -684,18 +707,24 @@
<Component Id="UpdateDatabaseSql" Guid="{089C02F9-D598-435E-8DA9-FC8AED00495C}">
<Condition>NOT (Remove="ALL") AND NOT(DB_AUTH = "Windows Authentication")</Condition>
<CreateFolder />
<sql:SqlString Id="SqlVersionUpdateSql" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
BEGIN
INSERT dbo.Versions (DatabaseVersion, BuildDate) VALUES ('$(var.sql_release_version)', '$(var.sql_build_date)')
END"
SqlDb="SqlDatabaseInstallWin" Sequence="2" User="SqlUser"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptSql" BinaryKey="UpdateDB" SqlDb="SqlDatabaseInstallSql" Sequence="3" User="SqlUser"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
</Component>
<util:User Id="SqlUpdateUser" Name="[DB_LOGIN]" Password="[DB_PASSWORD]" CreateUser="no" />
<sql:SqlDatabase Id="SqlDatabaseUpdateSql" ConfirmOverwrite="yes" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="yes" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
Server="[DB_SERVER]"
Database="[DB_DATABASE]"
User="SqlUpdateUser">
<sql:SqlString Id="SqlVersionUpdateSql" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
BEGIN
INSERT dbo.Versions (DatabaseVersion, BuildDate) VALUES ('$(var.sql_release_version)', '$(var.sql_build_date)')
END"
Sequence="2" ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptSql" BinaryKey="UpdateDB" Sequence="3"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
</sql:SqlDatabase>
</Component>
<Component Id="InstallDatabaseWin" Guid="{C50FC58C-3EF3-452D-BA9B-C9513B4D941A}">
<CreateFolder />
<Condition>(NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication")</Condition>
<Condition>(NOT Installed AND NOT WIX_UPGRADE_DETECTED) AND (DB_AUTH = "Windows Authentication") AND (COMPFOUND_ESERVER="0")</Condition>
<sql:SqlDatabase Id="SqlDatabaseInstallWin" ConfirmOverwrite="yes" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="no" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
Server="[DB_SERVER]"
@ -706,24 +735,29 @@
<Component Id="UpdateDatabaseWin" Guid="{A2770B5C-DA46-4125-950F-73A640EB312B}">
<Condition>NOT (Remove="ALL") AND (DB_AUTH = "Windows Authentication")</Condition>
<CreateFolder />
<sql:SqlString Id="SqlVersionUpdateWin" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
<sql:SqlDatabase Id="SqlDatabaseUpdateWin" ConfirmOverwrite="no" ContinueOnError="no" CreateOnInstall="yes" CreateOnReinstall="yes" CreateOnUninstall="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no"
Server="[DB_SERVER]"
Database="[DB_DATABASE]">
<sql:SqlString Id="SqlVersionUpdateWin" SQL="IF NOT EXISTS (SELECT * FROM dbo.Versions WHERE DatabaseVersion = '$(var.sql_release_version)')
BEGIN
INSERT dbo.Versions (DatabaseVersion, BuildDate) VALUES ('$(var.sql_release_version)', '$(var.sql_build_date)')
END"
SqlDb="SqlDatabaseInstallWin" Sequence="11" ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptWin" BinaryKey="UpdateDB" SqlDb="SqlDatabaseInstallWin" Sequence="12"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no" />
Sequence="11" ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no"/>
<sql:SqlScript Id="SqlUpdateScriptWin" BinaryKey="UpdateDB" Sequence="12"
ContinueOnError="no" ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ExecuteOnUninstall="no" />
</sql:SqlDatabase>
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="WebsitePanelFiles">
<Component Id ="comp_WebsitePanel_config" Directory="WEBSITEPANELDIR" Guid="{28CD1ADB-562C-4E38-A3B6-325D3A2718B1}">
<Component Id ="comp_WebsitePanel_config" Directory="WSP_INSTALL_DIR" Guid="{28CD1ADB-562C-4E38-A3B6-325D3A2718B1}">
<File Id="file_WebsitePanel_config" KeyPath="yes" Source="WebsitePanel.config" />
</Component>
<Component Id="comp_WebsitePanel_reg_locator" Directory="WEBSITEPANELDIR" Guid="{CC35E1B5-3E29-4AD1-991C-2904E4DCB099}">
<Component Id="comp_WebsitePanel_reg_locator" Directory="WSP_INSTALL_DIR" Guid="{CC35E1B5-3E29-4AD1-991C-2904E4DCB099}">
<RegistryValue Root='HKLM' Key='SOFTWARE\[ProductName]'
Name='Base' Value='[WEBSITEPANELDIR]'
Name='Base' Value='[WSP_INSTALL_DIR]'
Type='string' />
</Component>
</ComponentGroup>

View file

@ -5,7 +5,7 @@
<?define SERVERBUILDPATH = "$(var.PROJECTPATH)\Build\$(var.BUILD)\Server\bin"?>
<Fragment>
<ComponentGroup Id="SchedulerServiceFiles">
<Component Id="cmpSchedulerServiceFiles" Directory="INSTALLSERVICEFOLDER" Guid="{5E9F9A14-DB8E-4555-8D40-67110698F046}">
<Component Id="cmpSchedulerServiceFiles" Directory="PI_SCHEDULER_INSTALL_DIR" Guid="{5E9F9A14-DB8E-4555-8D40-67110698F046}">
<File Id="WebsitePanel.SchedulerService.exe" Source="$(var.BUILDPATH)\WebsitePanel.SchedulerService.exe" />
<File Id="WebsitePanel.SchedulerService.exe.config" Source="$(var.BUILDPATH)\WebsitePanel.SchedulerService.exe.config" />
<File Id="Ionic.Zip.Reduced.dll" Source="$(var.SERVERBUILDPATH)\Ionic.Zip.Reduced.dll"/>

View file

@ -232,7 +232,7 @@ namespace WebsitePanel.Setup.Actions
{
void IInstallAction.Run(SetupVariables vars)
{
try
try
{
//
Log.WriteStart(String.Format("Creating database user {0}", vars.Database));

View file

@ -394,7 +394,7 @@ namespace WebsitePanel.Setup.Actions
}
// This flag is the opposite of poolExists flag
vars.NewWebApplicationPool = !poolExists;
vars.NewWebApplicationPool = !poolExists || vars.ComponentExists;
if (poolExists)
{
@ -501,7 +501,7 @@ namespace WebsitePanel.Setup.Actions
void IInstallAction.Run(SetupVariables vars)
{
var siteName = vars.ComponentFullName;
var siteName = vars.ComponentFullName;
var ip = vars.WebSiteIP;
var port = vars.WebSitePort;
var domain = vars.WebSiteDomain;
@ -774,7 +774,7 @@ namespace WebsitePanel.Setup.Actions
void IInstallAction.Run(SetupVariables vars)
{
try
try
{
Begin(LogStartInstallMessage);
//

View file

@ -335,10 +335,10 @@ namespace WebsitePanel.Setup
return files;
}
public static void CopyFileToFolder(string sourceFile, string destinationFolder)
public static void CopyFileToFolder(string sourceFile, string destinationFolder, string destinationFileName = "")
{
string fileName = Path.GetFileName(sourceFile);
string destinationFile = Path.Combine(destinationFolder, fileName);
string destinationFile = Path.Combine(destinationFolder, string.IsNullOrWhiteSpace(destinationFileName) ? fileName : destinationFileName);
CopyFile(new FileInfo(sourceFile), destinationFile);
}

View file

@ -89,7 +89,8 @@ namespace WebsitePanel.Setup
SwitchEntServer2AspNet40,
SwitchWebPortal2AspNet40,
ConfigureSecureSessionModuleInWebConfig,
RestoreConfig
RestoreConfig,
UpdateXml
}
public class InstallAction

View file

@ -398,7 +398,7 @@ namespace WebsitePanel.Setup
/// <summary>
/// Check for existing user
/// </summary>
internal static bool UserExists(string domain, string userName)
public static bool UserExists(string domain, string userName)
{
bool found = false;
// check whether user account already exists

View file

@ -249,6 +249,12 @@ namespace WebsitePanel.Setup
public string BaseDirectory { get; set; }
public string SpecialBaseDirectory { get; set; }
public IDictionary<string, string> FileNameMap { get; set; }
public IDictionary<string, string> SessionVariables { get; set; }
public IDictionary<string, string[]> XmlData { get; set; } // XPath, Value.
public bool ComponentExists { get; set; }
public string UpdateVersion { get; set; }
public string EnterpriseServerURL { get; set; }
@ -278,7 +284,8 @@ namespace WebsitePanel.Setup
public string ServiceName { get; set; }
public string ConfigurationFile { get; set; }
private bool m_UseUserCredentials = true;
public bool UseUserCredentials { get { return m_UseUserCredentials; } set { m_UseUserCredentials = value; } }
public string ServiceFile { get; set; }
public string LicenseKey { get; set; }

View file

@ -768,7 +768,7 @@ namespace WebsitePanel.Setup
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
internal static bool ApplicationPoolExists(string name)
public static bool ApplicationPoolExists(string name)
{
WmiHelper wmi = new WmiHelper("root\\MicrosoftIISv2");
return(wmi.ExecuteQuery(
@ -780,7 +780,7 @@ namespace WebsitePanel.Setup
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
internal static bool IIS7ApplicationPoolExists(string name)
public static bool IIS7ApplicationPoolExists(string name)
{
ServerManager serverManager = new ServerManager();
bool ret = (serverManager.ApplicationPools[name] != null);

View file

@ -7,8 +7,10 @@ using System.Configuration.Install;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.ServiceProcess;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
@ -163,6 +165,11 @@ namespace WebsitePanel.Setup.Internal
Utils.GetStringSetupParameter(Hash, Global.Parameters.DbServerAdminPassword));
Dst.BaseDirectory = Utils.GetStringSetupParameter(Hash, Global.Parameters.BaseDirectory);
Dst.ComponentId = Utils.GetStringSetupParameter(Hash, Global.Parameters.ComponentId);
Dst.ComponentExists = string.IsNullOrWhiteSpace(Dst.ComponentId) ? false : true;
Dst.UpdateVersion = Utils.GetStringSetupParameter(Hash, "Version");
Dst.SessionVariables = Src;
}
public static string GetFullConfigPath(SetupVariables Ctx)
{
@ -196,7 +203,7 @@ namespace WebsitePanel.Setup.Internal
var mup = "MODE_UP";
var mrup = "MODE_RUP";
var Result = ModeExtension.Normal;
if (Src.Keys.Contains(mup) && !string.IsNullOrWhiteSpace(Src[mup]))
if ((Src.Keys.Contains(mup) && !string.IsNullOrWhiteSpace(Src[mup])) || (Src.Keys.Contains("ComponentId") && !string.IsNullOrWhiteSpace(Src["ComponentId"])))
Result = ModeExtension.Restore;
else if (Src.Keys.Contains(mrup) && !string.IsNullOrWhiteSpace(Src[mrup]))
Result = ModeExtension.Backup;
@ -404,6 +411,9 @@ namespace WebsitePanel.Setup.Internal
case ActionTypes.RestoreConfig:
RestoreXmlConfigs(Execute.SetupVariables);
break;
case ActionTypes.UpdateXml:
UpdateXml(Execute.Path, Execute.SetupVariables.XmlData);
break;
}
}
catch (Exception ex)
@ -2165,39 +2175,54 @@ namespace WebsitePanel.Setup.Internal
try
{
string componentId = Context.ComponentId;
string path = Path.Combine(Context.InstallationFolder, Context.ServiceFile);
string path = Context.ServiceFile; // FullFileName.
string service = Context.ServiceName;
Log.WriteStart(string.Format("Registering \"{0}\" windows service", service));
if (!File.Exists(path))
{
Log.WriteError(string.Format("File {0} not found", path), null);
return;
}
Log.WriteStart(string.Format("Registering \"{0}\" windows service", service));
string domain = Context.UserDomain;
if (string.IsNullOrEmpty(domain))
domain = ".";
string arguments = string.Format("/i /LogFile=\"\" /user={0}\\{1} /password={2}",
domain, Context.UserAccount, Context.UserPassword);
int exitCode = Utils.RunProcess(path, arguments);
if (exitCode == 0)
if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(service, StringComparison.CurrentCultureIgnoreCase)))
{
var Msg = string.Format("Service \"{0}\" already installed.", service);
Log.WriteEnd(Msg);
InstallLog.AppendLine(Msg);
}
try
{
string domain = Context.UserDomain;
if (string.IsNullOrEmpty(domain))
domain = ".";
string arguments = string.Empty;
if (Context.UseUserCredentials)
arguments = string.Format("/i /LogFile=\"\" /user={0}\\{1} /password={2}", domain, Context.UserAccount, Context.UserPassword);
else
arguments = "/i /LogFile= ''";
ManagedInstallerClass.InstallHelper(new[] { arguments, path });
//add rollback action
RollBack.RegisterWindowsService(path, service);
var Msg = string.Format("Registered \"{0}\" Windows service ", service);
//update log
Log.WriteEnd("Registered windows service");
Log.WriteEnd(Msg);
//update install log
InstallLog.AppendLine(string.Format("- Registered \"{0}\" Windows service ", service));
InstallLog.AppendLine(Msg);
// update config setings
AppConfig.EnsureComponentConfig(componentId);
AppConfig.SetComponentSettingStringValue(componentId, "ServiceName", service);
AppConfig.SetComponentSettingStringValue(componentId, "ServiceFile", path);
AppConfig.SaveConfiguration();
}
else
catch (Exception ex)
{
Log.WriteError(string.Format("Unable to register \"{0}\" Windows service. Error code: {1}", service, exitCode), null);
Log.WriteError(string.Format("Unable to register \"{0}\" Windows service.", service), null);
InstallLog.AppendLine(string.Format("- Failed to register \"{0}\" windows service ", service));
}
// update config setings
AppConfig.SetComponentSettingStringValue(componentId, "ServiceName", Context.ServiceName);
AppConfig.SetComponentSettingStringValue(componentId, "ServiceFile", Context.ServiceFile);
}
}
catch (Exception ex)
{
@ -2739,7 +2764,7 @@ namespace WebsitePanel.Setup.Internal
BackupDatabase(action.ConnectionString, action.Name);
break;
case ActionTypes.BackupConfig:
BackupConfig(action.Path, destinationDirectory);
BackupConfig(action.Path, destinationDirectory, action.SetupVariables != null ? action.SetupVariables.FileNameMap : null);
break;
}
}
@ -2755,7 +2780,7 @@ namespace WebsitePanel.Setup.Internal
}
}
private void BackupConfig(string path, string backupDirectory)
private void BackupConfig(string path, string backupDirectory, IDictionary<string, string> NameMap = null)
{
try
{
@ -2772,7 +2797,7 @@ namespace WebsitePanel.Setup.Internal
string[] files = Directory.GetFiles(path, "*.config", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
FileUtils.CopyFileToFolder(file, destination);
FileUtils.CopyFileToFolder(file, destination, GetMappedFileName(file, NameMap));
}
Log.WriteEnd("Backed up system configuration");
InstallLog.AppendLine("- Backed up system configuration");
@ -2786,6 +2811,17 @@ namespace WebsitePanel.Setup.Internal
}
}
private string GetMappedFileName(string FullFileName, IDictionary<string, string> Map)
{
if (Map == null)
return "";
string Key = new FileInfo(FullFileName).Name;
if (Map.Keys.Contains(Key))
return Map[Key];
else
return "";
}
private void BackupDatabase(string connectionString, string database)
{
try
@ -2859,7 +2895,6 @@ namespace WebsitePanel.Setup.Internal
{
List<InstallAction> list = new List<InstallAction>();
InstallAction action = null;
//database
string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString");
if (!String.IsNullOrEmpty(connectionString))
@ -2871,7 +2906,6 @@ namespace WebsitePanel.Setup.Internal
action.Description = string.Format("Backing up database {0}...", database);
list.Add(action);
}
//directory
string path = AppConfig.GetComponentSettingStringValue(componentId, "InstallFolder");
if (!string.IsNullOrEmpty(path))
@ -2881,17 +2915,18 @@ namespace WebsitePanel.Setup.Internal
action.Description = string.Format("Backing up directory {0}...", path);
list.Add(action);
}
//config
action = new InstallAction(ActionTypes.BackupConfig);
action.Description = "Backing up configuration settings...";
action.Path = Context.BaseDirectory;
action.Description = "Backing up configuration settings...";
if (!string.IsNullOrWhiteSpace(Context.SpecialBaseDirectory) )
{
action.Path = Context.SpecialBaseDirectory;
action.SetupVariables = Context;
}
list.Add(action);
return list;
}
private void UpdateWebSiteBindings()
{
string component = Context.ComponentFullName;
@ -3781,9 +3816,9 @@ namespace WebsitePanel.Setup.Internal
{
//update settings
AppConfig.SetComponentSettingStringValue(componentId, "Release", Context.UpdateVersion);
AppConfig.SetComponentSettingStringValue(componentId, "Installer", Context.Installer);
AppConfig.SetComponentSettingStringValue(componentId, "InstallerType", Context.InstallerType);
AppConfig.SetComponentSettingStringValue(componentId, "InstallerPath", Context.InstallerPath);
AppConfig.SetComponentSettingStringValue(componentId, "Installer", Context.SessionVariables["Installer"]);
AppConfig.SetComponentSettingStringValue(componentId, "InstallerType", Context.SessionVariables["InstallerType"]);
AppConfig.SetComponentSettingStringValue(componentId, "InstallerPath", Context.SessionVariables["InstallerPath"]);
}
Log.WriteInfo("Saving system configuration");
@ -3928,6 +3963,13 @@ namespace WebsitePanel.Setup.Internal
{
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>() {"type"} },
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");
var Backup = BackupRestore.Find(Ctx.InstallerFolder, Global.DefaultProductName, Ctx.ComponentName);
switch(Ctx.ComponentCode)
@ -3940,21 +3982,13 @@ namespace WebsitePanel.Setup.Internal
case Global.EntServer.ComponentCode:
{
Backup.XmlFiles.Add("Web.config");
Backup.XmlFiles.Add(@"bin\WebsitePanel.SchedulerService.exe.config");
}
break;
case Global.WebPortal.ComponentCode:
{
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\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");
}
break;
@ -3978,6 +4012,52 @@ namespace WebsitePanel.Setup.Internal
throw;
}
}
private void UpdateXml(string FullFileName, IDictionary<string, string[]> Data)
{
var Msg = "Update xml files.";
try
{
Log.WriteStart(Msg);
if (!File.Exists(FullFileName))
throw new FileNotFoundException(FullFileName);
var Doc = new XmlDocument();
Doc.Load(FullFileName);
foreach(var Key in Data.Keys)
{
var Node = Doc.SelectSingleNode(Key) as XmlElement;
if (Node == null)
{
Log.WriteInfo(string.Format("XPath \"{0}\" not found.", Key));
}
else
{
var Value = Data[Key];
switch (Value.Length)
{
case 1:
Node.Value = Value[0];
break;
case 2:
Node.SetAttribute(Value[0], Value[1]);
break;
default:
Log.WriteError(string.Format("Bad xml value for \"{0}\".", Key));
break;
}
}
}
Doc.Save(FullFileName);
}
catch (Exception ex)
{
Log.WriteError(ex.ToString());
throw;
}
finally
{
Log.WriteEnd(Msg);
}
}
}
public class UninstallScript : SetupScript // UninstallPage
{
@ -3989,7 +4069,6 @@ namespace WebsitePanel.Setup.Internal
{
var list = base.GetActions(componentId);
InstallAction action = null;
//windows service
string serviceName = AppConfig.GetComponentSettingStringValue(componentId, "ServiceName");
string serviceFile = AppConfig.GetComponentSettingStringValue(componentId, "ServiceFile");
@ -3997,16 +4076,18 @@ namespace WebsitePanel.Setup.Internal
if (!string.IsNullOrEmpty(serviceName) && !string.IsNullOrEmpty(serviceFile))
{
action = new InstallAction(ActionTypes.UnregisterWindowsService);
action.Path = Path.Combine(installFolder, serviceFile);
action.Path = serviceFile; // FullFileName.
action.Name = serviceName;
action.Description = "Removing Windows service...";
action.Log = string.Format("- Remove {0} Windows service", serviceName);
list.Add(action);
}
//database
bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase");
if (deleteDatabase)
bool allowDelete = true;
if (Context.InstallerType.ToLowerInvariant().Equals("msi")) // DB handled by MSI (WiX) by default.
allowDelete = false;
if (deleteDatabase && allowDelete)
{
string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString");
string database = AppConfig.GetComponentSettingStringValue(componentId, "Database");
@ -4042,7 +4123,6 @@ namespace WebsitePanel.Setup.Internal
action.Log = string.Format("- Delete {0} database login", loginName);
list.Add(action);
}
//virtual directory
bool deleteVirtualDirectory = AppConfig.GetComponentSettingBooleanValue(componentId, "NewVirtualDirectory");
if (deleteVirtualDirectory)
@ -4056,7 +4136,6 @@ namespace WebsitePanel.Setup.Internal
action.Log = string.Format("- Delete {0} virtual directory...", virtualDirectory);
list.Add(action);
}
//web site
bool deleteWebSite = AppConfig.GetComponentSettingBooleanValue(componentId, "NewWebSite");
if (deleteWebSite)
@ -4068,7 +4147,6 @@ namespace WebsitePanel.Setup.Internal
action.Log = string.Format("- Delete {0} web site", siteId);
list.Add(action);
}
//application pool
bool deleteAppPool = AppConfig.GetComponentSettingBooleanValue(componentId, "NewApplicationPool");
if (deleteAppPool)
@ -4082,7 +4160,6 @@ namespace WebsitePanel.Setup.Internal
action.Log = string.Format("- Delete {0} application pool", appPoolName);
list.Add(action);
}
//user account
bool deleteUserAccount = AppConfig.GetComponentSettingBooleanValue(componentId, "NewUserAccount");
if (deleteUserAccount)
@ -4100,7 +4177,6 @@ namespace WebsitePanel.Setup.Internal
action.Log = string.Format("- Remove {0} user account membership", username);
list.Add(action);
}
action = new InstallAction(ActionTypes.DeleteUserAccount);
action.Name = username;
action.Domain = domain;
@ -4242,7 +4318,6 @@ namespace WebsitePanel.Setup.Internal
else if (ModeExtension == ModeExtension.Restore)
{
Context.ComponentId = GetComponentID(Context);
Context.UpdateVersion = Context.Release;
AppConfig.LoadComponentSettings(Context);
new RestoreScript(Context).Run();
}
@ -4320,9 +4395,24 @@ namespace WebsitePanel.Setup.Internal
else if (ModeExtension == ModeExtension.Restore)
{
Context.ComponentId = GetComponentID(Context);
Context.UpdateVersion = Context.Release;
Context.UseUserCredentials = false;
AppConfig.LoadComponentSettings(Context);
new RestoreScript(Context).Run();
if (string.IsNullOrWhiteSpace(Context.ServiceName) || string.IsNullOrWhiteSpace(Context.ServiceFile))
{
Context.ServiceName = Global.Parameters.SchedulerServiceName;
Context.ServiceFile = Path.Combine(Context.InstallationFolder, "bin", Global.Parameters.SchedulerServiceFileName);
}
SetupScript Script = new RestoreScript(Context);
Script.Run();
Script = new ExpressScript(Context);
var XmlUp = new Dictionary<string, string[]>();
XmlUp.Add("configuration/connectionStrings/add[@name='EnterpriseServer']", new string[] {"connectionString", Context.ConnectionString});
XmlUp.Add("configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", new string[] {"value", Context.CryptoKey });
Context.XmlData = XmlUp;
Script.Actions.Add(new InstallAction(ActionTypes.UpdateXml) { SetupVariables = Context, Path = string.Format("{0}.config", Context.ServiceFile) });
Script.Actions.Add(new InstallAction(ActionTypes.RegisterWindowsService));
Script.Actions.Add(new InstallAction(ActionTypes.StartWindowsService));
Script.Run();
}
else
throw new NotImplementedException("Install " + ModeExtension.ToString());
@ -4398,7 +4488,6 @@ namespace WebsitePanel.Setup.Internal
else if (ModeExtension == ModeExtension.Restore)
{
Context.ComponentId = GetComponentID(Context);
Context.UpdateVersion = Context.Release;
AppConfig.LoadComponentSettings(Context);
new RestoreScript(Context).Run();
}

View file

@ -8,14 +8,46 @@ namespace WebsitePanel.Setup.Internal
{
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 ErrorFormat = "Error: {0}.";
const string MergeCompleted = "XmlDocumentMerge completed";
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 = "")
{
var Result = string.Empty;
@ -83,57 +115,97 @@ namespace WebsitePanel.Setup.Internal
}
private static string NodeView(XPathNavigator Navi)
{
foreach (var Attr in KeyAttributes)
foreach (var Item in GetProcessingChain(KeyAttributes))
{
var Value = Navi.GetAttribute(Attr, string.Empty);
if (!string.IsNullOrWhiteSpace(Value))
return string.Format("{0}[@{1}='{2}']", Navi.Name, Attr, Value);
string Result = string.Empty;
foreach (var Attr in Item.Attributes)
{
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;
}
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 (SrcElem != null)
if (DstNavi.NodeType == XPathNodeType.Element)
{
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];
if (SrcElemAttr != null)
DstNavi.SetValue(SrcElemAttr.Value);
do
{
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)
{
var SrcElem = SrcDoc.SelectSingleNode(NodePath(Parent, NodeView(DstNavi)));
if (SrcElem != null)
DstNavi.SetValue(SrcElem.InnerText);
}
var Here = NodeView(DstNavi);
if (DstNavi.MoveToFirstChild())
{
do
else if (DstNavi.NodeType == XPathNodeType.Text)
{
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

@ -43,6 +43,13 @@ namespace WebsitePanel.WIXInstaller.Common
Result |= CheckAspNetRegValue(LMKey);
return Result;
}
public static bool AppPoolExists(string Pool)
{
if (GetWebServerVersion().Major > MINIMUM_WEBSERVER_MAJOR_VERSION)
return WebUtils.IIS7ApplicationPoolExists(Pool);
else
return WebUtils.ApplicationPoolExists(Pool);
}
public static bool CheckAspNetRegValue(RegistryKey BaseKey)
{
var WebComponentsKey = "SOFTWARE\\Microsoft\\InetStp\\Components";

View file

@ -52,9 +52,44 @@ namespace WebsitePanel.WIXInstaller
{
public static List<string> SysDb = new List<string> { "tempdb", "master", "model", "msdb" };
public const string CustomDataDelimiter = "-=del=-";
public const string SQL_AUTH_WINDOWS = "Windows Authentication";
public const string SQL_AUTH_SERVER = "SQL Server Authentication";
#region CustomActions
[CustomAction]
public static ActionResult OnServerPrepare(Session Ctx)
{
PopUpDebugger();
Ctx.AttachToSetupLog();
Log.WriteStart("OnServerPrepare");
GetPrepareScript(Ctx).Run();
Log.WriteEnd("OnServerPrepare");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult OnEServerPrepare(Session Ctx)
{
PopUpDebugger();
Ctx.AttachToSetupLog();
Log.WriteStart("OnEServerPrepare");
GetPrepareScript(Ctx).Run();
Log.WriteEnd("OnEServerPrepare");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult OnPortalPrepare(Session Ctx)
{
PopUpDebugger();
Ctx.AttachToSetupLog();
Log.WriteStart("OnPortalPrepare");
GetPrepareScript(Ctx).Run();
Log.WriteEnd("OnPortalPrepare");
return ActionResult.Success;
}
[CustomAction]
public static ActionResult MaintenanceServer(Session session)
{
var Result = ActionResult.Success;
@ -84,104 +119,144 @@ namespace WebsitePanel.WIXInstaller
[CustomAction]
public static ActionResult PreFillSettings(Session session)
{
PopUpDebugger();
var Ctx = session;
Ctx.AttachToSetupLog();
Log.WriteStart("PreFillSettings");
var WSP = Ctx["WEBSITEPANELDIR"];
var CfgStr = string.Empty;
Func<string, string> GetCfg = (string CfgDir) =>
Func<string, bool> HaveInstalledComponents = (string CfgFullPath) =>
{
if (Directory.Exists(CfgDir))
var ComponentsPath = "//components";
return File.Exists(CfgFullPath) ? BackupRestore.HaveChild(CfgFullPath, ComponentsPath) : false;
};
Func<IEnumerable<string>, string> FindMainConfig = (IEnumerable<string> Dirs) =>
{
// Looking into platform specific Program Files.
{
var CfgFile = Path.Combine(CfgDir, BackupRestore.MainConfig);
if (File.Exists(CfgFile) && BackupRestore.HaveChild(CfgFile, "//components"))
return CfgFile;
var InstallerMainCfg = "WebsitePanel.Installer.exe.config";
var InstallerName = "WebsitePanel Installer";
var PFolderType = Environment.Is64BitOperatingSystem ? Environment.SpecialFolder.ProgramFilesX86 : Environment.SpecialFolder.ProgramFiles;
var PFiles = Environment.GetFolderPath(PFolderType);
var Result = Path.Combine(PFiles, InstallerName, InstallerMainCfg);
if (HaveInstalledComponents(Result))
return Result;
}
// Looking into specific directories.
foreach (var Dir in Dirs)
{
var Result = Path.Combine(Dir, BackupRestore.MainConfig);
if (HaveInstalledComponents(Result))
{
return Result;
}
else
{
var Names = new string[] { Global.Server.ComponentName, Global.EntServer.ComponentName, Global.WebPortal.ComponentName };
foreach (var Name in Names)
var ComponentNames = new string[] { Global.Server.ComponentName, Global.EntServer.ComponentName, Global.WebPortal.ComponentName };
foreach (var Name in ComponentNames)
{
var Backup = BackupRestore.Find(CfgDir, Global.DefaultProductName, Name);
if (Backup != null && BackupRestore.HaveChild(Backup.BackupMainConfigFile, "//components"))
return CfgStr = Backup.BackupMainConfigFile;
var Backup = BackupRestore.Find(Dir, Global.DefaultProductName, Name);
if (Backup != null && HaveInstalledComponents(Backup.BackupMainConfigFile))
return Backup.BackupMainConfigFile;
}
}
}
return string.Empty;
return null;
};
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 Ctx = session;
Ctx.AttachToSetupLog();
PopUpDebugger();
Log.WriteStart("PreFillSettings");
var WSP = Ctx["WSP_INSTALL_DIR"];
var DirList = new List<string>();
DirList.Add(WSP);
DirList.AddRange(from Drive in DriveInfo.GetDrives()
where Drive.DriveType == DriveType.Fixed
select Path.Combine(Drive.RootDirectory.FullName, Global.DefaultProductName));
var CfgPath = FindMainConfig(DirList);
if (!string.IsNullOrWhiteSpace(CfgPath))
{
var EServerUrl = string.Empty;
AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = CfgStr });
AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = CfgPath });
var CtxVars = new SetupVariables();
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.Server.ComponentCode);
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.Server.ComponentCode);
if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
{
{
AppConfig.LoadComponentSettings(CtxVars);
Ctx["COMPFOUND_SERVER"] = "1";
SetProperty(Ctx, "COMPFOUND_SERVER_ID", CtxVars.ComponentId);
SetProperty(Ctx, "COMPFOUND_SERVER_MAIN_CFG", CfgPath);
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);
SetProperty(Ctx, "PI_SERVER_INSTALL_DIR", CtxVars.InstallFolder);
SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName);
var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount);
bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool);
Ctx["COMPFOUND_SERVER"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No;
}
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.EntServer.ComponentCode);
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.EntServer.ComponentCode);
if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
{
AppConfig.LoadComponentSettings(CtxVars);
Ctx["COMPFOUND_ESERVER"] = "1";
SetProperty(Ctx, "COMPFOUND_ESERVER_ID", CtxVars.ComponentId);
SetProperty(Ctx, "COMPFOUND_ESERVER_MAIN_CFG", CfgPath);
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);
SetProperty(Ctx, "PI_ESERVER_INSTALL_DIR", CtxVars.InstallFolder);
SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName);
var ConnStr = new SqlConnectionStringBuilder(CtxVars.DbInstallConnectionString);
SetProperty(Ctx, "DB_CONN", ConnStr.ToString());
SetProperty(Ctx, "DB_SERVER", ConnStr.DataSource);
SetProperty(Ctx, "DB_AUTH", ConnStr.IntegratedSecurity ? SQL_AUTH_WINDOWS : SQL_AUTH_SERVER);
if (!ConnStr.IntegratedSecurity)
{
SetProperty(Ctx, "DB_LOGIN", ConnStr.UserID);
SetProperty(Ctx, "DB_PASSWORD", ConnStr.Password);
}
ConnStr = new SqlConnectionStringBuilder(CtxVars.ConnectionString);
SetProperty(Ctx, "DB_DATABASE", ConnStr.InitialCatalog);
var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount);
bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool);
Ctx["COMPFOUND_ESERVER"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No;
}
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgStr, Global.WebPortal.ComponentCode);
CtxVars.ComponentId = WiXSetup.GetComponentID(CfgPath, Global.WebPortal.ComponentCode);
if (!string.IsNullOrWhiteSpace(CtxVars.ComponentId))
{
AppConfig.LoadComponentSettings(CtxVars);
Ctx["COMPFOUND_PORTAL"] = "1";
SetProperty(Ctx, "COMPFOUND_PORTAL_ID", CtxVars.ComponentId);
SetProperty(Ctx, "COMPFOUND_PORTAL_MAIN_CFG", CfgPath);
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);
SetProperty(Ctx, "PI_PORTAL_INSTALL_DIR", CtxVars.InstallFolder);
SetProperty(Ctx, "WSP_INSTALL_DIR", Directory.GetParent(CtxVars.InstallFolder).FullName);
var HaveAccount = SecurityUtils.UserExists(CtxVars.UserDomain, CtxVars.UserAccount);
bool HavePool = Tool.AppPoolExists(CtxVars.ApplicationPool);
Ctx["COMPFOUND_PORTAL"] = (HaveAccount && HavePool) ? YesNo.Yes : YesNo.No;
}
}
TryApllyNewPassword(Ctx, "PI_SERVER_PASSWORD");
@ -202,8 +277,8 @@ namespace WebsitePanel.WIXInstaller
try
{
Log.WriteStart("InstallWebFeatures");
if(Tool.GetIsWebRoleInstalled())
{
if (Tool.GetIsWebRoleInstalled())
{
if (!Tool.GetIsWebFeaturesInstalled())
{
Log.WriteInfo("InstallWebFeatures: ASP.NET.");
@ -221,12 +296,12 @@ namespace WebsitePanel.WIXInstaller
}
Log.WriteInfo("InstallWebFeatures: done.");
}
catch(Exception ex)
catch (Exception ex)
{
Log.WriteError(string.Format("InstallWebFeatures: fail - {0}.", ex.ToString()));
Result = ActionResult.Failure;
}
if(!string.IsNullOrWhiteSpace(Msg))
if (!string.IsNullOrWhiteSpace(Msg))
Log.WriteInfo(string.Format("InstallWebFeatures Tool Log: {0}.", Msg));
Log.WriteEnd("InstallWebFeatures");
return Result;
@ -418,7 +493,7 @@ namespace WebsitePanel.WIXInstaller
foreach (var Db in GetDbList(ConnStr: session["DB_CONN"], ForbiddenNames: SysDb))
{
Ctrl.AddItem(Db);
session["DB_SELECT"] = Db; // Adds available DBs to installer log.
session["DB_SELECT"] = Db; // Adds available DBs to installer log and selects latest.
}
else
session["DB_SELECT"] = "";
@ -427,88 +502,15 @@ namespace WebsitePanel.WIXInstaller
[CustomAction]
public static ActionResult CheckConnectionUI(Session session)
{
string ConnStr = session["DB_AUTH"].Equals("Windows Authentication") ? GetConnectionString(session["DB_SERVER"], "master") :
string ConnStr = session["DB_AUTH"].Equals(SQL_AUTH_WINDOWS) ? GetConnectionString(session["DB_SERVER"], "master") :
GetConnectionString(session["DB_SERVER"], "master", session["DB_LOGIN"], session["DB_PASSWORD"]);
string msg;
bool Result = CheckConnection(ConnStr, out msg);
session["DB_CONN_CORRECT"] = Result ? "1" : "0";
session["DB_CONN_CORRECT"] = Result ? YesNo.Yes : YesNo.No;
session["DB_CONN"] = Result ? ConnStr : "";
session["DB_CONN_MSG"] = msg;
return ActionResult.Success;
}
[CustomAction]
public static ActionResult FinalizeInstall(Session session)
{
/*var connectionString = GetCustomActionProperty(session, "ConnectionString").Replace(CustomDataDelimiter, ";");
var serviceFolder = GetCustomActionProperty(session, "ServiceFolder");
var previousConnectionString = GetCustomActionProperty(session, "PreviousConnectionString").Replace(CustomDataDelimiter, ";");
var previousCryptoKey = GetCustomActionProperty(session, "PreviousCryptoKey");
if (string.IsNullOrEmpty(serviceFolder))
{
return ActionResult.Success;
}
connectionString = string.IsNullOrEmpty(previousConnectionString)
? connectionString
: previousConnectionString;
ChangeConfigString("/configuration/connectionStrings/add[@name='EnterpriseServer']", "connectionString", connectionString, serviceFolder);
ChangeConfigString("/configuration/appSettings/add[@key='WebsitePanel.CryptoKey']", "value", previousCryptoKey, serviceFolder);
InstallService(serviceFolder);*/
return ActionResult.Success;
}
[CustomAction]
public static ActionResult FinalizeUnInstall(Session session)
{
// UnInstallService();
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PreInstallationAction(Session session)
{
session["SKIPCONNECTIONSTRINGSTEP"] = "0";
session["SERVICEFOLDER"] = session["INSTALLFOLDER"];
var servicePath = /*SecurityUtils.GetServicePath("WebsitePanel Scheduler")*/"";
if (!string.IsNullOrEmpty(servicePath))
{
string path = Path.Combine(servicePath, "WebsitePanel.SchedulerService.exe.config");
if (File.Exists(path))
{
using (var reader = new StreamReader(path))
{
string content = reader.ReadToEnd();
var pattern = new Regex(@"(?<=<add key=""WebsitePanel.CryptoKey"" .*?value\s*=\s*"")[^""]+(?="".*?>)");
Match match = pattern.Match(content);
session["PREVIOUSCRYPTOKEY"] = match.Value;
var connectionStringPattern = new Regex(@"(?<=<add name=""EnterpriseServer"" .*?connectionString\s*=\s*"")[^""]+(?="".*?>)");
match = connectionStringPattern.Match(content);
session["PREVIOUSCONNECTIONSTRING"] = match.Value.Replace(";", CustomDataDelimiter);
}
session["SKIPCONNECTIONSTRINGSTEP"] = "1";
if (string.IsNullOrEmpty(session["SERVICEFOLDER"]))
{
session["SERVICEFOLDER"] = servicePath;
}
}
}
return ActionResult.Success;
}
[CustomAction]
public static ActionResult PrereqCheck(Session session)
{
@ -556,102 +558,14 @@ namespace WebsitePanel.WIXInstaller
}
#endregion
private static void InstallService(string installFolder)
{
try
{
var schedulerService =
ServiceController.GetServices().FirstOrDefault(
s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase));
if (schedulerService != null)
{
StopService(schedulerService.ServiceName);
SecurityUtils.DeleteService(schedulerService.ServiceName);
}
ManagedInstallerClass.InstallHelper(new[] { "/i", Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe") });
StartService("WebsitePanel Scheduler");
}
catch (Exception)
{
}
}
private static void UnInstallService()
{
try
{
var schedulerService =
ServiceController.GetServices().FirstOrDefault(
s => s.DisplayName.Equals("WebsitePanel Scheduler", StringComparison.CurrentCultureIgnoreCase));
if (schedulerService != null)
{
StopService(schedulerService.ServiceName);
SecurityUtils.DeleteService(schedulerService.ServiceName);
}
}
catch (Exception)
{
}
}
private static void ChangeConfigString(string nodePath, string attrToChange, string value, string installFolder)
{
string path = Path.Combine(installFolder, "WebsitePanel.SchedulerService.exe.config");
if (!File.Exists(path))
{
return;
}
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path);
XmlElement node = xmldoc.SelectSingleNode(nodePath) as XmlElement;
if (node != null)
{
node.SetAttribute(attrToChange, value);
xmldoc.Save(path);
}
}
private static void StopService(string serviceName)
{
var sc = new ServiceController(serviceName);
if (sc.Status == ServiceControllerStatus.Running)
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped);
}
}
private static void StartService(string serviceName)
{
var sc = new ServiceController(serviceName);
if (sc.Status == ServiceControllerStatus.Stopped)
{
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running);
}
}
private static string GetConnectionString(string serverName, string databaseName)
{
return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName)/*.Replace(";", CustomDataDelimiter)*/;
return string.Format("Server={0};database={1};Trusted_Connection=true;", serverName, databaseName);
}
private static string GetConnectionString(string serverName, string databaseName, string login, string password)
{
return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password)/*.Replace(";", CustomDataDelimiter)*/;
return string.Format("Server={0};database={1};uid={2};password={3};", serverName, databaseName, login, password);
}
static bool CheckConnection(string ConnStr, out string Info)
{
@ -671,16 +585,6 @@ namespace WebsitePanel.WIXInstaller
}
return Result;
}
private static string GetCustomActionProperty(Session session, string key)
{
if (session.CustomActionData.ContainsKey(key))
{
return session.CustomActionData[key].Replace("-=-", ";");
}
return string.Empty;
}
private static void AddCheck(ListViewCtrl view, Session session, string PropertyID)
{
view.AddItem(session[PropertyID] == YesNo.Yes, session[PropertyID + "_TITLE"]);
@ -834,15 +738,6 @@ namespace WebsitePanel.WIXInstaller
foreach (var Msg in Msgs)
AddTo(Ctx, "CUSTOM_INSTALL_TEXT", Msg); ;
}
internal static string GetProperty(Session Ctx, string Property)
{
if (Ctx.CustomActionData.ContainsKey(Property))
return Ctx[Property];
else
return string.Empty;
}
private static ActionResult ProcessInstall(Session Ctx, WiXInstallType InstallType)
{
IWiXSetup Install = null;
@ -911,6 +806,39 @@ namespace WebsitePanel.WIXInstaller
Log.WriteInfo("New password was applied to " + Id);
}
}
private static string GetProperty(Session Ctx, string Property)
{
if (Ctx.CustomActionData.ContainsKey(Property))
return Ctx.CustomActionData[Property];
else
return string.Empty;
}
private static bool SetProperty(Session CtxSession, string Prop, string Value)
{
if (!string.IsNullOrWhiteSpace(Value))
{
CtxSession[Prop] = Value;
return true;
}
return false;
}
private static SetupScript GetPrepareScript(Session Ctx)
{
var CtxVars = new SetupVariables();
WiXSetup.FillFromSession(Ctx.CustomActionData, CtxVars);
AppConfig.LoadConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = GetProperty(Ctx, "MainConfig") });
CtxVars.IISVersion = Tool.GetWebServerVersion();
CtxVars.ComponentId = GetProperty(Ctx, "ComponentId");
CtxVars.Version = AppConfig.GetComponentSettingStringValue(CtxVars.ComponentId, Global.Parameters.Release);
CtxVars.SpecialBaseDirectory = Directory.GetParent(GetProperty(Ctx, "MainConfig")).FullName;
CtxVars.FileNameMap = new Dictionary<string, string>();
CtxVars.FileNameMap.Add(new FileInfo(GetProperty(Ctx, "MainConfig")).Name, BackupRestore.MainConfig);
SetupScript Result = new ExpressScript(CtxVars);
Result.Actions.Add(new InstallAction(ActionTypes.StopApplicationPool) { SetupVariables = CtxVars });
Result.Actions.Add(new InstallAction(ActionTypes.Backup) { SetupVariables = CtxVars });
Result.Actions.Add(new InstallAction(ActionTypes.DeleteDirectory) { SetupVariables = CtxVars, Path = CtxVars.InstallFolder });
return Result;
}
}
public static class SessionExtension
{

View file

@ -44364,7 +44364,7 @@ Hello #user.FirstName#,
</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>
<h1>Control Panel URL</h1>
@ -44373,7 +44373,7 @@ Please, find below details of your control panel account.
<tr>
<th>Control Panel URL</th>
<th>Username</th>
<th>Password</th>
<th>One Time Password</th>
</tr>
</thead>
<tbody>
@ -44411,11 +44411,11 @@ INSERT [dbo].[UserSettings] ([UserID], [SettingsName], [PropertyName], [Property
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
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.

File diff suppressed because it is too large Load diff

View file

@ -4368,6 +4368,12 @@
<data name="ServiceItemType.VirtualSwitch" xml:space="preserve">
<value>Virtual Switch</value>
</data>
<data name="ServiceItemType.SharePointFoundationSiteCollection" xml:space="preserve">
<value>SharePoint Foundation Site Collection</value>
</data>
<data name="ServiceItemType.SharePointEnterpriseSiteCollection" xml:space="preserve">
<value>SharePoint Enterprise Site Collection</value>
</data>
<data name="TaskActivity.VPS_ADD_EXTERNAL_IP" xml:space="preserve">
<value>Assigning external IP addresses</value>
</data>

View file

@ -366,10 +366,10 @@
<Target Name="WiXCreateRedistFileListBuild" DependsOnTargets="CreateFixDefaultPublicFolderMailboxBuild" >
<RemoveDir Directories="$(WiXInstallerBuild)\ComponentsFiles" />
<MakeDir Directories="$(WiXInstallerBuild)\ComponentsFiles" />
<Exec Command='"$(WIX)bin\heat.exe" dir $(EnterpriseServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr INSTALLENTERPRISESERVERFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(ServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr INSTALLSERVERFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(PortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr INSTALLPORTALFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(WebDavPortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\WebDavPortalFiles.wxs -gg -sreg -srd -var wix.BUILDWDPPATH -cg WebDavPortalFiles -dr INSTALLWEBDAVPORTALFOLDER' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(EnterpriseServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\EnterpriseServerFiles.wxs -gg -sreg -srd -var wix.BUILDESPATH -cg EnterpriseServerFiles -dr PI_ESERVER_INSTALL_DIR' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(ServerBuild) -o $(WiXInstallerBuild)\ComponentsFiles\ServerFiles.wxs -gg -sreg -srd -var wix.BUILDSPATH -cg ServerFiles -dr PI_SERVER_INSTALL_DIR' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(PortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\PortalFiles.wxs -gg -sreg -srd -var wix.BUILDPPATH -cg PortalFiles -dr PI_PORTAL_INSTALL_DIR' />
<Exec Command='"$(WIX)bin\heat.exe" dir $(WebDavPortalBuild) -o $(WiXInstallerBuild)\ComponentsFiles\WebDavPortalFiles.wxs -gg -sreg -srd -var wix.BUILDWDPPATH -cg WebDavPortalFiles -dr PI_WDPORTAL_INSTALL_DIR' />
</Target>
<Target Name="Build" DependsOnTargets="WiXCreateRedistFileListBuild">