Beispiel #1
0
        private static void CreateSite(string siteName, string protocol, string bindingInformation, string physicalPath,
                                       bool createAppPool, string appPoolName, ProcessModelIdentityType identityType, string appPoolUserName, string appPoolPassWord,
                                       ManagedPipelineMode appPoolPipelineMode, string managedRuntimeVersion)
        {
            using (ServerManager mgr = new ServerManager())
            {
                Site site = mgr.Sites.Add(siteName, protocol, bindingInformation, physicalPath);

                // PROVISION APPPOOL IF NEEDED
                if (createAppPool)
                {
                    ApplicationPool pool = mgr.ApplicationPools.Add(appPoolName);
                    if (pool.ProcessModel.IdentityType != identityType)
                    {
                        pool.ProcessModel.IdentityType = identityType;
                    }
                    if (!string.IsNullOrEmpty(appPoolUserName))
                    {
                        pool.ProcessModel.UserName = appPoolUserName;
                        pool.ProcessModel.Password = appPoolPassWord;
                    }
                    if (appPoolPipelineMode != pool.ManagedPipelineMode)
                    {
                        pool.ManagedPipelineMode = appPoolPipelineMode;
                    }

                    site.Applications["/"].ApplicationPoolName = pool.Name;
                }

                mgr.CommitChanges();
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Do you want to create an Application Pool:y/n");
                string response = Console.ReadLine();
                if (response.ToString() == "y")
                {
                    Console.Write("Please enter Application Pool Name:");
                    string poolname          = Console.ReadLine();
                    bool   isEnable32bit     = false;
                    ManagedPipelineMode mode = ManagedPipelineMode.Classic;
                    Console.Write("Need to enable 32 bit on Windows 64 bit?y/n [Applicable for 64 bit OS]: y/n?");
                    string enable32bit = Console.ReadLine();
                    if (enable32bit.ToLower() == "y")
                    {
                        isEnable32bit = true;
                    }
                    Console.Write("Please select Pipeline Mode: 1 for Classic, 2 for Integrated:");
                    string pipelinemode = Console.ReadLine();
                    if (pipelinemode.ToLower() == "2")
                    {
                        mode = ManagedPipelineMode.Integrated;
                    }
                    Console.Write("Please select Runtime Version for Application Pool: 1 for v2.0, 2 for v4.0:");
                    string runtimeVersion = Console.ReadLine() == "1" ? "v2.0" : "v4.0";

                    CreateAppPool(poolname, isEnable32bit, mode, runtimeVersion);
                    Console.WriteLine("Application Pool created successfully...");
                }
                Console.WriteLine("Do you want to create a website:y/n");
                response = Console.ReadLine();
                if (response.ToString() == "y")
                {
                    Console.Write("Please enter website name:");
                    string websiteName = Console.ReadLine();
                    Console.Write("Please enter host name:");
                    string hostname = Console.ReadLine();
                    Console.Write("Please enter physical path to point for website:");
                    string phypath = Console.ReadLine();
                    Console.WriteLine("Please enter Application pool Name:");
                    foreach (var pool in new ServerManager().ApplicationPools)
                    {
                        Console.WriteLine(pool.Name);
                    }
                    Console.WriteLine("");
                    Console.Write("Please enter Application pool Name for web site:");
                    string poolName = Console.ReadLine();
                    CreateIISWebsite(websiteName, hostname, phypath, poolName);
                    Console.WriteLine("Web site created successfully...");
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
        /// <summary>
        /// Convert an enum of type ManagedPipelineMode to a string.
        /// This is temp workaround for hydra generation issue with nulable enums with custom values
        /// </summary>
        /// <param name='value'>
        /// The value to convert to a string.
        /// </param>
        /// <returns>
        /// The enum value as a string.
        /// </returns>
        internal static string ManagedPipelineModeToString(ManagedPipelineMode? value)
        {
            if (!value.HasValue)
            {
                return null;
            }

            return ManagedPipelineModeToString(value.GetValueOrDefault());
        }
        public void AddApplicationPool(string name, ManagedPipelineMode managedPipelineMode,
                                       string managedRuntimeVersion, bool autoStart)
        {
            var applicationPool = _serverManager.ApplicationPools.Add(name);

            applicationPool.ManagedPipelineMode   = managedPipelineMode;
            applicationPool.ManagedRuntimeVersion = managedRuntimeVersion;
            applicationPool.AutoStart             = autoStart;
            _serverManager.CommitChanges();
        }
Beispiel #5
0
 private void CreateAppPool(string poolname, bool enable32bitOn64, ManagedPipelineMode mode, string runtimeVersion = "v4.0")
 {
     using (ServerManager serverManager = new ServerManager())
     {
         ApplicationPool newPool = serverManager.ApplicationPools.Add(poolname);
         newPool.ManagedRuntimeVersion = runtimeVersion;
         newPool.Enable32BitAppOnWin64 = true;
         newPool.ManagedPipelineMode   = mode;
         serverManager.CommitChanges();
     }
 }
 private static ApplicationPool AddAppPool(ServerManager sm, string poolName, string runtimeVersion,
         ManagedPipelineMode piplineMode)
 {
     if (sm.ApplicationPools.FirstOrDefault(x => x.Name == poolName) != null)
     {
         return sm.ApplicationPools.FirstOrDefault(x => x.Name == poolName);
     }
     var appPool = sm.ApplicationPools.Add(poolName);
     appPool.ManagedRuntimeVersion = runtimeVersion;
     appPool.ManagedPipelineMode = piplineMode;
     return appPool;
 }
 /// <summary>
 /// Convert an enum of type ManagedPipelineMode to a string.
 /// </summary>
 /// <param name='value'>
 /// The value to convert to a string.
 /// </param>
 /// <returns>
 /// The enum value as a string.
 /// </returns>
 internal static string ManagedPipelineModeToString(ManagedPipelineMode value)
 {
     if (value == ManagedPipelineMode.Integrated)
     {
         return("0");
     }
     if (value == ManagedPipelineMode.Classic)
     {
         return("1");
     }
     throw new ArgumentOutOfRangeException("value");
 }
        internal static string ToSerializedValue(this ManagedPipelineMode value)
        {
            switch (value)
            {
            case ManagedPipelineMode.Integrated:
                return("Integrated");

            case ManagedPipelineMode.Classic:
                return("Classic");
            }
            return(null);
        }
        private static ApplicationPool AddAppPool(ServerManager sm, string poolName, string runtimeVersion,
                                                  ManagedPipelineMode piplineMode)
        {
            if (sm.ApplicationPools.FirstOrDefault(x => x.Name == poolName) != null)
            {
                return(sm.ApplicationPools.FirstOrDefault(x => x.Name == poolName));
            }
            var appPool = sm.ApplicationPools.Add(poolName);

            appPool.ManagedRuntimeVersion = runtimeVersion;
            appPool.ManagedPipelineMode   = piplineMode;
            return(appPool);
        }
Beispiel #10
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="runtimeVersion"></param>
        /// <param name="managedPipelineMode"></param>
        /// <param name="identityType"></param>
        /// <returns></returns>
        public AppPoolConfig AddAppPool(string name, string runtimeVersion, ManagedPipelineMode managedPipelineMode, ProcessModelIdentityType identityType)
        {
            DeleteAppPool(name);
            _currentAppPoolNames.Add(name);

            ApplicationPool applicationPool = _mgr.ApplicationPools.Add(name);
            applicationPool.ManagedRuntimeVersion = runtimeVersion;
            applicationPool.ManagedPipelineMode = managedPipelineMode;
            applicationPool.ProcessModel.IdentityType = identityType;
            applicationPool.Recycling.PeriodicRestart.PrivateMemory = _privateMemoryLimit;
            _logger.Log("Added application pool " + name);

            return this;
        }
Beispiel #11
0
        private static IisAppPoolMode GetIisAppPoolMode(ManagedPipelineMode managedPipelineMode)
        {
            switch (managedPipelineMode)
            {
            case ManagedPipelineMode.Integrated:
                return(IisAppPoolMode.Integrated);

            case ManagedPipelineMode.Classic:
                return(IisAppPoolMode.Classic);

            default:
                throw new NotSupportedException(string.Format("Unknown managed pipeline mode: '{0}'.", managedPipelineMode));
            }
        }
        internal static string ToString(ManagedPipelineMode managedPipelineMode)
        {
            switch (managedPipelineMode)
            {
            case ManagedPipelineMode.Integrated:
                return("Integrated");

            case ManagedPipelineMode.Classic:
                return("Classic");

            default:
                throw new ArgumentOutOfRangeException(nameof(managedPipelineMode), managedPipelineMode, null);
            }
        }
Beispiel #13
0
 /// <summary>
 ///  创建应用程序池
 /// </summary>
 /// <param name="appPoolName"></param>
 /// <param name="pipelineMode">模式(经典、继承)</param>
 /// <param name="version">名称(v4.0,v2.0)</param>
 public static void CreateAppPool(string appPoolName, ManagedPipelineMode pipelineMode, string version)
 {
     try
     {
         ServerManager serverManager = new ServerManager();
         serverManager.ApplicationPools.Add(appPoolName);
         ApplicationPool apppool = serverManager.ApplicationPools[appPoolName];
         apppool.ManagedPipelineMode = pipelineMode;
         serverManager.CommitChanges();
         apppool.ManagedRuntimeVersion = version;
         apppool.Recycle();
     }
     catch
     {
     }
 }
Beispiel #14
0
        /// <param name="runtimeVersion">v2.0|v4.0|""</param>       
        public void AppPoolCreate(string appPoolName, string runtimeVersion, ManagedPipelineMode managedPipelineMode)
        {
            ApplicationPool appPool = _serverManager.ApplicationPools[appPoolName];

            if (appPool != null)
            {
                throw new Exception(string.Format("创建应用程序池出错:{0}已存在!", appPoolName));
            }

            appPool = _serverManager.ApplicationPools.CreateElement();
            appPool.Name = appPoolName;
            appPool.ManagedRuntimeVersion = runtimeVersion;
            appPool.ManagedPipelineMode = managedPipelineMode;

            _serverManager.ApplicationPools.Add(appPool);
            _serverManager.CommitChanges();
        }
        public void CreateApplicationPool(string appPoolName, string appPoolUsername,
                                          string appPoolPassword, string runtimeVersion, bool enable32BitOnWin64,
                                          ManagedPipelineMode pipelineMode)
        {
            // ensure app pool name specified
            if (String.IsNullOrEmpty(appPoolName))
            {
                throw new ArgumentNullException("appPoolName");
            }

            // Create iisAppObject pool
            using (var srvman = GetServerManager())
            {
                // ensure app pool unique
                if (srvman.ApplicationPools[appPoolName] != null)
                {
                    throw new Exception("ApplicationPoolAlreadyExists");
                }

                var element = srvman.ApplicationPools.Add(appPoolName);
                //
                element.ManagedPipelineMode = pipelineMode;
                // ASP.NET 2.0 by default
                if (!String.IsNullOrEmpty(runtimeVersion))
                {
                    element.ManagedRuntimeVersion = runtimeVersion;
                }
                //
                element.Enable32BitAppOnWin64 = enable32BitOnWin64;
                // set iisAppObject pool identity
                if (!String.IsNullOrEmpty(appPoolUsername))
                {
                    element.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
                    element.ProcessModel.UserName     = appPoolUsername;
                    element.ProcessModel.Password     = appPoolPassword;
                }
                else
                {
                    element.ProcessModel.IdentityType = ProcessModelIdentityType.NetworkService;
                }
                //
                element.AutoStart = true;
                //
                srvman.CommitChanges();
            }
        }
Beispiel #16
0
 public static bool AddPool(string poolname, bool enable32bitOn64, ManagedPipelineMode mode, string runtimeVersion = "v4.0")
 {
     try
     {
         using (ServerManager server = new ServerManager())
         {
             ApplicationPool pool = server.ApplicationPools.Add(poolname);
             pool.ManagedRuntimeVersion = runtimeVersion;
             pool.Enable32BitAppOnWin64 = enable32bitOn64;
             pool.ManagedPipelineMode   = mode;
             server.CommitChanges();
             return(true);
         }
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Beispiel #17
0
        public string CreateNewPool(string name, string netclr, string pipeline, bool startflag)
        {
            ManagedPipelineMode mode          = ManagedPipelineMode.Classic;;
            ServerManager       serverManager = new ServerManager();
            ApplicationPool     newPool       = serverManager.ApplicationPools.Add(name);

            newPool.ManagedRuntimeVersion = netclr;
            if (pipeline == "Integrated")
            {
                mode = ManagedPipelineMode.Integrated;
            }
            else if (pipeline == "Clasic")
            {
                mode = ManagedPipelineMode.Classic;
            }
            newPool.ManagedPipelineMode   = mode;
            newPool.Enable32BitAppOnWin64 = startflag;
            serverManager.CommitChanges();
            return("OK");
        }
        private bool Deploy(ServerManager mgr, ITaskItem ti, ModeType mode, ActionType action, string appPoolName)
        {
            string frameworkVersion = ti.GetMetadata("DotNetFrameworkVersion");
            string pipelineModeStr  = ti.GetMetadata("PipelineMode");
            string enable32BitStr   = ti.GetMetadata("Enable32Bit");
            string identityTypeStr  = ti.GetMetadata("IdentityType");
            string userName         = ti.GetMetadata("UserName");
            string password         = ti.GetMetadata("Password");

            bool enable32Bit;

            if (!bool.TryParse(enable32BitStr, out enable32Bit))
            {
                base.Log.LogError("Invalid Enable32Bit metadata value " + enable32BitStr);
                return(false);
            }

            ManagedPipelineMode pipelineMode = ManagedPipelineMode.Integrated;

            if (!Enum.TryParse <ManagedPipelineMode>(pipelineModeStr, true, out pipelineMode))
            {
                base.Log.LogError("Invalid PipelineMode metadata value " + pipelineModeStr);
                return(false);
            }

            ProcessModelIdentityType identityType = ProcessModelIdentityType.ApplicationPoolIdentity;

            if (!Enum.TryParse <ProcessModelIdentityType>(identityTypeStr, true, out identityType))
            {
                base.Log.LogError("Invalid IdentityType metadata value " + identityTypeStr);
                return(false);
            }

            if (identityType == ProcessModelIdentityType.SpecificUser && (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(password)))
            {
                base.Log.LogError("IdentityType is set to SpecificUser but either the UserName or the Password is missing.");
                return(false);
            }

            return(DeployApplicationPool(mgr, action, appPoolName, identityType, userName, password, frameworkVersion, true, enable32Bit, pipelineMode));
        }
 internal static string ToString(ManagedPipelineMode managedPipelineMode)
 {
     switch (managedPipelineMode)
     {
         case ManagedPipelineMode.Integrated:
             return "Integrated";
         case ManagedPipelineMode.Classic:
             return "Classic";
         default:
             throw new ArgumentOutOfRangeException(nameof(managedPipelineMode), managedPipelineMode, null);
     }
 }
Beispiel #20
0
        /// <summary>
        /// 新建网站站点
        /// </summary>
        /// <param name="siteName">站点名</param>
        /// <param name="protocol">站点协议,如:http</param>
        /// <param name="bindingInformation">绑定的相关信息 "*:&lt;port&gt;:&lt;hostname&gt;" <example>"*:80:myhost.com"</example></param>
        /// <param name="physicalPath">物理路径</param>
        /// <param name="createAppPool">是否新建应用程序池</param>
        /// <param name="appPoolName">应用程序池名称</param>
        /// <param name="queueLength">队列长度</param>
        /// <param name="identityType">进程模型标识</param>
        /// <param name="idleTimeout">闲着超时时间(秒)</param>
        /// <param name="appPoolUserName">应用程序池特殊用户的用户名</param>
        /// <param name="appPoolPassword">应用程序池特殊用户的密码</param>
        /// <param name="maxProcesses">最大工作进程数</param>
        /// <param name="appPoolPipelineMode">应用程序池托管管道模式</param>
        /// <param name="managedRuntimeVersion">.net clr版本</param>
        /// <param name="rapidFailProtectionMaxCrashes">最大故障数</param>
        /// <param name="logDirectoryPath">IIS日志目录路径</param>
        /// <param name="logFormat">日志格式</param>
        /// <param name="logExtFileFlags">日志存储的字段</param>
        /// <param name="loggingRolloverPeriod">日志的存储计划</param>
        /// <param name="logTruncateSize">日志单个文件最大大小(MB) 最小为1MB<paramref name="loggingRolloverPeriod">LoggingRolloverPeriod.MaxSize</paramref> </param>
        public static void CreateSite(string siteName, string protocol, string bindingInformation, string physicalPath, bool createAppPool, string appPoolName, long queueLength, ProcessModelIdentityType identityType, long idleTimeout, string appPoolUserName, string appPoolPassword, long maxProcesses, ManagedPipelineMode appPoolPipelineMode, string managedRuntimeVersion, long rapidFailProtectionMaxCrashes, string logDirectoryPath, LogFormat logFormat, LogExtFileFlags logExtFileFlags, LoggingRolloverPeriod loggingRolloverPeriod, long logTruncateSize)
        {
            if (logTruncateSize < 1)
            {
                throw new Exception("日志单个文件最大大小的值必须>=1MB");
            }
            using (var mgr = new ServerManager(ApplicationHostConfigurationPath))
            {
                var site = mgr.Sites[siteName];
                if (site == null)
                {
                    site = mgr.Sites.Add(siteName, protocol, bindingInformation, physicalPath);
                    site.LogFile.Enabled         = true;
                    site.ServerAutoStart         = true;
                    site.LogFile.Directory       = logDirectoryPath;
                    site.LogFile.Period          = loggingRolloverPeriod;
                    site.LogFile.LogExtFileFlags = logExtFileFlags;
                    site.LogFile.TruncateSize    = logTruncateSize * 1024 * 1024;
                    site.LogFile.LogFormat       = logFormat;

                    if (createAppPool)
                    {
                        var pool = mgr.ApplicationPools.Add(siteName);
                        pool.Name = appPoolName;
                        pool.ManagedRuntimeVersion     = managedRuntimeVersion;
                        pool.QueueLength               = queueLength;
                        pool.ProcessModel.MaxProcesses = maxProcesses;
                        if (pool.ProcessModel.IdentityType != identityType)
                        {
                            pool.ProcessModel.IdentityType = identityType;
                        }
                        pool.ProcessModel.IdleTimeout = TimeSpan.FromSeconds(idleTimeout);
                        if (!String.IsNullOrEmpty(appPoolUserName))
                        {
                            pool.ProcessModel.UserName = appPoolUserName;
                            pool.ProcessModel.Password = appPoolPassword;
                        }
                        if (pool.ManagedPipelineMode != appPoolPipelineMode)
                        {
                            pool.ManagedPipelineMode = appPoolPipelineMode;
                        }
                        pool.Failure.RapidFailProtectionMaxCrashes = rapidFailProtectionMaxCrashes;
                        mgr.Sites[siteName].Applications[0].ApplicationPoolName = pool.Name;
                    }
                    mgr.CommitChanges();
                }
                else
                {
                    throw new Exception($"the web site:{siteName} is already exist");
                }
            }
        }
Beispiel #21
0
        public void AppPoolUpdate(string appPoolName, string runtimeVersion, ManagedPipelineMode pipelineMode)
        {
            ApplicationPool appPool = _serverManager.ApplicationPools[appPoolName];

            if (appPool == null)
            {
                throw new Exception(string.Format("应用程序池:{0}不存在!", appPoolName));
            }

            appPool.ManagedRuntimeVersion = runtimeVersion;
            appPool.ManagedPipelineMode = pipelineMode;
            _serverManager.CommitChanges();
        }
Beispiel #22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WebServer" /> class.
        /// </summary>
        /// <param name="siteId">The site id.</param>
        /// <param name="physicalPath">The physical path.</param>
        /// <param name="virtualPath">The virtual path.</param>
        /// <param name="port">The port.</param>
        /// <param name="siteName">The site name.</param>
        /// <param name="requireAuthentication">true if require authentication; otherwise, false.</param>
        /// <param name="enableDirectoryBrowse">true to enable directory browsing; otherwise, false.</param>
        /// <param name="useIIS">true to use IIS Hosted Web Core hosting; false to use managed code web server hosting.</param>
        /// <param name="managedPipelineMode">The managed pipeline mode.</param>
        /// <param name="startNow">true if immediately start service; otherwise, false.</param>
        public WebServer(int siteId, string physicalPath, string virtualPath, int port, string siteName, bool requireAuthentication, bool enableDirectoryBrowse, bool useIIS, ManagedPipelineMode managedPipelineMode, bool startNow)
        {
            this.SiteId                = siteId;
            this.PhysicalPath          = Path.GetFullPath(string.IsNullOrWhiteSpace(physicalPath) ? "." : physicalPath).TrimEnd('\\') + "\\";
            this.VirtualPath           = string.IsNullOrWhiteSpace(virtualPath) ? "/" : "/" + virtualPath.Trim('/');
            this.Port                  = port;
            this.SiteName              = siteName ?? Guid.NewGuid().ToString();
            this.RequireAuthentication = requireAuthentication;
            this.EnableDirectoryBrowse = enableDirectoryBrowse;
            this.IsUsingIIS            = useIIS;
            this.ManagedPipelineMode   = managedPipelineMode;

            if (this.IsUsingIIS)
            {
                this._appHostConfigFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName().Replace(".", string.Empty) + ".config");
            }
            else
            {
                this._binFolder = Path.Combine(this.PhysicalPath, "bin");
                this._binFolderReferenceFile = Path.Combine(this._binFolder, CurrentAssemblyFilename);
                this._onSocketAccept         = new WaitCallback(this.OnSocketAccept);
                this._onStart    = new WaitCallback(this.OnStart);
                this._appManager = ApplicationManager.GetApplicationManager();
                this.ObtainProcessToken();
            }

            if (startNow)
            {
                this.Start();
            }
        }
Beispiel #23
0
 public static bool CreateApplicationPool(string applicationPoolName, ProcessModelIdentityType identityType, string applicationPoolIdentity, string password, string managedRuntimeVersion, bool autoStart, bool enable32BitAppOnWin64, ManagedPipelineMode managedPipelineMode, long queueLength, TimeSpan idleTimeout, long periodicRestartPrivateMemory, TimeSpan periodicRestartTime)
 {
     try
     {
         if (identityType == ProcessModelIdentityType.SpecificUser)
         {
             if (string.IsNullOrEmpty(applicationPoolName))
                 throw new ArgumentNullException("applicationPoolName", "CreateApplicationPool: applicationPoolName is null or empty.");
             if (string.IsNullOrEmpty(applicationPoolIdentity))
                 throw new ArgumentNullException("applicationPoolIdentity", "CreateApplicationPool: applicationPoolIdentity is null or empty.");
             if (string.IsNullOrEmpty(password))
                 throw new ArgumentNullException("password", "CreateApplicationPool: password is null or empty.");
         }
         using (ServerManager mgr = new ServerManager())
         {
             ApplicationPool newAppPool = mgr.ApplicationPools.Add(applicationPoolName);
             if (identityType == ProcessModelIdentityType.SpecificUser)
             {
                 newAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
                 newAppPool.ProcessModel.UserName = applicationPoolIdentity;
                 newAppPool.ProcessModel.Password = password;
             }
             else
             {
                 newAppPool.ProcessModel.IdentityType = identityType;
             }
             if (!string.IsNullOrEmpty(managedRuntimeVersion))
                 newAppPool.ManagedRuntimeVersion = managedRuntimeVersion;
             newAppPool.AutoStart = autoStart;
             newAppPool.Enable32BitAppOnWin64 = enable32BitAppOnWin64;
             newAppPool.ManagedPipelineMode = managedPipelineMode;
             if (queueLength > 0)
                 newAppPool.QueueLength = queueLength;
             if (idleTimeout != TimeSpan.MinValue)
                 newAppPool.ProcessModel.IdleTimeout = idleTimeout;
             if (periodicRestartPrivateMemory > 0)
                 newAppPool.Recycling.PeriodicRestart.PrivateMemory = periodicRestartPrivateMemory;
             if (periodicRestartTime != TimeSpan.MinValue)
                 newAppPool.Recycling.PeriodicRestart.Time = periodicRestartTime;
             mgr.CommitChanges();
         }
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message, ex);
     }
     return true;
 }
Beispiel #24
0
        /// <summary>
        /// 新建网站站点
        /// </summary>
        /// <param name="siteName">站点名</param>
        /// <param name="bindingInfo">绑定的相关信息 "*:&lt;port&gt;:&lt;hostname&gt;" <example>"*:80:myhost.com"</example></param>
        /// <param name="physicalPath">物理路径</param>
        /// <param name="queueLength">队列长度</param>
        /// <param name="maxProcesses">最大工作进程数</param>
        /// <param name="netVersion">.net clr版本</param>
        /// <param name="appPoolPipelineMode">应用程序池托管管道模式</param>
        /// <param name="rapidFailProtectionMaxCrashes">最大故障数</param>
        /// <param name="logDirectoryPath">IIS日志目录路径</param>
        /// <param name="logFormat">日志格式</param>
        /// <param name="logExtFileFlags">日志存储的字段</param>
        /// <param name="loggingRolloverPeriod">日志的存储计划</param>
        /// <param name="logTruncateSize">日志单个文件最大大小(字节)</param>
        public static void CreateSite(string siteName, string bindingInfo, string physicalPath, long queueLength, long maxProcesses, NetVersion netVersion, ManagedPipelineMode appPoolPipelineMode, long rapidFailProtectionMaxCrashes, string logDirectoryPath, LogFormat logFormat, LogExtFileFlags logExtFileFlags, LoggingRolloverPeriod loggingRolloverPeriod, long logTruncateSize)
        {
            var managedRuntimeVersion = netVersion == NetVersion.V2 ? NetVersion2 : NetVersion4;

            CreateSite(siteName, "http", bindingInfo, physicalPath, true, siteName, queueLength, ProcessModelIdentityType.ApplicationPoolIdentity, 120, null, null, maxProcesses, appPoolPipelineMode, managedRuntimeVersion, rapidFailProtectionMaxCrashes, logDirectoryPath, logFormat, logExtFileFlags, loggingRolloverPeriod, logTruncateSize);
        }
        public void CreateApplicationPool(string appPoolName, string appPoolUsername, 
            string appPoolPassword, string runtimeVersion, bool enable32BitOnWin64, 
            ManagedPipelineMode pipelineMode)
        {
            // ensure app pool name specified
            if (String.IsNullOrEmpty(appPoolName))
				throw new ArgumentNullException("appPoolName");
            
			// Create iisAppObject pool
			using (var srvman = GetServerManager())
			{
				// ensure app pool unique
				if (srvman.ApplicationPools[appPoolName] != null)
					throw new Exception("ApplicationPoolAlreadyExists");

				var element = srvman.ApplicationPools.Add(appPoolName);
				//
				element.ManagedPipelineMode = pipelineMode;
				// ASP.NET 2.0 by default
				if (!String.IsNullOrEmpty(runtimeVersion))
					element.ManagedRuntimeVersion = runtimeVersion;
				//
				element.Enable32BitAppOnWin64 = enable32BitOnWin64;
				// set iisAppObject pool identity
				if (!String.IsNullOrEmpty(appPoolUsername))
				{
					element.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
					element.ProcessModel.UserName = appPoolUsername;
					element.ProcessModel.Password = appPoolPassword;
				}
				else
				{
					element.ProcessModel.IdentityType = ProcessModelIdentityType.NetworkService;
				}
				//
				element.AutoStart = true;
				//
				srvman.CommitChanges();
			}
        }
Beispiel #26
0
 public virtual ApplicationPool CreateApplicationPool(string appPoolName, string runtimeVersion = "v4.0", ManagedPipelineMode mode = ManagedPipelineMode.Integrated)
 {
     try
     {
         ApplicationPool newPool = serverManager.ApplicationPools[appPoolName];
         Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration();
         if (newPool != null)
         {
             serverManager.ApplicationPools.Remove(newPool);
         }
         newPool = serverManager.ApplicationPools.Add(appPoolName);
         newPool.ManagedRuntimeVersion = runtimeVersion;
         newPool.ManagedPipelineMode   = mode;
         if (!Environment.Is64BitProcess)
         {
             newPool.Enable32BitAppOnWin64 = true;
         }
         else
         {
             newPool.Enable32BitAppOnWin64 = false;
         }
         serverManager_CommitChanges();
         return(newPool);
     }
     catch (Exception error)
     {
         throw new Exception(string.Format("创建应用程序池时出错:{0}", error.Message));
     }
 }
Beispiel #27
0
 /// <summary>
 /// Converts the <see cref="sourceValue" /> parameter to the <see cref="destinationType" /> parameter using <see cref="formatProvider"
 /// /> and <see cref="ignoreCase" />
 /// </summary>
 /// <param name="sourceValue">the <see cref="System.Object"/> to convert from</param>
 /// <param name="destinationType">the <see cref="System.Type" /> to convert to</param>
 /// <param name="formatProvider">not used by this TypeConverter.</param>
 /// <param name="ignoreCase">when set to <c>true</c>, will ignore the case when converting.</param>
 /// <returns>
 /// an instance of <see cref="ManagedPipelineMode" />, or <c>null</c> if there is no suitable conversion.
 /// </returns>
 public override object ConvertFrom(object sourceValue, global::System.Type destinationType, global::System.IFormatProvider formatProvider, bool ignoreCase) => ManagedPipelineMode.CreateFrom(sourceValue);
        private static IisAppPoolMode GetIisAppPoolMode(ManagedPipelineMode managedPipelineMode)
        {
            switch (managedPipelineMode)
              {
            case ManagedPipelineMode.Integrated:
              return IisAppPoolMode.Integrated;

            case ManagedPipelineMode.Classic:
              return IisAppPoolMode.Classic;

            default:
              throw new NotSupportedException(string.Format("Unknown managed pipeline mode: '{0}'.", managedPipelineMode));
              }
        }
 /// <summary>
 /// 创建应用程序池
 /// </summary>
 /// <param name="poolName">应用程序池名称</param>
 /// <param name="enable32BitOn64">是否启用32位应用程序</param>
 /// <param name="mode">经典模式或者集成模式</param>
 /// <param name="runtimeVersion">CLR版本</param>
 /// <param name="autoStart"></param>
 public static bool CreateAppPool(string poolName, bool enable32BitOn64 = true, ManagedPipelineMode mode = ManagedPipelineMode.Classic, string runtimeVersion = "v4.0", bool autoStart = true)
 {
     using (ServerManager serverManager = new ServerManager())
     {
         if (serverManager.ApplicationPools[poolName] != null)
         {
             throw new Exception("已经存在的应用程序池,请更换应用池名称!");
         }
         ApplicationPool newPool = serverManager.ApplicationPools.Add(poolName);
         newPool.ManagedRuntimeVersion = runtimeVersion;
         newPool.Enable32BitAppOnWin64 = enable32BitOn64;
         newPool.ManagedPipelineMode   = mode;
         newPool.AutoStart             = autoStart;
         serverManager.CommitChanges();
         return(true);
     }
 }
Beispiel #30
0
        /// <summary>
        /// 创建一个新的站点
        /// </summary>
        /// <param name="siteName">站点名称</param>
        /// <param name="protocol">协议</param>
        /// <param name="bindingInformation">绑定信息(协议、IP地址、端口)</param>
        /// <param name="physicalPath">站点物理路径</param>
        /// <param name="createAppPool">是否创建新的应用程序池</param>
        /// <param name="appPoolName">应用程序池名称</param>
        /// <param name="identityType"></param>
        /// <param name="appPoolUserName"></param>
        /// <param name="appPoolPassword"></param>
        /// <param name="appPoolPipelineMode"></param>
        /// <param name="managedRuntimeVersion"></param>
        private static void createSite(string siteName, string protocol, string bindingInformation, string physicalPath, bool createAppPool, string appPoolName, ProcessModelIdentityType identityType,
                                       string appPoolUserName, string appPoolPassword, ManagedPipelineMode appPoolPipelineMode, string managedRuntimeVersion)
        {
            using (ServerManager serverManager = new ServerManager())
            {
                //创建站点
                Site site = serverManager.Sites.Add(siteName, protocol, bindingInformation, physicalPath);

                //是否创建新的应用程序池
                if (createAppPool)
                {
                    //创建应用程序池
                    ApplicationPool pool = serverManager.ApplicationPools.Add(appPoolName);
                    if (pool.ProcessModel.IdentityType != identityType)
                    {
                        pool.ProcessModel.IdentityType = identityType;
                    }
                    if (!String.IsNullOrEmpty(appPoolUserName))
                    {
                        pool.ProcessModel.UserName = appPoolUserName;
                        pool.ProcessModel.Password = appPoolPassword;
                    }
                    if (appPoolPipelineMode != pool.ManagedPipelineMode)
                    {
                        pool.ManagedPipelineMode = appPoolPipelineMode;
                    }
                    pool.ManagedRuntimeVersion = "v4.0";
                    site.Applications["/"].ApplicationPoolName = pool.Name;
                }
                serverManager.CommitChanges();
            }
        }
Beispiel #31
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="applicationPoolName"></param>
 /// <param name="identityType"></param>
 /// <param name="applicationPoolIdentity"></param>
 /// <param name="password"></param>
 /// <param name="managedRuntimeVersion"></param>
 /// <param name="autoStart"></param>
 /// <param name="enable32BitAppOnWin64"></param>
 /// <param name="managedPipelineMode"></param>
 /// <param name="queueLength"></param>
 /// <param name="idleTimeout"></param>
 /// <param name="periodicRestartPrivateMemory"></param>
 /// <param name="periodicRestartTime"></param>
 /// <returns></returns>
 public static bool CreateApplicationPool(string applicationPoolName, ProcessModelIdentityType identityType, string applicationPoolIdentity, string password,
                                          string managedRuntimeVersion, bool autoStart, bool enable32BitAppOnWin64, ManagedPipelineMode managedPipelineMode, long queueLength, TimeSpan idleTimeout,
                                          long periodicRestartPrivateMemory, TimeSpan periodicRestartTime)
 {
     try
     {
         if (identityType == ProcessModelIdentityType.SpecificUser)
         {
             if (string.IsNullOrEmpty(applicationPoolName))
             {
                 throw new ArgumentNullException("applicationPoolName", "CreateApplicationPool: applicationPoolName is null or empty.");
             }
             if (string.IsNullOrEmpty(applicationPoolIdentity))
             {
                 throw new ArgumentNullException("applicationPoolIdentity", "CreateApplicationPool: applicationPoolIdentity is null or empty.");
             }
             if (string.IsNullOrEmpty(password))
             {
                 throw new ArgumentNullException("password", "CreateApplicationPool: password is null or empty.");
             }
         }
         using (ServerManager mgr = new ServerManager())
         {
             if (mgr.ApplicationPools[applicationPoolName] != null)
             {
                 return(true);   // already exists
             }
             ApplicationPool newAppPool = mgr.ApplicationPools.Add(applicationPoolName);
             if (identityType == ProcessModelIdentityType.SpecificUser)
             {
                 newAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
                 newAppPool.ProcessModel.UserName     = applicationPoolIdentity;
                 newAppPool.ProcessModel.Password     = password;
             }
             else
             {
                 newAppPool.ProcessModel.IdentityType = identityType;
             }
             if (!string.IsNullOrEmpty(managedRuntimeVersion))
             {
                 newAppPool.ManagedRuntimeVersion = managedRuntimeVersion;
             }
             newAppPool.AutoStart             = autoStart;
             newAppPool.Enable32BitAppOnWin64 = enable32BitAppOnWin64;
             newAppPool.ManagedPipelineMode   = managedPipelineMode;
             if (queueLength > 0)
             {
                 newAppPool.QueueLength = queueLength;
             }
             if (idleTimeout != TimeSpan.MinValue)
             {
                 newAppPool.ProcessModel.IdleTimeout = idleTimeout;
             }
             if (periodicRestartPrivateMemory > 0)
             {
                 newAppPool.Recycling.PeriodicRestart.PrivateMemory = periodicRestartPrivateMemory;
             }
             if (periodicRestartTime != TimeSpan.MinValue)
             {
                 newAppPool.Recycling.PeriodicRestart.Time = periodicRestartTime;
             }
             mgr.CommitChanges();
         }
     }
     catch// (Exception ex)
     {
         throw;
     }
     return(true);
 }
Beispiel #32
0
 public static string ToSerialString(this ManagedPipelineMode value) => value switch
 {
Beispiel #33
0
        /// <summary>
        /// 创建一个站点
        /// </summary>
        /// <param name="siteName">站点名称</param>
        /// <param name="poolName">程序池名称</param>
        /// <param name="physicalPath">项目所在路径</param>
        /// <param name="port">端口号</param>
        /// <param name="mode">程序池托管模式 默认集成模式</param>
        /// <returns></returns>
        public bool CreateWebSite(string siteName, string poolName, string physicalPath, int port, Dictionary <string, string> mimeDic, ManagedPipelineMode mode = ManagedPipelineMode.Integrated)
        {
            try
            {
                server.Sites.Add(siteName, physicalPath, port);

                //添加web应用程序池
                ApplicationPool pool = server.ApplicationPools.Add(poolName);
                pool.ManagedPipelineMode = mode;
                //设置web应用程序池的Framework版本
                pool.ManagedRuntimeVersion = "v4.0";
                //设置是否启用32位应用程序
                pool.SetAttributeValue("enable32BitAppOnWin64", true);

                //设置web网站的应用程序池
                server.Sites[siteName].Applications[0].ApplicationPoolName = poolName;

                server.CommitChanges();
                Microsoft.Web.Administration.Configuration confg = server.GetWebConfiguration(siteName); //webSiteName站点名称
                AddMIMEType(confg, mimeDic);

                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
Beispiel #34
0
 public static string GetModuleSectionName(this ManagedPipelineMode mode)
 {
     return(mode == ManagedPipelineMode.Classic ?
            _classicPath : _integratedPath);
 }
        private bool DeployApplicationPool(
            ServerManager mgr, ActionType action, string appPoolName, ProcessModelIdentityType identityType, string userName, string password,
            string managedRuntimeVersion, bool autoStart, bool enable32BitAppOnWin64, ManagedPipelineMode managedPipelineMode)
        {
            ApplicationPool appPool = mgr.ApplicationPools[appPoolName];

            if (action == ActionType.CreateOrUpdate)
            {
                if (appPool != null)
                {
                    base.Log.LogMessage("Updating IIS application pool '" + appPoolName + "'...");
                }
                else
                {
                    base.Log.LogMessage("Creating IIS application pool '" + appPoolName + "'...");
                    appPool = mgr.ApplicationPools.Add(appPoolName);
                }
            }
            else if (action == ActionType.Create)
            {
                if (appPool != null)
                {
                    base.Log.LogWarning("DeployAction is set to Create but the IIS application pool '" + appPoolName + "' already exists. Skipping.");
                    return(true);
                }

                base.Log.LogMessage("Creating IIS application pool '" + appPoolName + "'...");
                appPool = mgr.ApplicationPools.Add(appPoolName);
            }
            else if (action == ActionType.Update)
            {
                if (appPool == null)
                {
                    base.Log.LogError("DeployAction is set to Update but the IIS application pool '" + appPoolName + "' does not exist.");
                    return(false);
                }

                base.Log.LogMessage("Updating IIS application pool '" + appPoolName + "'...");
            }

            if (identityType == ProcessModelIdentityType.SpecificUser)
            {
                appPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
                appPool.ProcessModel.UserName     = userName;
                appPool.ProcessModel.Password     = password;
            }
            else
            {
                appPool.ProcessModel.IdentityType = identityType;
            }

            appPool.ManagedRuntimeVersion = managedRuntimeVersion;
            appPool.AutoStart             = autoStart;
            appPool.Enable32BitAppOnWin64 = enable32BitAppOnWin64;
            appPool.ManagedPipelineMode   = managedPipelineMode;

            mgr.CommitChanges();
            base.Log.LogMessage("Created/updated IIS application pool '" + appPoolName + "'.");

            return(true);
        }
Beispiel #36
0
 /// <summary>
 /// 新建网站站点
 /// </summary>
 /// <param name="siteName">站点名</param>
 /// <param name="ip">ip 空字符串则为则直接默认 * </param>
 /// <param name="port">端口</param>
 /// <param name="hostName">主机名</param>
 /// <param name="physicalPath">物理路径</param>
 /// <param name="queueLength">队列长度</param>
 /// <param name="maxProcesses">最大工作进程数</param>
 /// <param name="netVersion">.net clr版本</param>
 /// <param name="appPoolPipelineMode">应用程序池托管管道模式</param>
 /// <param name="rapidFailProtectionMaxCrashes">最大故障数</param>
 /// <param name="logDirectoryPath">IIS日志目录路径</param>
 /// <param name="logFormat">日志格式</param>
 /// <param name="logExtFileFlags">日志存储的字段</param>
 /// <param name="loggingRolloverPeriod">日志的存储计划</param>
 /// <param name="logTruncateSize">日志单个文件最大大小(字节)</param>
 public static void CreateSite(string siteName, string ip, int port, string hostName, string physicalPath, long queueLength, long maxProcesses, NetVersion netVersion, ManagedPipelineMode appPoolPipelineMode, long rapidFailProtectionMaxCrashes, string logDirectoryPath, LogFormat logFormat, LogExtFileFlags logExtFileFlags, LoggingRolloverPeriod loggingRolloverPeriod, long logTruncateSize)
 {
     ip = String.IsNullOrWhiteSpace(ip) ? "*" : ip;
     CreateSite(siteName, $"{ip}:{port}:{hostName}", physicalPath, queueLength, maxProcesses, netVersion, appPoolPipelineMode, rapidFailProtectionMaxCrashes, logDirectoryPath, logFormat, logExtFileFlags, loggingRolloverPeriod, logTruncateSize);
 }
Beispiel #37
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="name"></param>
 /// <param name="runtimeVersion"></param>
 /// <param name="managedPipelineMode"></param>
 /// <param name="identityType"></param>
 /// <param name="privateMemoryLimit"></param>
 /// <returns></returns>
 public AppPoolConfig AddAppPool(string name, string runtimeVersion, ManagedPipelineMode managedPipelineMode, ProcessModelIdentityType identityType, int privateMemoryLimit)
 {
     _privateMemoryLimit = privateMemoryLimit;
     return AddAppPool(name, runtimeVersion, managedPipelineMode, identityType);
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        /// <param name="runtimeVersion"></param>
        /// <param name="managedPipelineMode"></param>
        /// <param name="identityType"></param>
        /// <returns></returns>
        public AppPoolConfig AddAppPool(string name, string runtimeVersion, ManagedPipelineMode managedPipelineMode, ProcessModelIdentityType identityType)
        {
            var appPoolConfig = new AppPoolConfig(_mgr, _logger);

            return(appPoolConfig.AddAppPool(name, runtimeVersion, managedPipelineMode, identityType));
        }