// writer permissions test method public static EnvironmentCheckResult WriteToFilesystemTest(string serverPath) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#WebServerPermissions"; result.Message = String.Format( "The username {0} does not have write access to the server's file system.", System.Security.Principal.WindowsIdentity.GetCurrent().Name ); result.DidPass = false; string filename = serverPath + @"\write-permission.test"; try { File.Create( filename ).Dispose(); if ( File.Exists( filename ) ) { File.Delete( filename ); result.DidPass = true; result.Message = "Your server's file permissions look correct."; } } catch ( Exception ex ) { result.DidPass = false; result.Message = "Could not write to the file system. Error: " + ex.Message; } return result; }
// writer permissions test method public static EnvironmentCheckResult WriteToFilesystemTest(string serverPath) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#WebServerPermissions"; result.Message = String.Format("The username {0} does not have write access to the server's file system.", System.Security.Principal.WindowsIdentity.GetCurrent().Name); result.DidPass = false; string filename = serverPath + @"\write-permission.test"; try { File.Create(filename).Dispose(); if (File.Exists(filename)) { File.Delete(filename); result.DidPass = true; result.Message = "Your server's file permissions look correct."; } } catch (Exception ex) { result.DidPass = false; result.Message = "Could not write to the file system. Error: " + ex.Message; } return(result); }
// internet connection test method public static EnvironmentCheckResult ConnectedToInternetTest() { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.Message = "You are connected to the Internet."; result.DidPass = true; WebClient client = new WebClient(); try { string results = client.DownloadString( "https://rockrms.blob.core.windows.net/install/html-alive.txt" ); if ( !results.Contains( "success" ) ) { result.DidPass = false; result.Message = "It does not appear you are connected to the Internet. Rock requires a connection to download the installer."; } } catch ( Exception ex ) { result.DidPass = false; result.Message = "Could not connect to the Internet. Error: " + ex.Message; return result; } finally { client = null; } return result; }
// internet connection test method public static EnvironmentCheckResult ConnectedToInternetTest() { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.Message = "You are connected to the Internet."; result.DidPass = true; WebClient client = new WebClient(); try { string results = client.DownloadString("https://rockrms.blob.core.windows.net/install/html-alive.txt"); if (!results.Contains("success")) { result.DidPass = false; result.Message = "It does not appear you are connected to the Internet. Rock requires a connection to download the installer."; } } catch (Exception ex) { result.DidPass = false; result.Message = "Could not connect to the Internet. Error: " + ex.Message; return(result); } finally { client = null; } return(result); }
// check iis version public static EnvironmentCheckResult CheckIisVersion(string iisString) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#CheckIISVersion"; result.DidPass = false; try { iisString = iisString.Split('/')[1]; double iisVersion = Convert.ToDouble(iisString); if (iisVersion >= iisVersionRequired) { result.Message = "Your IIS version is correct. You have version " + iisVersion + "."; result.DidPass = true; } else { result.Message = "The server's IIS version is not correct. You have version " + iisVersion + " Rock requires version " + iisVersionRequired.ToString() + " or greater."; } } catch (Exception ex) { result.DidPass = true; result.Message = "We could not determine your IIS version please ensure you are running IIS v " + iisVersionRequired.ToString() + " or better.";; } return(result); }
// ensure rock is not yet installed public static EnvironmentCheckResult RockInstalledTest(string serverPath) { EnvironmentCheckResult isInstalledResult = new EnvironmentCheckResult(); isInstalledResult.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#IsRockInstalledAlready"; isInstalledResult.Message = "Website is empty."; isInstalledResult.DidPass = true; string rockFile = serverPath + @"\bin\Rock.dll"; if (File.Exists(rockFile)) { isInstalledResult.DidPass = false; isInstalledResult.Message = "It appears that Rock is already installed in this directory. You must remove this version of Rock before proceeding."; } // check that sql server spatial files don't exist string sqlSpatialFiles32Bit = serverPath + @"\SqlServerTypes\x86\SqlServerSpatial110.dll"; string sqlSpatialFiles64Bit = serverPath + @"\SqlServerTypes\x64\SqlServerSpatial110.dll"; if (File.Exists(sqlSpatialFiles32Bit) || File.Exists(sqlSpatialFiles64Bit)) { isInstalledResult.DidPass = false; isInstalledResult.Message = "You must remove the 'SqlServerTypes' folder before proceeding. You may need to stop the webserver to enable deletion."; } return(isInstalledResult); }
// check trust level public static EnvironmentCheckResult CheckTrustLevel( ) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#WebServerTrust"; result.DidPass = false; try { new AspNetHostingPermission(AspNetHostingPermissionLevel.Unrestricted).Demand(); result.DidPass = true; result.Message = "Your webserver is configured for Full-Trust."; } catch (System.Security.SecurityException) { result.DidPass = false; result.Message = "Your webserver is not configured for Full-Trust."; } return(result); }
// check dot net version public static EnvironmentCheckResult DotNetVersionTest() { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#IncorrectDotNETVersion"; result.DidPass = false; // check .net // ok this is not easy as .net 4.5.1 actually reports as 4.0.378675 or 4.0.378758 depending on how it was installed // http://en.wikipedia.org/wiki/List_of_.NET_Framework_versions if (System.Environment.Version.Major > 4) { result.DidPass = true; } else if (System.Environment.Version.Major == 4 && System.Environment.Version.Build > 30319) { result.DidPass = true; } else if (System.Environment.Version.Major == 4 && System.Environment.Version.Build == 30319 && System.Environment.Version.Revision >= 18408) { result.DidPass = true; } string version = System.Environment.Version.Major.ToString() + "." + System.Environment.Version.ToString(); if (result.DidPass) { result.Message = String.Format("You have the correct version of .Net ({0}+).", requiredDotnetVersion); } else { result.Message = String.Format("The server does not have the correct .Net runtime. You have .Net version {0} Rock requires version {1}.", version, requiredDotnetVersion); } return(result); }
// check dot net version public static EnvironmentCheckResult DotNetVersionTest() { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#IncorrectDotNETVersion"; result.DidPass = false; // check .net // ok this is not easy as .net 4.5.1 actually reports as 4.0.378675 or 4.0.378758 depending on how it was installed // http://en.wikipedia.org/wiki/List_of_.NET_Framework_versions if ( System.Environment.Version.Major > 4 ) { result.DidPass = true; } else if ( System.Environment.Version.Major == 4 && System.Environment.Version.Build > 30319 ) { result.DidPass = true; } else if ( System.Environment.Version.Major == 4 && System.Environment.Version.Build == 30319 && System.Environment.Version.Revision >= 18408 ) { result.DidPass = true; } string version = System.Environment.Version.Major.ToString() + "." + System.Environment.Version.ToString(); if ( result.DidPass ) { result.Message = String.Format( "You have the correct version of .Net ({0}+).", requiredDotnetVersion ); } else { result.Message = String.Format( "The server does not have the correct .Net runtime. You have .Net version {0} Rock requires version {1}.", version, requiredDotnetVersion ); } return result; }
// check sql server public static EnvironmentCheckResult CheckSqlServer( string dbServer, string dbUsername, string dbPassword, string dbDatabase ) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.Message = "Your database settings all look good."; result.DidPass = true; // check that user can login DatabaseConnectionResult connectResult = CheckSqlLogin( dbServer, dbUsername, dbPassword ); if ( !connectResult.CanConnect ) { result.Message = connectResult.Message; result.DidPass = false; return result; } // check sql version DatabaseConfigurationResult sqlVersionResult = CheckSqlServerVersion( dbServer, dbUsername, dbPassword ); if ( !sqlVersionResult.Success ) { result.Message = string.Format( "You are running SQL Server version: {0}", sqlVersionResult.Message ); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#SqlServerWrongVersion"; result.DidPass = false; return result; } // check if database exists if ( !CheckSqlDatabaseExists( dbServer, dbUsername, dbPassword, dbDatabase ) ) { // try creating the database if ( !CheckSqlPermissionsCreateDatabase( dbServer, dbUsername, dbPassword ) ) { result.Message = String.Format( "The database '{0}' does not exist and the user '{1}' does not have permissions to create a database.", dbDatabase, dbUsername ); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#NoDatabaseNoPermissions"; result.DidPass = false; return result; } result.Message = String.Format( "The '{0}' database does not exist on the server, but you have permissions to create it. Rock will create it for you as part of the install.", dbDatabase ); } else { // check that we have permissions to create a table in the database if ( !CheckSqlPermissionsCreateTable( dbServer, dbUsername, dbPassword, dbDatabase ) ) { result.Message = String.Format( "The user '{0}' does not have write access to the database '{1}'.", dbUsername, dbDatabase ); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#SqlServerPermissions"; result.DidPass = false; return result; } // since the database exists make sure it's empty if ( !CheckSqlServerEmpty( dbServer, dbUsername, dbPassword, dbDatabase ) ) { result.Message = String.Format( "The database '{0}' is not empty. To protect your existing data Rock must be installed into a empty database.", dbDatabase ); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#DatabaseNotEmpty"; result.DidPass = false; return result; } } DatabaseConfigurationResult sizeResult = CheckSqlDatabaseSize( dbServer, dbUsername, dbPassword, dbDatabase ); if ( !sizeResult.Success ) { result.Message = sizeResult.Message; result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#DatabaseTooSmall"; result.DidPass = false; return result; } return result; }
// check iis version public static EnvironmentCheckResult CheckIisVersion( string iisString ) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#CheckIISVersion"; result.DidPass = false; try { iisString = iisString.Split( '/' )[1]; double iisVersion = Convert.ToDouble( iisString ); if ( iisVersion >= iisVersionRequired ) { result.Message = "Your IIS version is correct. You have version " + iisVersion + "."; result.DidPass = true; } else { result.Message = "The server's IIS version is not correct. You have version " + iisVersion + " Rock requires version " + iisVersionRequired.ToString() + " or greater."; } } catch ( Exception ex ) { result.DidPass = true; result.Message = "We could not determine your IIS version please ensure you are running IIS v " + iisVersionRequired.ToString() + " or better."; ; } return result; }
// check trust level public static EnvironmentCheckResult CheckTrustLevel( ) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#WebServerTrust"; result.DidPass = false; try { new AspNetHostingPermission( AspNetHostingPermissionLevel.Unrestricted ).Demand(); result.DidPass = true; result.Message = "Your webserver is configured for Full-Trust."; } catch ( System.Security.SecurityException ) { result.DidPass = false; result.Message = "Your webserver is not configured for Full-Trust."; } return result; }
// ensure rock is not yet installed public static EnvironmentCheckResult RockInstalledTest(string serverPath) { EnvironmentCheckResult isInstalledResult = new EnvironmentCheckResult(); isInstalledResult.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#IsRockInstalledAlready"; isInstalledResult.Message = "Website is empty."; isInstalledResult.DidPass = true; string rockFile = serverPath + @"\bin\Rock.dll"; if ( File.Exists( rockFile ) ) { isInstalledResult.DidPass = false; isInstalledResult.Message = "It appears that Rock is already installed in this directory. You must remove this version of Rock before proceeding."; } // check that sql server spatial files don't exist string sqlSpatialFiles32Bit = serverPath + @"\SqlServerTypes\x86\SqlServerSpatial110.dll"; string sqlSpatialFiles64Bit = serverPath + @"\SqlServerTypes\x64\SqlServerSpatial110.dll"; if ( File.Exists( sqlSpatialFiles32Bit ) || File.Exists( sqlSpatialFiles64Bit ) ) { isInstalledResult.DidPass = false; isInstalledResult.Message = "You must remove the 'SqlServerTypes' folder before proceeding. You may need to stop the webserver to enable deletion."; } return isInstalledResult; }
// check sql server public static EnvironmentCheckResult CheckSqlServer(string dbServer, string dbUsername, string dbPassword, string dbDatabase) { EnvironmentCheckResult result = new EnvironmentCheckResult(); result.Message = "Your database settings all look good."; result.DidPass = true; // check that user can login DatabaseConnectionResult connectResult = CheckSqlLogin(dbServer, dbUsername, dbPassword); if (!connectResult.CanConnect) { result.Message = connectResult.Message; result.DidPass = false; return(result); } // check sql version DatabaseConfigurationResult sqlVersionResult = CheckSqlServerVersion(dbServer, dbUsername, dbPassword); if (!sqlVersionResult.Success) { result.Message = string.Format("You are running SQL Server version: {0}", sqlVersionResult.Message); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#SqlServerWrongVersion"; result.DidPass = false; return(result); } // check if database exists if (!CheckSqlDatabaseExists(dbServer, dbUsername, dbPassword, dbDatabase)) { // try creating the database if (!CheckSqlPermissionsCreateDatabase(dbServer, dbUsername, dbPassword)) { result.Message = String.Format("The database '{0}' does not exist and the user '{1}' does not have permissions to create a database.", dbDatabase, dbUsername); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#NoDatabaseNoPermissions"; result.DidPass = false; return(result); } result.Message = String.Format("The '{0}' database does not exist on the server, but you have permissions to create it. Rock will create it for you as part of the install.", dbDatabase); } else { // check that we have permissions to create a table in the database if (!CheckSqlPermissionsCreateTable(dbServer, dbUsername, dbPassword, dbDatabase)) { result.Message = String.Format("The user '{0}' does not have write access to the database '{1}'.", dbUsername, dbDatabase); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#SqlServerPermissions"; result.DidPass = false; return(result); } // since the database exists make sure it's empty if (!CheckSqlServerEmpty(dbServer, dbUsername, dbPassword, dbDatabase)) { result.Message = String.Format("The database '{0}' is not empty. To protect your existing data Rock must be installed into a empty database.", dbDatabase); result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#DatabaseNotEmpty"; result.DidPass = false; return(result); } } DatabaseConfigurationResult sizeResult = CheckSqlDatabaseSize(dbServer, dbUsername, dbPassword, dbDatabase); if (!sizeResult.Success) { result.Message = sizeResult.Message; result.HelpLink = "http://www.rockrms.com/Rock/LetsFixThis#DatabaseTooSmall"; result.DidPass = false; return(result); } return(result); }