<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>With Great Power comes Great Response.write("Ability") : IIS 7</title><link>http://blogs.msdn.com/phaniraj/archive/tags/IIS+7/default.aspx</link><description>Tags: IIS 7</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Howto: Detect if IIS7 is installed on a Vista Machine</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/17/howto-detect-if-iis7-is-installed-on-a-vista-machine.aspx</link><pubDate>Tue, 17 Apr 2007 16:35:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2163263</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2163263.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2163263</wfw:commentRss><description>&lt;p&gt;Quite Often we come across a Need to find out if IIS 7 is installed before we install any software thats dependent on IIS.&lt;/p&gt; &lt;p&gt;There are many ways to do this .&lt;/p&gt; &lt;p&gt;I will describe one of the Easiest ways to do this .&lt;/p&gt; &lt;p&gt;When IIS is installed on a Vista Machine , it creates a Registry Key under the Node.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;HKLM\Software\Microsoft\InetStp&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The Optional Modules that are selected are specified under the Registry key .&lt;/p&gt; &lt;p&gt;&lt;strong&gt;HKLM\Software\Microsoft\InetStp\Components&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We will write a small code snippet that reads the registry and reports if IIS is installed on a Vista Machine.&lt;/p&gt; &lt;p&gt;1) Include the Microsoft.Win32 Namespace to include the Functions&amp;nbsp; to access the Windows Registry .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Win32;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;2) &lt;span class="rem"&gt;Function To Find out if IIS Is installed on a machine&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;&lt;span class="rem"&gt;&lt;/span&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsIISInstalled(){&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; IISIsInstalled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Try to Open the Registry Key&lt;/span&gt;
RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey(&lt;span class="str"&gt;"Software\\Microsoft\\InetStp"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//If the Registry Key exists, then IIS is Installed on Vista&lt;/span&gt;
IISIsInstalled = softwareKey == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Return Existance to calling Function&lt;/span&gt;
&lt;span class="kwrd"&gt;return&lt;/span&gt; IISIsInstalled;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;3) Function To Find all the Optional Components that are installed with IIS .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] GetOptionalIISComponentsInstalled()  {
&lt;span class="rem"&gt;//The Optional Components are Values  in the Registry Subkey Specified above&lt;/span&gt;
&lt;span class="kwrd"&gt;string&lt;/span&gt;[] optionalComponents = Registry.LocalMachine.OpenSubKey(&lt;span class="str"&gt;"Software\\Microsoft\\InetStp\\Components"&lt;/span&gt;).GetValueNames();
&lt;span class="rem"&gt;//Return the String Array to the calling function&lt;/span&gt;
&lt;span class="kwrd"&gt;return&lt;/span&gt; optionalComponents;
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Please  note that the code Snippet provided is &lt;u&gt;only for Demonstration Purposes &lt;/u&gt;and does not claim to be optimised for any of the below.&lt;/pre&gt;&lt;pre class="csharpcode"&gt; a) Performance&lt;/pre&gt;&lt;pre class="csharpcode"&gt; b) Security &lt;/pre&gt;&lt;pre class="csharpcode"&gt; c) Scalabality&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;u&gt;&lt;strong&gt;Use the  Code snippet  at your own risk&lt;/strong&gt;&lt;/u&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Complete Example:&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Reflection;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Win32;
&lt;span class="kwrd"&gt;namespace&lt;/span&gt; DetectIIS
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program{&lt;/pre&gt;&lt;pre class="csharpcode"&gt;       &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] GetOptionalIISComponentsInstalled(){
            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] optionalComponents = Registry.LocalMachine.OpenSubKey(&lt;span class="str"&gt;"Software\\Microsoft\\InetStp\\Components"&lt;/span&gt;).GetValueNames();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; optionalComponents;
        }&lt;/pre&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsIISInstalled(){
            &lt;span class="kwrd"&gt;bool&lt;/span&gt; IISIsInstalled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey(&lt;span class="str"&gt;"Software\\Microsoft\\InetStp"&lt;/span&gt;);
            IISIsInstalled = softwareKey == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;false&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; IISIsInstalled;
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                Program anInstance = &lt;span class="kwrd"&gt;new&lt;/span&gt; Program();&lt;/pre&gt;&lt;pre class="csharpcode"&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (anInstance.IsIISInstalled())
                {
                    &lt;span class="kwrd"&gt;string&lt;/span&gt;[] installedComponents = anInstance.GetOptionalIISComponentsInstalled();
                    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; component &lt;span class="kwrd"&gt;in&lt;/span&gt; installedComponents)
                    {
                        Console.WriteLine(component);
                    }

                }
                Console.Read();
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (AccessViolationException aceExcep)
            {
                Console.WriteLine(&lt;span class="str"&gt;"You do not have sufficient access to the Registry , please run under elevated mode"&lt;/span&gt;);

            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2163263" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/VISTA/default.aspx">VISTA</category></item></channel></rss>