コード例 #1
0
        public IDictionary <string, IList <int> > GetIIsWorkerProcesses()
        {
            IDictionary <string, IList <int> > rv = null;

            AppCmdResult rslt = ExecAppcmd("list wp", 1, null, true);

            if (rslt.Success && false == rslt.Output.IsNullOrWhiteSpace())
            {
                string[] lines = rslt.Output.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
                if (false == lines.IsNullOrEmpty())
                {
                    rv = new Dictionary <string, IList <int> >();
                    foreach (string line in lines)
                    {
                        Match       m           = workerProcessRegex.Match(line);
                        int         pid         = Convert.ToInt32(m.Groups[1].Value);
                        string      apppoolName = m.Groups[2].Value;
                        IList <int> pids;
                        if (rv.TryGetValue(apppoolName, out pids))
                        {
                            pids.Add(pid);
                        }
                        else
                        {
                            rv.Add(apppoolName, new List <int> {
                                pid
                            });
                        }
                    }
                }
            }

            return(rv);
        }
コード例 #2
0
        private string GetIIsAppPoolState(string objectName)
        {
            string rv = null;

            AppCmdResult rslt = ExecAppcmd(String.Format(@"list {0} ""/name:{1}""", IIsAppPoolObject, objectName), 1, null, true);

            if (rslt.Success)
            {
                Match m = apppoolStateRegex.Match(rslt.Output);
                rv = m.Groups[1].Value.ToLowerInvariant();
            }

            return(rv);
        }
コード例 #3
0
        public WebServerAdministrationBinding InstallWebApp(string localDirectory, string applicationInstanceName)
        {
            WebServerAdministrationBinding rv = null;

            try
            {
                ushort applicationPort = 0;

                bool exists = DoesIIsAppPoolExist(applicationInstanceName);
                if (exists)
                {
                    log.Error(Resources.WebServerAdministrationProvider_AppAlreadyExists_Fmt, applicationInstanceName);
                }
                else
                {
                    // NB: must lock to ensure multiple threads don't grab the same port.
                    lock (appcmdLock)
                    {
                        string       cmd  = String.Format("add apppool /name:{0}", applicationInstanceName);
                        AppCmdResult rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }

                        cmd = String.Format(
                            "set apppool {0} /autoStart:true /managedRuntimeVersion:v4.0 /managedPipelineMode:Integrated",
                            applicationInstanceName);
                        rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }

                        applicationPort = Utility.RandomFreePort();
                        cmd             = String.Format("add site /name:{0} /bindings:http/*:{1}: /physicalPath:{2}",
                                                        applicationInstanceName, applicationPort, localDirectory);
                        rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }

                        cmd  = String.Format("set site {0} /[path='/'].applicationPool:{0}", applicationInstanceName);
                        rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }

                        cmd  = String.Format("start apppool {0}", applicationInstanceName);
                        rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }

                        cmd  = String.Format("start site {0}", applicationInstanceName);
                        rslt = ExecAppcmd(cmd, 5, twoSeconds);
                        if (false == rslt.Success)
                        {
                            return(null);
                        }
                    }

                    rv = new WebServerAdministrationBinding {
                        Host = localIPAddress.ToString(), Port = applicationPort
                    };
                }

                firewallService.Open(applicationPort, applicationInstanceName);
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }

            return(rv);
        }