public static ActionResult RemoveWebsite(Session session) { RunWebAction( session, featureName => { var webInstallationInfo = WebInstallationInfo.CreateFromFeature(session, featureName); string applicationDirectoryPath = webInstallationInfo.TargetWmiPath; if (DirectoryEntry.Exists(applicationDirectoryPath)) { using (DirectoryEntry applicationEntry = new DirectoryEntry(applicationDirectoryPath)) { applicationEntry.DeleteTree(); } } if (webInstallationInfo is WebsiteInstallationInfo) { WebsiteInstallationInfo websiteInstallationInfo = webInstallationInfo as WebsiteInstallationInfo; if (DirectoryEntry.Exists(websiteInstallationInfo.AppPoolWmiPath)) { using (DirectoryEntry appPoolEntry = new DirectoryEntry(websiteInstallationInfo.AppPoolWmiPath)) { appPoolEntry.DeleteTree(); } } } }); return(ActionResult.Success); }
public static ActionResult PreWebDialog(Session session) { var featureName = session.GetPropertyValue(WebInstallationInfo.FeaturePropertyName); var webInstallationInfo = WebInstallationInfo.CreateFromFeature(session, featureName); if (webInstallationInfo != null) { webInstallationInfo.CopyToCurrentDetails(session); } else { WebInstallationInfo.SetSuggestedPropertyValues(session, featureName); } // Necessary step for WebSiteOrDirectoryDialog session.SetPropertyValue("WEB_SITENAME_SITE", session.GetPropertyValue(WebInstallationInfo.Constants.WebsiteName)); session.SetPropertyValue("WEB_SITENAME_VDIR", session.GetPropertyValue(WebInstallationInfo.Constants.VirtualDirectoryName)); return(ActionResult.Success); }
public static ActionResult AfterInstallInitialize_WEB(Session session, string[] extraCustomActionNames) { RunWebAction( session, (featureName) => { WebInstallationInfo webInstallationInfo = WebInstallationInfo.CreateFromFeature(session, featureName); webInstallationInfo.CopyToCurrentDetails(session); WebInstallationInfo.AddRegistryEntries(session, featureName); } ); var aggregatedProps = WebInstallationInfo.GetCustomActionData(session).ToString(); session.SetPropertyValue("RollbackWebsite", aggregatedProps); session.SetPropertyValue("CreateWebsite", aggregatedProps); session.SetPropertyValue("RemoveWebsite", aggregatedProps); session.SetPropertyValue("PatchWebsite", aggregatedProps); foreach (var customActionName in extraCustomActionNames) { session.SetPropertyValue(customActionName, aggregatedProps); } return(ActionResult.Success); }
public static ActionResult DeployWebsite(Session session, Dictionary <string, WebInstallationOptions> allOptions) { RunWebAction(session, featureName => { try { EnsureIISComponents(); var options = allOptions[featureName]; var webInstallationInfo = WebInstallationInfo.CreateFromFeature(session, featureName); bool exists = webInstallationInfo.TargetEntryExists; int siteID = webInstallationInfo.GetSiteId(); int scriptMapVersion; RunRegIIS("-ir", options.FrameworkVersion); if (webInstallationInfo.CreateAsWebsite) { WebsiteInstallationInfo websiteInstallationInfo = webInstallationInfo as WebsiteInstallationInfo; using (DirectoryEntry machineRoot = new DirectoryEntry(WebInstallationInfo.ServerRoot)) { string appPoolName = ""; if (DirectoryEntry.Exists(WebsiteInstallationInfo.AppPoolsRoot)) { using (DirectoryEntry appPools = new DirectoryEntry(WebsiteInstallationInfo.AppPoolsRoot)) { appPoolName = webInstallationInfo.WebsiteName; bool appPoolExixts = DirectoryEntry.Exists(websiteInstallationInfo.AppPoolWmiPath); using (DirectoryEntry appPool = appPoolExixts ? new DirectoryEntry(appPools.Path + "/" + websiteInstallationInfo.WebsiteName) : appPools.Invoke("Create", "IIsApplicationPool", websiteInstallationInfo.WebsiteName) as DirectoryEntry) { appPool.InvokeSet("AppPoolIdentityType", 2); //LocalSystem 0; LocalService 1; NetworkService 2; Custom (user & pwd) 3; ApplicationPoolIdentity 4 appPool.InvokeSet("AppPoolAutoStart", true); if (GetIisMajorVersion() > 6) { appPool.InvokeSet("ManagedRuntimeVersion", string.Format("v{0}", options.FrameworkVersion.ToString(2))); appPool.InvokeSet("ManagedPipelineMode", 0); // Integrated 0; Classic 1 } appPool.CommitChanges(); } } } using (DirectoryEntry site = exists ? new DirectoryEntry(machineRoot.Path + "/" + siteID) : machineRoot.Invoke("Create", "IIsWebServer", siteID) as System.DirectoryServices.DirectoryEntry) { site.Invoke("Put", "ServerComment", websiteInstallationInfo.WebsiteName); site.Invoke("Put", "KeyType", "IIsWebServer"); site.Invoke("Put", "ServerBindings", "*:80:" + websiteInstallationInfo.WebsiteName); site.Invoke("Put", "ServerState", 2); site.Invoke("Put", "FrontPageWeb", 1); site.Invoke("Put", "DefaultDoc", "Default.aspx"); site.Invoke("Put", "SecureBindings", "*:443:" + websiteInstallationInfo.WebsiteName); site.Invoke("Put", "ServerAutoStart", 1); site.Invoke("Put", "ServerSize", 1); site.Invoke("SetInfo"); site.CommitChanges(); WebInstallationInfo.AddFeatureDetails(session, webInstallationInfo); string siteRootPath = site.Path + "/Root"; using (DirectoryEntry siteRoot = DirectoryEntry.Exists(siteRootPath) ? new DirectoryEntry(siteRootPath) : site.Children.Add("Root", "IIsWebVirtualDir")) { siteRoot.InvokeSet("Path", websiteInstallationInfo.GetWebFolderPath(options)); siteRoot.InvokeSet("DefaultDoc", "Default.aspx"); if (!string.IsNullOrEmpty(appPoolName)) { siteRoot.InvokeSet("AppPoolId", appPoolName); } siteRoot.Invoke("AppCreate", true); siteRoot.CommitChanges(); scriptMapVersion = GetScriptMapsVersion(siteRoot); } } } } else { VirtualDirectoryInstallationInfo virtualDirectoryInstallationInfo = webInstallationInfo as VirtualDirectoryInstallationInfo; using (DirectoryEntry websiteEntry = new DirectoryEntry(virtualDirectoryInstallationInfo.WebsitePath)) { using (DirectoryEntry applicationEntry = exists ? new DirectoryEntry(virtualDirectoryInstallationInfo.TargetWmiPath) : websiteEntry.Invoke("Create", "IIsWebVirtualDir", virtualDirectoryInstallationInfo.VirtualDirectoryName) as DirectoryEntry) { applicationEntry.InvokeSet("Path", virtualDirectoryInstallationInfo.GetWebFolderPath(options)); applicationEntry.Invoke("AppCreate", true); applicationEntry.InvokeSet("AppFriendlyName", virtualDirectoryInstallationInfo.VirtualDirectoryName); applicationEntry.InvokeSet("DefaultDoc", "Default.aspx"); applicationEntry.CommitChanges(); WebInstallationInfo.AddFeatureDetails(session, virtualDirectoryInstallationInfo); } scriptMapVersion = GetScriptMapsVersion(websiteEntry); } } // Set ASP.NET to target framework version if (scriptMapVersion != options.FrameworkVersion.Major) { RunRegIIS(string.Format("-s {0}", webInstallationInfo.TargetWmiSubPath), options.FrameworkVersion); } // Mark as done WebInstallationInfo.AddFeatureDetails(session, webInstallationInfo); GrantConfigEncryptionAccess(options.FrameworkVersion); var configFilePath = webInstallationInfo.GetWebConfigFilePath(options); var appRelativePath = webInstallationInfo.GetAppRelativePath(); // Data provider keys EncryptConfigSections(configFilePath, siteID.ToString(), appRelativePath, options.ConfigSectionGroupEncryptionOptions, options.FrameworkVersion); // Logging flat file access if (options.InitializeFlatFileLogging) { InitializeFlatFileLogging(configFilePath); } // Set and encrypt connection strings and enqueue their encryption SetConnectionStrings(configFilePath, options.ConnectionStrings); if (options.EncryptConnectionStrings) { EncryptConnectionStrings(siteID.ToString(), appRelativePath, options.FrameworkVersion); } // Add url to internet explorer trusted zone var internetSecurityManager = InternetSecurityManager.CreateObject(); foreach (var url in webInstallationInfo.CalculateWebUrls()) { AddUrlToLocalIntranet(url); } } catch (InstallException ex) { throw ex; } catch (Exception ex) { throw new InstallException(Messages.AnErrorHasOccurredAndInstallationWillBeCancelled, ex); } }); return(ActionResult.Success); }