Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I programmatically stop or start a website in IIS (6.0 and 7.0) using MsBuild?

I have Windows Server 2003 (IIS 6.0) and Windows Server 2008 (IIS 7.0) servers, and I use MSBuild for deploying web applications.

I need to do a safe deploy, and do this:

  1. Stop a website in IIS 6 (or an Application in IIS 7), not stop AppPool.

  2. Check if the website is stopped; not running.

  3. If the website is stopped, do another task for deploy.

  4. Start the website IIS 6 (or Application in IIS 7),

How can I achieve this?

Update: Key for me: IIS6WebSite and IIS6AppPool (and for IIS7), do wait for stopped status when try Stop Website or AppPool?

When I execute Stop Action for Website (or Stop Action for AppPool), I need be sure 100% that Website is stopped, and then, and only if Website is Stopped, I can execute other targets.

like image 269
Kiquenet Avatar asked Feb 10 '11 15:02

Kiquenet


People also ask

How do I stop a website from command line using IIS?

The Stop-IISSite cmdlet stops an existing site on the Internet Information Services (IIS) server.

How do I host a website with Inetmgr?

Go to Control Panel > Administrative Tools > Internet Information Services (IIS) Manager. In the Connections panel, expand your host tree, right-click on Sites, and choose Add Website. Enter the new website's name and choose the location. Enter the Host name.


2 Answers

By adding a reference to Microsoft.Web.Administration (which can be found inX:\Windows\System32\inetsrv, or your systems equivalent) you can achieve nice managed control of the situation with IIS7, as sampled below:

namespace StackOverflow {     using System;     using System.Linq;     using Microsoft.Web.Administration;      class Program     {         static void Main(string[] args)         {             var server = new ServerManager();             var site = server.Sites.FirstOrDefault(s => s.Name == "Default Web Site");             if (site != null)             {                 //stop the site...                 site.Stop();                 if (site.State == ObjectState.Stopped)                 {                     //do deployment tasks...                 }                 else                 {                     throw new InvalidOperationException("Could not stop website!");                 }                 //restart the site...                 site.Start();             }             else             {                 throw new InvalidOperationException("Could not find website!");             }         }     } } 

Obviously tailor this to your own requirements and through your deployment build script execute the resulting application.

Enjoy. :)

like image 126
Grant Thomas Avatar answered Oct 22 '22 16:10

Grant Thomas


  • Write a script, e.g. PowerShell, which will stop/start IIS web site programmatically relying on command-line argument, e.g. start-stop.ps1 /stop 1

  • Put it into MsBuild script as a custom step


Check this to find out how to restart IIS AppPool

IIS WMI objects reference

like image 28
abatishchev Avatar answered Oct 22 '22 15:10

abatishchev