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); }
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); }
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); }