Also covers
What we are going to do?
We are going to create a simple console application to
Basic requirement
In program.cs
- Create site in IIS using C#
- Create and bind website in IIS using specific port in C#
- Programatically create a website in IIS in C#.
- Automate IIS using C#
- Check website exists on IIS or not.
- Check IIS installed or not.
- Check IIS state either running or stopped or pending.
What we are going to do?
We are going to create a simple console application to
Basic requirement
- Microsoft.Web.Administration.dll
- Runtime version: v2.0.50727
- Location: C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll
- System.ServiceProcess.dll
- Runtime version: v4.0.30319
- Location: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ServiceProcess.dll
In program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using Microsoft.Web.Administration;
using System.Net;
using HostHsmApp;
namespace Create_IIS_website
{
class Program
{
private static 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 void CreateWebsite(
string websiteName,
string hostname,
string phyPath,
string appPool,
string port = "80")
{
ServerManager iisManager = new ServerManager();
iisManager.Sites.Add(websiteName, "http", "*:"+ port +":" + hostname, phyPath);
iisManager.Sites[websiteName].ApplicationDefaults.ApplicationPoolName = appPool;
string ipAddress = "*";
if (Dns.GetHostAddresses(Dns.GetHostName()).Length > 0)
{
string hostName = Dns.GetHostName();
ipAddress = Dns.GetHostByName(hostName).AddressList[0].ToString();
}
serverManager.Sites[websiteName].Bindings.Add(ipAddress + ":"+ port.ToString() + ":", "http");
foreach (var item in iisManager.Sites[websiteName].Applications)
{
item.ApplicationPoolName = appPool;
}
iisManager.CommitChanges();
}
static void CreateIISWebsiteNow()
{
try
{
ServiceController sc = new ServiceController("World Wide Web Publishing Service");
if ((sc.Status.Equals(ServiceControllerStatus.Stopped) || sc.Status.Equals(ServiceControllerStatus.StopPending)))
{
Console.WriteLine("IIS service stopped, starting...");
sc.Start();
}
else
{
Console.WriteLine("Service already running...");
sc.Stop();
}
if (sc.Status.Equals(ServiceControllerStatus.Running))
{
Console.WriteLine("Do you want to create an Application Pool:y/n");
string response = Console.ReadLine();
if (response.ToString() == "y")
{
Console.Write("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("Select Pipeline Mode: 1 for Classic, 2 for Integrated:");
string pipelinemode = Console.ReadLine();
if (pipelinemode.ToLower() == "2")
{
mode = ManagedPipelineMode.Integrated;
}
Console.Write("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("Enter website name:");
string websiteName = Console.ReadLine();
Console.Write("Enter host name:");
string hostname = Console.ReadLine();
Console.Write("Enter physical path for website:");
string phypath = Console.ReadLine();
Console.WriteLine("Enter Application pool Name from listed 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();
CreateWebsite(websiteName, hostname, phypath, poolName);
Console.WriteLine("Website created successfully.");
Console.ReadLine();
}
}
}
catch (Exception exc)
{
Console.WriteLine("Error:" + exc.Message);
}
}
static void Main(string[] args)
{
CreateIISWebsiteNow();
Console.Read();
}
}
}
Output in IIS Manager
