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:
Stop a website in IIS 6 (or an Application in IIS 7), not stop AppPool.
Check if the website is stopped; not running.
If the website is stopped, do another task for deploy.
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.
The Stop-IISSite cmdlet stops an existing site on the Internet Information Services (IIS) server.
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.
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. :)
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With