Пример #1
0
 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);
 }
Пример #2
0
 public static ActionResult AppSearch_WEB(Session session)
 {
     RunWebAction(
         session,
         featureName =>
     {
         session.SetPropertyValue(WebInstallationInfo.FeaturePropertyName, featureName);
         if (session.IsRemoving() || session.IsPatching() || session.IsOlderVersionDetected())
         {
             WebInstallationInfo.CopyRegistryToProperties(session, featureName);
             WebInstallationInfo webInstallationInfo = WebInstallationInfo.CreateFromCurrentDetails(session);
             WebInstallationInfo.AddFeatureDetails(session, webInstallationInfo);
         }
         else if (session.UiLevel() != InstallUILevel.Full)
         {
             bool allowPropNameWithoutFeature        = WebInstallationInfo.GetWebFeatureNames(session).Length == 1;
             WebInstallationInfo webInstallationInfo = WebInstallationInfo.CreateFromCurrentDetails(session, featureName, allowPropNameWithoutFeature);
             if (ValidateWebProperties(session, webInstallationInfo))
             {
                 WebInstallationInfo.AddFeatureDetails(session, webInstallationInfo);
             }
         }
     }
         );
     return(ActionResult.Success);
 }
Пример #3
0
 static void RunWebAction(Session session, Action <string> func)
 {
     foreach (var featureName in WebInstallationInfo.GetWebFeatureNames(session))
     {
         func(featureName);
     }
 }
Пример #4
0
        public static ActionResult AfterWebDialog(Session session)
        {
            WebInstallationInfo webInstallationInfo = WebInstallationInfo.CreateFromCurrentDetails(session);

            ValidateWebProperties(session, webInstallationInfo);
            return(ActionResult.Success);
        }
        public static void SetSuggestedPropertyValues(Session session, string featureName)
        {
            bool createAsWebSite = session.GetBooleanPropertyValue(WebInstallationInfo.Constants.CreateWebsite);

            string[] propertyNames = createAsWebSite ?
                                     new string[] { WebInstallationInfo.Constants.WebsiteName, WebInstallationInfo.Constants.VirtualDirectoryName }
                : new string[] { WebInstallationInfo.Constants.VirtualDirectoryName };

            BaseSetupInfo.SetSuggestedPropertyValues(
                session,
                featureName,
                WebInstallationInfo.GetWebFeatureNames(session),
                WebInstallationInfo.GetSuggestedWebNames(session),
                propertyNames
                );
        }
        private static WebInstallationInfo[] DeserializeAllFeatures(Session session)
        {
            var allPropVal = session.GetPropertyValue(AllInfoPropertyName);

            if (allPropVal == "-")
            {
                allPropVal = "";
            }
            var allInfo = CprBroker.Utilities.Strings.Deserialize <WebInstallationInfo[]>(allPropVal);

            if (allInfo == null)
            {
                allInfo = new WebInstallationInfo[0];
            }
            return(allInfo);
        }
Пример #7
0
        static bool ValidateWebProperties(Session session, WebInstallationInfo webInstallationInfo)
        {
            string message;

            if (webInstallationInfo.Validate(out message))
            {
                session["WEB_Valid"] = "True";
                WebInstallationInfo.AddFeatureDetails(session, webInstallationInfo);
                return(true);
            }
            else
            {
                session["WEB_Valid"] = message;
                return(false);
            }
        }
        public static void AddFeatureDetails(Session session, WebInstallationInfo webInstallationInfo)
        {
            var allInfo = DeserializeAllFeatures(session);
            var index   = Array.FindIndex <WebInstallationInfo>(allInfo, inf => inf.FeatureName == webInstallationInfo.FeatureName);

            if (index != -1)
            {
                allInfo[index] = webInstallationInfo;
            }
            else
            {
                var list = new List <WebInstallationInfo>(allInfo);
                list.Add(webInstallationInfo);
                allInfo = list.ToArray();
            }
            SerializeAllFeatures(session, allInfo);
        }
Пример #9
0
 void PopulateInstallationInfo()
 {
     if (newWebSiteRadio.Checked)
     {
         InstallationInfo = new WebsiteInstallationInfo()
         {
             WebsiteName = newWebSiteNameTextBox.Text,
         };
     }
     else
     {
         InstallationInfo = new VirtualDirectoryInstallationInfo()
         {
             WebsiteName          = sitesComboBox.Text,
             VirtualDirectoryName = virtualDirectoryNameTextBox.Text,
         };
     }
 }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
 public void SetWebInstallationInfo(WebInstallationInfo value)
 {
     savedState["WebInstallationInfo"] = Strings.SerializeObject(value);
 }