diff --git a/src/Umbraco.Core/RuntimeState.cs b/src/Umbraco.Core/RuntimeState.cs
index e344a67920..85e8c7370d 100644
--- a/src/Umbraco.Core/RuntimeState.cs
+++ b/src/Umbraco.Core/RuntimeState.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Configuration;
using System.Threading;
using System.Web;
using Semver;
@@ -133,11 +132,6 @@ namespace Umbraco.Core
///
public BootFailedException BootFailedException { get; internal set; }
- // currently configured via app settings
- private static bool BoolSetting(string key, bool missing) => ConfigurationManager.AppSettings[key]?.InvariantEquals("true") ?? missing;
- private bool InstallMissingDatabase { get; } = BoolSetting("Umbraco.Core.RuntimeState.InstallMissingDatabase", false);
- private bool InstallEmptyDatabase { get; } = BoolSetting("Umbraco.Core.RuntimeState.InstallEmptyDatabase", false);
-
///
/// Determines the runtime level.
///
@@ -185,7 +179,7 @@ namespace Umbraco.Core
// else, keep going,
// anything other than install wants a database - see if we can connect
// (since this is an already existing database, assume localdb is ready)
- var tries = InstallMissingDatabase ? 2 : 5;
+ var tries = RuntimeStateOptions.InstallMissingDatabase ? 2 : 5;
for (var i = 0;;)
{
connect = databaseFactory.CanConnect;
@@ -199,7 +193,7 @@ namespace Umbraco.Core
// cannot connect to configured database, this is bad, fail
logger.Debug("Could not connect to database.");
- if (InstallMissingDatabase)
+ if (RuntimeStateOptions.InstallMissingDatabase)
{
// ok to install on a configured but missing database
Level = RuntimeLevel.Install;
@@ -228,7 +222,7 @@ namespace Umbraco.Core
// can connect to the database but cannot check the upgrade state... oops
logger.Warn(e, "Could not check the upgrade state.");
- if (InstallEmptyDatabase)
+ if (RuntimeStateOptions.InstallEmptyDatabase)
{
// ok to install on an empty database
Level = RuntimeLevel.Install;
diff --git a/src/Umbraco.Core/RuntimeStateOptions.cs b/src/Umbraco.Core/RuntimeStateOptions.cs
new file mode 100644
index 0000000000..9262a8a990
--- /dev/null
+++ b/src/Umbraco.Core/RuntimeStateOptions.cs
@@ -0,0 +1,40 @@
+using System.Configuration;
+
+namespace Umbraco.Core
+{
+ ///
+ /// Allows configuration of the in PreApplicationStart or in appSettings
+ ///
+ public static class RuntimeStateOptions
+ {
+ // configured statically or via app settings
+ private static bool BoolSetting(string key, bool missing) => ConfigurationManager.AppSettings[key]?.InvariantEquals("true") ?? missing;
+
+ ///
+ /// If true the RuntimeState will continue the installation sequence when a database is missing
+ ///
+ ///
+ /// In this case it will be up to the implementor that is setting this value to true to take over the bootup/installation sequence
+ ///
+ public static bool InstallMissingDatabase
+ {
+ get => _installEmptyDatabase ?? BoolSetting("Umbraco.Core.RuntimeState.InstallMissingDatabase", false);
+ set => _installEmptyDatabase = value;
+ }
+
+ ///
+ /// If true the RuntimeState will continue the installation sequence when a database is available but is empty
+ ///
+ ///
+ /// In this case it will be up to the implementor that is setting this value to true to take over the bootup/installation sequence
+ ///
+ public static bool InstallEmptyDatabase
+ {
+ get => _installMissingDatabase ?? BoolSetting("Umbraco.Core.RuntimeState.InstallEmptyDatabase", false);
+ set => _installMissingDatabase = value;
+ }
+
+ private static bool? _installMissingDatabase;
+ private static bool? _installEmptyDatabase;
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 50cc36d7b9..2236854351 100755
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -512,6 +512,7 @@
+
diff --git a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js
index a8e0530417..cc92935b4d 100644
--- a/src/Umbraco.Web.UI.Client/src/installer/installer.service.js
+++ b/src/Umbraco.Web.UI.Client/src/installer/installer.service.js
@@ -1,4 +1,4 @@
-angular.module("umbraco.install").factory('installerService', function($rootScope, $q, $timeout, $http, $location, $log){
+angular.module("umbraco.install").factory('installerService', function ($rootScope, $q, $timeout, $http, $templateRequest){
var _status = {
index: 0,
@@ -106,19 +106,26 @@ angular.module("umbraco.install").factory('installerService', function($rootScop
//loads the needed steps and sets the intial state
init : function(){
service.status.loading = true;
- if(!_status.all){
- service.getSteps().then(function(response){
- service.status.steps = response.data.steps;
- service.status.index = 0;
- _installerModel.installId = response.data.installId;
- service.findNextStep();
+ if (!_status.all) {
+ //pre-load the error page, if an error occurs, the page might not be able to load
+ // so we want to make sure it's available in the templatecache first
+ $templateRequest("views/install/error.html").then(x => {
+ service.getSteps().then(response => {
+ service.status.steps = response.data.steps;
+ service.status.index = 0;
+ _installerModel.installId = response.data.installId;
+ service.findNextStep();
- $timeout(function(){
- service.status.loading = false;
- service.status.configuring = true;
- }, 2000);
- });
- }
+ $timeout(function() {
+ service.status.loading = false;
+ service.status.configuring = true;
+ },
+ 2000);
+ });
+ });
+
+
+ }
},
//loads available packages from our.umbraco.com