<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.iis.net/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/" xmlns:cs="http://blogs.iis.net/"><channel><title>Kateryna&amp;#39;s Blog</title><link>http://blogs.iis.net/kateroh/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Debug Build: 20510.895)</generator><item><title>Web PI APIs: Visualize Product Hierarchy with DGML</title><link>http://blogs.iis.net/kateroh/archive/2010/03/20/web-pi-apis-visualize-available-products-hierarchy-with-dgml.aspx</link><pubDate>Sat, 20 Mar 2010 06:21:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3741255</guid><dc:creator>kateroh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3741255</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2010/03/20/web-pi-apis-visualize-available-products-hierarchy-with-dgml.aspx#comments</comments><description>&lt;P&gt;Today, I was checking one of my favorite blogs by &lt;A href="http://blogs.msdn.com/tess/" target=_blank mce_href="http://blogs.msdn.com/tess/"&gt;Tess Fernandez&lt;/A&gt;, which is a great source of discussions, tips and tricks around debugging. One of the latest blogs is about &lt;A href="http://www.lovettsoftware.com/blogengine.net/post/2010/01/15/Visualizing-Runtime-Object-Graphs.aspx" mce_href="http://www.lovettsoftware.com/blogengine.net/post/2010/01/15/Visualizing-Runtime-Object-Graphs.aspx"&gt;GCRootToDGML tool&lt;/A&gt; written by &lt;A href="http://www.lovettsoftware.com/blogengine.net/" mce_href="http://www.lovettsoftware.com/blogengine.net/"&gt;Chris Lovett&lt;/A&gt; to generate a visual representation (DGML graph) of the runtime objects graphs. Running Visual Studio 2010 RC for already a couple of weeks, I haven’t even heard about this new feature. It comes as no surprise, since Visual Studio 2010 has tons of great features and it will take some time to discover them all. My immediate thought was to finally realize my long-due project at low cost – generating a diagram of Web PI product dependencies. So, once this idea came to my mind, a blocking thread was spawned stopping me from doing anything else until the goal was reached. What I thought before was going to take at least a day to write, with DGML and VS 2010 turned out to be just a couple of hours including the initial research and playing around with the feature. &lt;/P&gt;
&lt;H2&gt;About DGML&lt;/H2&gt;
&lt;P&gt;DGML stands for &lt;STRONG&gt;Directed Graph Markup Language &lt;/STRONG&gt;and is a subset of XML with rules that Visual Studio 2010 uses to generate its architecture graphs. The format is very easy to use to get started,&amp;nbsp; but it contains way more than it is going to be shown in this post. &lt;/P&gt;
&lt;H2&gt;Goal&lt;/H2&gt;
&lt;P&gt;The goal is to &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;get all the products available in Web PI through all the feeds (product, applications, media, tools and enterprise feeds) &lt;/LI&gt;
&lt;LI&gt;filter them by what is available on the current machine (checking OS and architecture) and what is not yet installed &lt;/LI&gt;
&lt;LI&gt;generate an XML/DGML of what is available with all dependencies&amp;nbsp; and related products &lt;/LI&gt;
&lt;LI&gt;open the generated DGML file with VS 2010 &lt;/LI&gt;
&lt;LI&gt;not forget to say “wow, VS, cool!” &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The format that is going to represent the product dependency hierarchy is very simple:&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: #c3b091 1px solid; BORDER-LEFT: #c3b091 1px solid; PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; WIDTH: 480px; PADDING-RIGHT: 5px; HEIGHT: 130px; OVERFLOW: auto; BORDER-TOP: #c3b091 1px solid; BORDER-RIGHT: #c3b091 1px solid; PADDING-TOP: 5px"&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;DirectedGraph&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://schemas.microsoft.com/vs/2009/dgml"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Links&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Source&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Product1"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Target&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="DependencyProduct1"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Source&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Product1"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Target&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="DependencyProduct2"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Source&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Product2"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;Target&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="DependencyProduct3"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;Links&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;DirectedGraph&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;















.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #fffacd;
	/*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;P&gt;&lt;BR&gt;Each DGML file has to be rooted with “DirectedGraph” and have links defined exactly as shown above with “Source” and “Target” attributes. This xml saved with “.dgml” extension and opened with Visual Studio 2010 will yield the following visual result: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_7392662B.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_7392662B.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_39A3233F.png" width=493 height=104 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_39A3233F.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Wow, VS, cool!!&lt;/P&gt;
&lt;H2&gt;Details&lt;/H2&gt;
&lt;P&gt;In my &lt;A href="http://blogs.iis.net/kateroh/archive/2010/02/27/webpi-api-load-balance-to-set-up-backend-servers-with-latest-microsoft-web-stack.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2010/02/27/webpi-api-load-balance-to-set-up-backend-servers-with-latest-microsoft-web-stack.aspx"&gt;previous post&lt;/A&gt;, I showed how to load all the products regardless of the current platform and architecture, so I’m not going to show the full source code for this project here as it is pretty-straight-forward, but you can download the project &lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/WebPIDependenciesToDGML.zip" mce_href="http://blogs.iis.net/blogs/kateroh/WebPI/WebPIDependenciesToDGML.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The only addition to Program.cs in the project is Link.cs, which contains the Link class, that defines a relationship between two products. &lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Link
    {
        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;enum&lt;/SPAN&gt; RelationshipType
        {
            Dependency,
            RelatedProduct
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; _source;
        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; _target;
        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; RelationshipType _relationshipType;

       &lt;SPAN class=rem&gt;// the rest of the class...&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;P&gt;&lt;BR&gt;&lt;BR&gt;Both _target and _source will hold ProductIds to identify objects in the graph. You can use anything else instead of ProductId to identify products in the graph, but I’m using ProductId because it is a concise, descriptive and unique identifier of a product. If you cannot identify a product by the ProductId displayed in the graph, you can look it up in a corresponding feed or use &lt;STRONG&gt;ProductManager.GetProduct(”ProductId”)&lt;/STRONG&gt; method to find the product.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;RelationshipType will be used to indicate the link between two products, so that the relationship can be displayed differently in the graph (different arrow color). Once the feeds are loaded, I traverse &lt;STRONG&gt;ProductManager.Products&lt;/STRONG&gt; property and define all the links. Finally, I use XmlWriter to create a dgml file. &lt;/P&gt;
&lt;P&gt;You can tweak the code as much as you want to generate different views of Web PI product world. For example, you can see:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;products available in just one particular feed – filter products by &lt;STRONG&gt;Product.FeedLocation&lt;/STRONG&gt; property &lt;/LI&gt;
&lt;LI&gt;products that are not yet installed – filter using &lt;STRONG&gt;Product.IsInstalled&lt;/STRONG&gt; method &lt;/LI&gt;
&lt;LI&gt;products with dependencies (must-have with this product) and related products (nice-to-have) &lt;/LI&gt;
&lt;LI&gt;products available for a particular architecture or platform &lt;/LI&gt;
&lt;LI&gt;any combination of the above and/or your own filters &lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Graphs&lt;/H2&gt;
&lt;P&gt;Here is a couple of graphs I generated tweaking the code here and there (red arrow = dependency, black arrow = related product). &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;1. All products available from just the Tools feed (if currentProduct.FeedLocation.Contains(“Tools”))&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/ToolsFeed.png" mce_href="http://blogs.iis.net/blogs/kateroh/WebPI/ToolsFeed.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_71E19A57.png" width=546 height=153 mce_src="http://blogs.iis.net/blogs/kateroh/image_71E19A57.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;2. All products and applications not yet installed on my machine (Win 7 Ultimate) with only dependencies shown (no related products) and no feeds loaded (load the main feed with filterByArchitectureAndOs==true, no calls to Productmanager.LoadExternalFile and no product.RelatedProducts)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/AvailableProductsNoFeedsNoRelated.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_73FD4878.png" width=962 height=184&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;3. All available (not yet installed on the current machine) products regardless of the platform and architecture. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/AllProducts.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_47E04B87.png" width=963 height=144&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;BR&gt;&lt;BR&gt;4. All applications with dependencies and related products that are not yet installed on my machine&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/AllApps.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_58E4796A.png" width=963 height=76&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Links&lt;/H2&gt;
&lt;P&gt;You can read more about DGML in the following blogs:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/camerons/default.aspx" mce_href="http://blogs.msdn.com/camerons/default.aspx"&gt;Skinner's Blog&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.lovettsoftware.com/blogengine.net/" mce_href="http://www.lovettsoftware.com/blogengine.net/"&gt;Chris Lovett’s Blog&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3741255" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI+APIs/default.aspx">Web PI APIs</category><category domain="http://blogs.iis.net/kateroh/archive/tags/DGML/default.aspx">DGML</category></item><item><title>Web PI APIs: Download Latest Web Stack Products for Any Platform</title><link>http://blogs.iis.net/kateroh/archive/2010/02/27/webpi-api-load-balance-to-set-up-backend-servers-with-latest-microsoft-web-stack.aspx</link><pubDate>Sat, 27 Feb 2010 00:06:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3703703</guid><dc:creator>kateroh</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3703703</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2010/02/27/webpi-api-load-balance-to-set-up-backend-servers-with-latest-microsoft-web-stack.aspx#comments</comments><description>&lt;P&gt;Suppose you have a central Internet faced server and multiple backend servers not connected to the Internet. To insure that your Internet faced server is always up-to-date with the latest Microsoft Web Stack products and updates, you can use &lt;A href="http://www.microsoft.com/web/downloads/platform.aspx" target=_blank mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer&lt;/A&gt;. You can either use Web PI UI to set up your main server or you can automate the setup process by interfacing with Web PI APIs through &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.platforminstaller.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.platforminstaller.aspx"&gt;Microsoft.Web.PlatformInstaller.dll&lt;/A&gt;. It was already shown in &lt;A href="http://blogs.iis.net/kateroh/archive/2010/02/11/webpi-apis-install-a-product-from-a-custom-feed.aspx" target=_blank mce_href="http://blogs.iis.net/kateroh/archive/2010/02/11/webpi-apis-install-a-product-from-a-custom-feed.aspx"&gt;my previous blog post&lt;/A&gt; how to load and install specific products for the current machine through the APIs. In this blog, I will show how to download products for any Web PI supported platform using APIs. This solution might help you in setting up your load balancer that can download and cache products for its backend servers regardless of their OS and architecture. This solution is by no means perfect and final and is given as a sample.&lt;/P&gt;
&lt;H2&gt;Overview&lt;/H2&gt;
&lt;P&gt;From this post you will learn how to use WebPI APIs to:&lt;/P&gt;
&lt;P&gt;- load the main product and application feeds &lt;/P&gt;
&lt;P&gt;- filter products by any OS and architecture&lt;/P&gt;
&lt;P&gt;- pull products with their dependencies&lt;/P&gt;
&lt;P&gt;- manage installers locally in the installer cache&lt;/P&gt;
&lt;P&gt;- avoid a dependency check for downloaded products&lt;/P&gt;
&lt;H2&gt;Details&lt;/H2&gt;
&lt;P&gt;When dealing with Web PI APIs, you will deal mostly with &lt;B&gt;ProductManager&lt;/B&gt; and &lt;B&gt;InstallManager&lt;/B&gt; classes. ProductManager is responsible for loading and filtering product information from the xml feeds, where all product information is stored. And InstallManager is responsible for actually downloading and installing the products (and applications, and updates – basically everything that is available through the Web PI feeds). &lt;/P&gt;
&lt;P&gt;&lt;B&gt;ProductManager&lt;/B&gt; has several overloads for Load method that loads the main feed with all its enclosures (other product feeds like application feed). The overload that will be used in the sample accepts more parameters than his other overloaded counterparts. With this overload you can make Web PI filter products by any OS and architecture. If you use the overload that does not accept parameters for the OS and architecture, it means that Web PI will filter products by version, type and architecture of your current platform. Thus, for the overload that we will be using, you will need to specify the architecture (x86 or x64), the major and minor OS versions, major and minor SP versions and OS type. Here is a small table that shows the major and minor versions of some OSes. &lt;BR&gt;&lt;/P&gt;
&lt;TABLE id=ostable&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=260&gt;&lt;B&gt;OS&lt;/B&gt;&lt;/TD&gt;
&lt;TD width=116&gt;&lt;B&gt;Major Version&lt;/B&gt;&lt;/TD&gt;
&lt;TD width=103&gt;&lt;B&gt;Minor Version&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=260&gt;Windows 7/ Windows Server 2008 R2&lt;/TD&gt;
&lt;TD width=116&gt;6&lt;/TD&gt;
&lt;TD width=103&gt;1&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=260&gt;Vista/Windows Server 2008&lt;/TD&gt;
&lt;TD width=116&gt;6&lt;/TD&gt;
&lt;TD width=103&gt;0&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=260&gt;Windows Server 2003&lt;/TD&gt;
&lt;TD width=116&gt;5&lt;/TD&gt;
&lt;TD width=103&gt;2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=260&gt;Windows XP&lt;/TD&gt;
&lt;TD width=116&gt;5&lt;/TD&gt;
&lt;TD width=103&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;Finally, ProductManager can find you a Product based on its ProductId (can be looked up directly in the xml feed), which will contain all information available for this product including information about its installers. From a product object you just need to pick the right installer you want to use to install this product. The right installer might be based not only on the specific platform you want to install this product on, but also on the language of the installers, if the product is available in that language.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;InstallManager &lt;/B&gt;can cache products without installing them. The only catch in this case is that while loading products (ProductManager.Load), Web PI will perform a dependency check for the products you are trying to load against your &lt;B&gt;current &lt;/B&gt;platform and will throw an exception if you try to load something incompatible with your current platform. That’s fine. You can pragmatically download the installers yourself using the links that each installer object carries along (Installer.InstallerFile.InstallerUrl). The disadvantage of downloading the files yourself is that you don’t use the following goodies that Web PI provides you with in the background when downloading the installers itself:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;installer management in central location, aka Installer Cache (%LocalAppData%\Microsoft\Web Platform Installer\installers) with different paths for different installers of the same product (based on the installer signature) &lt;/LI&gt;
&lt;LI&gt;order of installers – Web PI installs products in a smart way, because some products have to be installed after their dependencies are installed &lt;/LI&gt;
&lt;LI&gt;retry logic for download failures &lt;/LI&gt;
&lt;LI&gt;figuring out the installer’s extension (can be msi or exe or msu (for updates), etc)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;On the other hand, the advantage of using Web PI APIs in this case is still great. You are guaranteed to get "the latest and greatest" products and updates in one central location and Web PI provides you with powerful APIs to leverage this feature in the easy-to-use way that can also be automated! &lt;BR&gt;Take a look yourself…&lt;/P&gt;
&lt;H2&gt;Code&lt;/H2&gt;
&lt;P&gt;You can grab the full project (with only this file in it) &lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/ProductCacher.zip" target=_blank mce_href="http://blogs.iis.net/blogs/kateroh/WebPI/ProductCacher.zip"&gt;here&lt;/A&gt;. &lt;BR&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&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.Collections.Generic;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.IO;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Net;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; Microsoft.Web.PlatformInstaller;

&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; ProductCacher
{
    &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Program
    {
        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;readonly&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; MainXml = &lt;SPAN class=str&gt;"https://go.microsoft.com/fwlink/?LinkId=158722"&lt;/SPAN&gt;;
        
        &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)
        {
            ProductManager productManager = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ProductManager();

            &lt;SPAN class=rem&gt;// 1. Load main product feeds&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// overload documentation: http://msdn.microsoft.com/en-us/library/ee255981.aspx&lt;/SPAN&gt;
            productManager.Load
                (
                    &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Uri(MainXml),                    &lt;SPAN class=rem&gt;// location of the main feed &lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;,                               &lt;SPAN class=rem&gt;// do not filter products by the current architecture and OS&lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;,                                &lt;SPAN class=rem&gt;// load enclosures (eg WebApplicationList.xml)&lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;,                               &lt;SPAN class=rem&gt;// no cache yet, so do not use cached directory&lt;/SPAN&gt;
                    &lt;SPAN class=str&gt;@"d:\MyCache"&lt;/SPAN&gt;,                       &lt;SPAN class=rem&gt;// where to cache XML feeds (the folder should exist)&lt;/SPAN&gt;

                    &lt;SPAN class=rem&gt;// get only products available for &lt;/SPAN&gt;
                    &lt;SPAN class=rem&gt;//      a. x86 architecture (and those available for both x86 AND x64)&lt;/SPAN&gt;
                    &lt;SPAN class=rem&gt;//      b. the current OS (major and minor OS versions)&lt;/SPAN&gt;
                    &lt;SPAN class=rem&gt;//      c. up to service pack 2 (major and minor sevice pack versions)&lt;/SPAN&gt;
                    &lt;SPAN class=rem&gt;//      d. any product types (e.g. Home, Professional, Ultimate, Web Server, etc)&lt;/SPAN&gt;
                    Architecture.x86,                    &lt;SPAN class=rem&gt;// arch&lt;/SPAN&gt;
                    Environment.OSVersion.Version.Major, &lt;SPAN class=rem&gt;// current major version&lt;/SPAN&gt;
                    Environment.OSVersion.Version.Minor, &lt;SPAN class=rem&gt;// current minor version&lt;/SPAN&gt;
                    2,                                   &lt;SPAN class=rem&gt;// current major SP&lt;/SPAN&gt;
                    0,                                   &lt;SPAN class=rem&gt;// current minor SP&lt;/SPAN&gt;
                    0  &lt;SPAN class=rem&gt;// OsType as defined in this list: http://msdn.microsoft.com/en-us/library/ms724358(VS.85).aspx&lt;/SPAN&gt;
                       &lt;SPAN class=rem&gt;// 0 if don't want to filter products by OSType&lt;/SPAN&gt;
                );

            &lt;SPAN class=rem&gt;// 2. Find all the products to cache: .NET Fx 3.5 SP1, SQL Expess, PHP, MySQL, UrlRewrite and SEOToolkit&lt;/SPAN&gt;
            Product netFramework35Sp1 = productManager.GetProduct(&lt;SPAN class=str&gt;"NETFramework35"&lt;/SPAN&gt;);
            Product sqlExpress = productManager.GetProduct(&lt;SPAN class=str&gt;"SQLExpress"&lt;/SPAN&gt;);
            Product php = productManager.GetProduct(&lt;SPAN class=str&gt;"PHP"&lt;/SPAN&gt;);
            Product mySql = productManager.GetProduct(&lt;SPAN class=str&gt;"MySQL"&lt;/SPAN&gt;);
            Product SEOtoolkit = productManager.GetProduct(&lt;SPAN class=str&gt;"SEOToolkit"&lt;/SPAN&gt;);
            Product urlRewrite = productManager.GetProduct(&lt;SPAN class=str&gt;"UrlRewrite"&lt;/SPAN&gt;);
            Product webDeploy = productManager.GetProduct(&lt;SPAN class=str&gt;"WDeploy"&lt;/SPAN&gt;);

            &lt;SPAN class=rem&gt;// 3. Add all products with the dependencies to the install list&lt;/SPAN&gt;
            List&amp;lt;Product&amp;gt; productsToInstall = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;Product&amp;gt;();
            AddProductWithDependencies(netFramework35Sp1, productsToInstall);
            AddProductWithDependencies(sqlExpress, productsToInstall);
            AddProductWithDependencies(php, productsToInstall);
            AddProductWithDependencies(mySql, productsToInstall);
            AddProductWithDependencies(SEOtoolkit, productsToInstall);
            AddProductWithDependencies(urlRewrite, productsToInstall);
            AddProductWithDependencies(webDeploy, productsToInstall);
            
            &lt;SPAN class=rem&gt;// 4. For each product pick the installers (can choose a language of each installer if localized installer is available)&lt;/SPAN&gt;
            List&amp;lt;Installer&amp;gt; installersToUse = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;Installer&amp;gt;();
            Language english = productManager.GetLanguage(&lt;SPAN class=str&gt;"en"&lt;/SPAN&gt;);
            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Product productToInstall &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; productsToInstall)
            {
                Installer currentInstaller = productToInstall.GetInstaller(english);
                
                &lt;SPAN class=rem&gt;// if current product has installer to download (it might be an installer-less Windows component)&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (currentInstaller != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt; &amp;amp;&amp;amp; currentInstaller.InstallerFile != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
                {
                    installersToUse.Add(currentInstaller);
                }
            }

            &lt;SPAN class=rem&gt;// ***********************************************************************//&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// NOTE: if you use this code, to make WebPI download the installers,&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// WebPI will perform a dependency check against your CURRENT platform.&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// For example, if you are trying to download something incompatible with your&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// current OS, WebPI will throw&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// ***********************************************************************//&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;/*&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;             &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            // 5. Prepare installers&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            InstallManager installManager = new InstallManager();&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            installManager.Load(installersToUse);&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            // 6. Download products without installing them&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            foreach (InstallerContext installerContext in installManager.InstallerContexts)&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            {&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                // each installer will be cached under %LocalAppData%\Microsoft\Web Platform Installer\installers\&amp;lt;product Id&amp;gt;\&amp;lt;installer's SHA1&amp;gt;\&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                string failureReason;&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                installManager.DownloadInstallerFile(installerContext, out failureReason);&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                if (!string.IsNullOrEmpty(failureReason))&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                {&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                    Console.Error.WriteLine("Web PI download failure: " + failureReason);&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                }&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;                    &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            }&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;            // ***********************************************************************/&lt;/SPAN&gt;

            &lt;SPAN class=rem&gt;// 5. Download the installers in the same folder Web PI does, aka Installer Cache&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; WebPIinstallersFolder = Environment.ExpandEnvironmentVariables(&lt;SPAN class=str&gt;@"%LocalAppData%\Microsoft\Web Platform Installer\installers"&lt;/SPAN&gt;);
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!Directory.Exists(WebPIinstallersFolder)) 
            {
                Directory.CreateDirectory(WebPIinstallersFolder);
            }
            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Installer installer &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt;  installersToUse) 
            {
                &lt;SPAN class=rem&gt;// re-create WebPI behavior: download each installer &lt;/SPAN&gt;
                &lt;SPAN class=rem&gt;// under %LocalAppData%\Microsoft\Web Platform Installer\installers\&amp;lt;product Id&amp;gt;\&amp;lt;installer's SHA1&amp;gt;\&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; currentInstallerDirectory = 
                    Path.Combine(WebPIinstallersFolder, installer.Product.ProductId) + 
                    "\\" + installer.InstallerFile.SHA1Hash;
                
                &lt;SPAN class=rem&gt;// if the directory &amp;lt;productId&amp;gt;\&amp;lt;installer's hash&amp;gt; doesn't exist, create it&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!Directory.Exists(currentInstallerDirectory)) 
                {
                    Directory.CreateDirectory(currentInstallerDirectory);
                }    
            
                WebClient downloadClient = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; WebClient();
                downloadClient.DownloadFile
                    (
                        installer.InstallerFile.InstallerUrl,
                        Path.Combine(currentInstallerDirectory, installer.Product.ProductId + 
                        &lt;SPAN class=rem&gt;// NOTE: by far not the best method to get a file extension, &lt;/SPAN&gt;
                        &lt;SPAN class=rem&gt;// consider the case where your absolute URL does not contain file extension&lt;/SPAN&gt;
                        Path.GetExtension(installer.InstallerFile.InstallerUrl.AbsolutePath))
                    );
            }
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; AddProductWithDependencies(Product product, List&amp;lt;Product&amp;gt; productsToInstall)
        {
            &lt;SPAN class=rem&gt;// avoid duplicates &lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!productsToInstall.Contains(product))
            {
                productsToInstall.Add(product);
            }

            &lt;SPAN class=rem&gt;// GetMissingDependencies will check whether any dependencies are not installed for the product&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// AND are not already added to the install list (productsToInstall)&lt;/SPAN&gt;
            ICollection&amp;lt;Product&amp;gt; missingDependencies = product.GetMissingDependencies(productsToInstall);
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (missingDependencies != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
            {
                &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Product dependency &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; missingDependencies)
                {
                    AddProductWithDependencies(dependency, productsToInstall);
                }
            }
        }
    }
}&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;BR&gt;
&lt;H2&gt;&lt;BR&gt;Acknowledgements&lt;/H2&gt;
&lt;P&gt;Thanks to Bilal Alam for the original idea.&lt;/P&gt;
&lt;STYLE type=text/css&gt;


#ostable
{
    border-color: #600;
    border-width: 0 0 1px 1px;
    border-style: solid;
}

#ostable td
{
    border-color: #600;
    border-width: 1px 1px 0 0;
    border-style: solid;
    margin: 0;
    padding: 4px;
    background-color: #fcf1da;
}&lt;/STYLE&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3703703" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI+APIs/default.aspx">Web PI APIs</category></item><item><title>Web PI APIs: Install a product from a custom feed</title><link>http://blogs.iis.net/kateroh/archive/2010/02/11/webpi-apis-install-a-product-from-a-custom-feed.aspx</link><pubDate>Thu, 11 Feb 2010 17:55:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3674389</guid><dc:creator>kateroh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3674389</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2010/02/11/webpi-apis-install-a-product-from-a-custom-feed.aspx#comments</comments><description>&lt;P&gt;In my previous blog posts, I described how to create custom feeds for Web Platform Installer to install &lt;A href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx"&gt;custom products&lt;/A&gt; and &lt;A href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx"&gt;applications&lt;/A&gt;. There are many uses to these custom feeds from automatically setting up your environment with custom products in addition to products already offered in WebPI to testing your applications for inclusion to &lt;A href="http://www.microsoft.com/web/gallery/" mce_href="http://www.microsoft.com/web/gallery/"&gt;Windows Web App Gallery&lt;/A&gt;. With the last use in mind, automating the process of testing the application can be very useful. &lt;/P&gt;
&lt;P&gt;From this post you will learn how to use WebPI APIs to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;load an existing custom feed &lt;/LI&gt;
&lt;LI&gt;install a product with all its dependencies &lt;/LI&gt;
&lt;LI&gt;install an application with dependencies and tweak its parameters &lt;/LI&gt;
&lt;LI&gt;select a language of your install &lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Resources&lt;/H2&gt;
&lt;P&gt;Download the solution with the driver below from &lt;A href="http://blogs.iis.net/blogs/kateroh/WebPI/CustomProductInstaller.zip" mce_href="http://blogs.iis.net/blogs/kateroh/WebPI/CustomProductInstaller.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;Refer to MSDN documentation for the full list and description of WebPI APIs: &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.platforminstaller.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.platforminstaller.aspx"&gt;Microsoft.Web.PlatformInstaller Namespace&lt;/A&gt;. &lt;BR&gt;
&lt;H2&gt;Details&lt;/H2&gt;
&lt;P&gt;The program below should be pretty self-descriptive. I’m using a custom feed used in &lt;A href="http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx"&gt;this blog&lt;/A&gt; that contains one product and one application in it - &lt;A href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml" mce_href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml"&gt;http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Reference to Microsoft.Web.PlatformInstaller.dll is required, which is GAC’ed during installation of WebPI. &lt;BR&gt;&lt;BR&gt;First, we need to make WebPI load the main product feed and only then our custom feed. The reason for this is that our custom feed can refer to some products from the main feed as dependencies. For example, the application defines a dependency on &lt;A href="http://www.iis.net/expand/webdeploy" mce_href="http://www.iis.net/expand/webdeploy"&gt;Web Deploy tool&lt;/A&gt;, the tool that WebPI uses to install all Application Gallery applications. If this tool is not installed, it should be installed before that application can be deployed. &lt;/P&gt;
&lt;P&gt;Once all feeds are loaded, we find the products we need to install by its productId (defined as &amp;lt;productId /&amp;gt; in the feeds). The method to find a product and application is the same, though the method to install them is a bit different. There are two major APIs to install products – &lt;STRONG&gt;InstallManager.StartInstallation()&lt;/STRONG&gt; and &lt;STRONG&gt;InstallManager.StartApplicationInstallation()&lt;/STRONG&gt;. There are two reasons why applications should be installed separately from the products:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;To successfully deploy and run applications, the environment should be setup correctly with the requirements. For example, in addition to Web Deploy that all applications require, a certain application might require a certain version of framework to be install, a database engine, UrlRewrite to name just a few. &lt;/LI&gt;
&lt;LI&gt;In order to set parameters on the application (step 9), the application has to be downloaded first. In step 8, in&lt;STRONG&gt; installManager.StartInstallation()&lt;/STRONG&gt; WebPI not only installs all products added to ProductManager, but also downloads all applications added to ProductManager in the same way. Thus, after this step, the parameters can be set and application installation can start.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The driver also signs up for two major WebPI installation events – InstallerStatusUpdated and InstallCompleted and simply outputs progress to the screen.&lt;/P&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.Collections.Generic;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; Microsoft.Web.PlatformInstaller;

&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; CustomProductInstaller
{
    &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Program
    {
        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;readonly&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; MainXml = &lt;SPAN class=str&gt;"https://go.microsoft.com/fwlink/?LinkId=158722"&lt;/SPAN&gt;;
        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;readonly&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomXml = &lt;SPAN class=str&gt;"http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml"&lt;/SPAN&gt;;

        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;readonly&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomProductId = &lt;SPAN class=str&gt;"AppGallerySIRBinaries"&lt;/SPAN&gt;;
        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;readonly&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; CustomAppId = &lt;SPAN class=str&gt;"AppGallerySIRApp"&lt;/SPAN&gt;;

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; _installCompleted = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;

        &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)
        {
            ProductManager productManager = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ProductManager();

            &lt;SPAN class=rem&gt;// 1. Load main product feeds&lt;/SPAN&gt;
            productManager.Load
                (
                    &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Uri(MainXml), &lt;SPAN class=rem&gt;// location of the main feed &lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;,            &lt;SPAN class=rem&gt;// load products for all architectures and platforms&lt;/SPAN&gt;
                    &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;              &lt;SPAN class=rem&gt;// load enclosures (eg WebApplicationList.xml)&lt;/SPAN&gt;
                );

            &lt;SPAN class=rem&gt;// 2. Load custom feed&lt;/SPAN&gt;
            productManager.LoadExternalFile(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Uri(CustomXml));

            &lt;SPAN class=rem&gt;// 3. Find the custom product by product Id&lt;/SPAN&gt;
            Product customProduct = productManager.GetProduct(CustomProductId);
            Product customApp = productManager.GetProduct(CustomAppId);

            &lt;SPAN class=rem&gt;// 4. Find all products to install (custom product + its dependencies)&lt;/SPAN&gt;
            List&amp;lt;Product&amp;gt; productsToInstall = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;Product&amp;gt;();
            AddProductWithDependencies(customProduct, productsToInstall);
            AddProductWithDependencies(customApp, productsToInstall);

            &lt;SPAN class=rem&gt;// 5. Pick the right installers - for the chosen language, if such is not available, fall back to English&lt;/SPAN&gt;
            List&amp;lt;Installer&amp;gt; installersToUse = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;Installer&amp;gt;();
            Language languageOfInstallers = productManager.GetLanguage(&lt;SPAN class=str&gt;"fr"&lt;/SPAN&gt;);
            Language english = productManager.GetLanguage(&lt;SPAN class=str&gt;"en"&lt;/SPAN&gt;);

            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Product productToInstall &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; productsToInstall)
            {
                Installer currentInstaller = productToInstall.GetInstaller(languageOfInstallers);
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (currentInstaller == &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
                {
                    currentInstaller = productToInstall.GetInstaller(english); ;
                }
                installersToUse.Add(currentInstaller);
            }

            &lt;SPAN class=rem&gt;// 6. Prepare installers&lt;/SPAN&gt;
            InstallManager installManager = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InstallManager();
            installManager.Load(installersToUse);

            &lt;SPAN class=rem&gt;// 7. Sign up for installation events&lt;/SPAN&gt;
            installManager.InstallerStatusUpdated += &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; EventHandler&amp;lt;InstallStatusEventArgs&amp;gt;(InstallManager_InstallerStatusUpdated);
            installManager.InstallCompleted += &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; EventHandler&amp;lt;EventArgs&amp;gt;(InstallManager_InstallCompleted);

            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (InstallerContext installerContext &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; installManager.InstallerContexts)
            {
                &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; failureReason;
                installManager.DownloadInstallerFile(installerContext, &lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; failureReason);
            }

            &lt;SPAN class=rem&gt;// 8. Install products first&lt;/SPAN&gt;
            installManager.StartInstallation();
            &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (!_installCompleted) ;
            _installCompleted = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;

            &lt;SPAN class=rem&gt;// 9. At this point all products in ProductManager are downloaded, so we can set parameters on the application&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// NOTE: you cannot set application parameters, before it is downloaded&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// in this case, the language of the Web Deploy package does not matter, since it is not displayed in the UI&lt;/SPAN&gt;
            Installer appInstaller = customApp.GetInstaller(english);
            &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (DeclaredParameter declaredParameter &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; appInstaller.MSDeployPackage.DeclaredParameters)
            {
                &lt;SPAN class=rem&gt;// set values of parameters that do not have default values&lt;/SPAN&gt;
                &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.IsNullOrEmpty(declaredParameter.DefaultValue))
                {
                    appInstaller.MSDeployPackage.SetParameters[declaredParameter.Name] = &lt;SPAN class=str&gt;"New Value"&lt;/SPAN&gt;;
                }
            }

            &lt;SPAN class=rem&gt;// 10. Then install applications (because application might have product dependencies, but not vice versa)&lt;/SPAN&gt;
            installManager.StartApplicationInstallation();
            &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (!_installCompleted) ;

            Console.ReadKey();
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; AddProductWithDependencies(Product product, List&amp;lt;Product&amp;gt; productsToInstall)
        {
            &lt;SPAN class=rem&gt;// avoid duplicates &lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!productsToInstall.Contains(product))
            {
                productsToInstall.Add(product);
            }

            &lt;SPAN class=rem&gt;// GetMissingDependencies will check whether any dependencies are not installed for the product&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;// AND are not already added to the install list (productsToInstall)&lt;/SPAN&gt;
            ICollection&amp;lt;Product&amp;gt; missingDependencies = product.GetMissingDependencies(productsToInstall);
            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (missingDependencies != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
            {
                &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (Product dependency &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; missingDependencies)
                {
                    AddProductWithDependencies(dependency, productsToInstall);
                }
            }
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; InstallManager_InstallerStatusUpdated(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, InstallStatusEventArgs e)
        {
            Console.WriteLine(e.InstallerContext.ProductName + &lt;SPAN class=str&gt;": "&lt;/SPAN&gt; +
                              e.InstallerContext.InstallationState + &lt;SPAN class=str&gt;". "&lt;/SPAN&gt; +
                              e.InstallerContext.ReturnCode.DetailedInformation +
                              &lt;SPAN class=str&gt;"Progress: "&lt;/SPAN&gt; + e.ProgressValue.ToString());
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; InstallManager_InstallCompleted(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, EventArgs e)
        {
            Console.WriteLine(&lt;SPAN class=str&gt;"Installation completed"&lt;/SPAN&gt;);
            _installCompleted = &lt;SPAN class=kwrd&gt;true&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;img src="http://blogs.iis.net/aggbug.aspx?PostID=3674389" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI+APIs/default.aspx">Web PI APIs</category></item><item><title>Sniffer.Installer.Reporter (SIR) for Application Gallery</title><link>http://blogs.iis.net/kateroh/archive/2010/01/25/sniffer-installer-reporter-sir-for-application-gallery.aspx</link><pubDate>Mon, 25 Jan 2010 22:15:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3639655</guid><dc:creator>kateroh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3639655</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2010/01/25/sniffer-installer-reporter-sir-for-application-gallery.aspx#comments</comments><description>&lt;UL&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:0767317B-992E-4b12-91E0-4F059A8CECA8:be30ce16-4581-4b8d-a729-2daa0b7fbbd8 class=wlWriterEditableSmartContent&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/UL&gt;
&lt;P&gt;SIR stands for &lt;B&gt;S&lt;/B&gt;niffer, &lt;B&gt;I&lt;/B&gt;nstaller and &lt;B&gt;R&lt;/B&gt;eporter which comprise the three components of the tool’s validation workflow. &lt;/P&gt;
&lt;P&gt;Application Gallery SIR is a tool that can be used to validate &lt;A href="http://www.microsoft.com/web/gallery/default.aspx" target=_blank mce_href="http://www.microsoft.com/web/gallery/default.aspx"&gt;Application Gallery&lt;/A&gt; packages, which have to be valid Web Deploy packages and also comply with &lt;A href="http://learn.iis.net/page.aspx/605/windows-web-application-gallery-principles/" target=_blank mce_href="http://learn.iis.net/page.aspx/605/windows-web-application-gallery-principles/"&gt;Requirements&lt;/A&gt; before submission to Application Gallery using the &lt;A href="http://www.microsoft.com/web/gallery/developer.aspx" target=_blank mce_href="http://www.microsoft.com/web/gallery/developer.aspx"&gt;submission form&lt;/A&gt;. The steps to package an application for Windows Web Application Gallery are listed &lt;A href="http://learn.iis.net/page.aspx/578/package-an-application-for-the-windows-web-application-gallery/" mce_href="http://learn.iis.net/page.aspx/578/package-an-application-for-the-windows-web-application-gallery/"&gt;here&lt;/A&gt;.&amp;nbsp; When a developer wants to submit a Web Application to the Application Gallery, SIR would help validate the package. &lt;/P&gt;
&lt;H2&gt;Download&lt;/H2&gt;
&lt;P&gt;The SIR command-line executable requires the &lt;A href="http://www.iis.net/expand/WebDeploymentTool" mce_href="http://www.iis.net/expand/WebDeploymentTool"&gt;Microsoft Web Deployment Tool RTW&lt;/A&gt; version to be installed on the machine. A machine running IIS is required if you would like SIR to install the application package using Web Deploy. SIR web application requires .NET Framework 3.5.&lt;/P&gt;
&lt;P&gt;Here is the list of all the resources used in this blog:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/SIR/AppGallerySIR_DLL.zip" mce_href="http://blogs.iis.net/blogs/kateroh/SIR/AppGallerySIR_DLL.zip"&gt;AppGallerySIR.dll (zip)&lt;/A&gt; – API library for extensible solutions&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.iis.net/downloads/files/sir/appgallerysir.msi" mce_href="http://www.iis.net/downloads/files/sir/appgallerysir.msi"&gt;SIR command line tool (msi)&lt;/A&gt; – command line tool&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebApplication.zip" mce_href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebApplication.zip"&gt;SIR web application (Web Deploy zip package)&lt;/A&gt; – ASP.NET web application&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml" mce_href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml"&gt;Web PI custom feed to install web application and command line tool (xml)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For any issues in using this tool, please contact &lt;A href="mailto:wagt-sir@microsoft.com" mce_href="mailto:wagt-sir@microsoft.com"&gt;Web Application Gallery Tools – SIR&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Feature Highlights of SIR&lt;/H2&gt;
&lt;P&gt;SIR comprises of the following features&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Validation Conformance to Application Gallery Guidelines&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Validates the package for a common set of Web Deploy providers used in all application gallery packages. &lt;/LI&gt;
&lt;LI&gt;Validates the package for a valid set of tags for each parameter. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;Support for Features NOT in &lt;/U&gt;&lt;U&gt;Web Deploy&lt;/U&gt;&lt;U&gt; &lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Validation of the hand-created Web Deploy parameters.xml file against a schema file. &lt;/LI&gt;
&lt;LI&gt;Validation of parameter entries inside of parameters.xml. Web Deploy applies parameter values at package install time. SIR provides validation of parameter entries before installation. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;Other Cool Features&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Generation of the humongous Web Deploy command-line automatically based on the package content so users can run the install directly using Web Deploy. &lt;/LI&gt;
&lt;LI&gt;Installation of an actual valid package if IIS is present on the box. This can be configured to be skipped. &lt;/LI&gt;
&lt;LI&gt;SIR can work against multiple packages in a folder and generate corresponding reports. &lt;/LI&gt;
&lt;LI&gt;SIR can also work against a zip package specified by a URL. &lt;/LI&gt;
&lt;LI&gt;SIR generates a detailed xml report with corresponding success or failure messages to help the package creator fix errors in his package before submission to the Application Gallery. &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;Implementation&lt;/H2&gt;
&lt;P&gt;The core functionality of SIR is implemented in AppGallerySIR.SIR namespace inside AppGallerySIR.dll that ships inside the SIR installer. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;AppGallery.SIR namespace contains a couple of essential API functions in PackageValidationManager class&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; ValidatePackage(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; packagePath)&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ValidatePackage expects either a physical path to the package to test or a URL. If a URL is passed, the package will be downloaded to a temporary location. Then the package will be unzipped to a temporary location and validated. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; ValidatePackages(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; folderPath)&lt;/PRE&gt;&lt;/LI&gt;&lt;/UL&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;P&gt;ValidatePackages expects a path to a folder containing zip packages. This method will validate all files with a .zip extension for validity.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;ValidatePackages internally calls ValidatePackage which does the following operations in sequence&lt;/P&gt;
&lt;H3&gt;&lt;U&gt;Sniff&lt;/U&gt;&lt;/H3&gt;
&lt;P&gt;(i) Initializes the package using the Microsoft Web Deployment Object&lt;/P&gt;
&lt;P&gt;(ii) Unzips the package to %temp% directory on disk. &lt;/P&gt;
&lt;P&gt;(iii) Verifies if parameters.xml file is present and if it is consistent with parameters.xsd schema&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Verifies if parameters.xml contains valid Web Deploy recognized tags. &lt;/LI&gt;
&lt;LI&gt;Validates each parameter entry for correct declaration and proper substitution before install. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;(v) Verifies if manifest.xml file exists&lt;/P&gt;
&lt;H3&gt;&lt;U&gt;Install&lt;/U&gt;&lt;/H3&gt;
&lt;P&gt;Once the Sniffer returns successfully, ValidatePackage does the following&lt;/P&gt;
&lt;P&gt;(i) The package is installed on a machine running IIS. &lt;/P&gt;
&lt;P&gt;(ii) Dump ACLs on the package.&lt;/P&gt;
&lt;H3&gt;&lt;U&gt;Report&lt;/U&gt;&lt;/H3&gt;
&lt;P&gt;(i) Finally, a report is generated as an xml file. This report contains elements like the SHA-1, MD5 hash of the package as well as a command-line to install the package.&lt;/P&gt;
&lt;H3&gt;&lt;U&gt;Cleanup&lt;/U&gt;&amp;nbsp;&lt;/H3&gt;
&lt;P&gt;The temporary files and directories are deleted.&lt;/P&gt;
&lt;H2&gt;SIR Command Line (SIRCommandLine.exe)&lt;/H2&gt;
&lt;P&gt;The SIR installer contains an implementation of the command line tool, which is a simple console application, that uses the AppGallerySIR dll. Here, all the settings can be set either through the application configuration file or directly through command line arguments. Here is a set of examples that can help get started with validating a package using the SIRCommandLine.exe&lt;/P&gt;
&lt;P&gt;a) Display command-line help&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;SIRCommandLine.exe /?&lt;/B&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;b) Validate a package&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;SIRCommandLine.exe –source:"d:\package.zip"&lt;/B&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The command unzips package to a temporary location (%temp%, configurable in SIRCommandLine.exe.config) on disk, validates the package and writes a report in the form of an xml in the current folder (eg. Joomla_11-41_AM.xml)&lt;/P&gt;
&lt;P&gt;c) Skip installation of the package to IIS &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;SIRCommandLine.exe –source:"d:\package.zip"” –skipInstallation:true&lt;/B&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;d) Change the file name and folder of the report generated&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;SIRCommandLine.exe –source:"d:\package.zip" –reportFileName:"report.xml" –reportFolder:"d:\FolderName"&lt;/B&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;e) You can configure the above and many other parameters using configuration SIRCommandLine.exe.config.&lt;/P&gt;
&lt;P&gt;f) SIRCommandLine.exe also returns the following error codes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (i)&amp;nbsp;&amp;nbsp; 1 – if package is valid&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ii)&amp;nbsp; 0 – if package has some errors&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (iii) -1 – if there application/setting error&lt;/P&gt;
&lt;H2&gt;SIR Web Application&lt;/H2&gt;
&lt;P&gt;The SIR Web application is a sample application that also runs over AppGallerySIR.dll and validates package(s). The main page provides controls for validating packages and reporting results.&lt;/P&gt;
&lt;P&gt;For the ease of installing the application, &lt;A href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml" target=_blank mce_href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml"&gt;here is a Web PI custom feed&lt;/A&gt; that will help you install the web application. &lt;A href="http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx" target=_blank mce_href="http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx"&gt;Here is a separate blog with a step-by-step instructions&lt;/A&gt; on how to install SIR web application and command line tool using this Web PI custom feed. &lt;/P&gt;
&lt;P&gt;Below is a screenshot of the SIR web application with a sample report.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_199EFDC3.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_199EFDC3.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_112B029F.png" width=637 height=766 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_112B029F.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;SIR APIs &lt;/H2&gt;&lt;BR&gt;
&lt;P&gt;You can perform custom validation of a package using AppGallerySIR.dll. An example is provided below.&lt;/P&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; AppGallery.SIR;

&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; SampleSIRValidation
{
    &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; Program
    {
        &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)
        {
            PackageValidationManager packageValidationManager = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PackageValidationManager();

            &lt;SPAN class=rem&gt;// 1. point location of parameters.xsd&lt;/SPAN&gt;
            packageValidationManager.ParameterSchemaFile = &lt;SPAN class=str&gt;@"%systemdrive%\inetpub\wwwroot\SIR\Parameters.xsd"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;            &lt;SPAN class=rem&gt;// 2. location of xml report to generate&lt;/SPAN&gt;
            packageValidationManager.Reporter.ReportFolder = &lt;SPAN class=str&gt;@"d:\Reports"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;            &lt;SPAN class=rem&gt;// 3. skip installation on IIS&lt;/SPAN&gt;
            packageValidationManager.SkipInstallation = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;

            &lt;SPAN class=rem&gt;// 4. sign up for validation events&lt;/SPAN&gt;
            packageValidationManager.ValidationStatusUpdated += &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PackageValidationManager.ValidationStatusUpdatedHandler(packageValidationManager_ValidationStatusUpdated);
            packageValidationManager.ValidationCompleted += &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PackageValidationManager.ValidationCompletedHandler(packageValidationManager_ValidationCompleted);

            &lt;SPAN class=rem&gt;// 5. validate the package&lt;/SPAN&gt;
            packageValidationManager.ValidatePackage(&lt;SPAN class=str&gt;@"D:\myApplicationGalleryPackage.zip"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; packageValidationManager_ValidationStatusUpdated(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, StatusUpdatedEventArgs e)
        {
            Console.WriteLine(&lt;SPAN class=str&gt;"Validation status updated: "&lt;/SPAN&gt; + e.ValidationEvent.Message);
        }

        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; packageValidationManager_ValidationCompleted(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, ValidationCompletedEventArgs e)
        {
            Console.WriteLine(&lt;SPAN class=str&gt;"Validation result: "&lt;/SPAN&gt; + e.Result);
        }
    }
}&lt;/PRE&gt;
&lt;P&gt;The equivalent command-line for the API implementation above is&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;B&gt;SIRCommandLine.exe -skipInstallation:true -reportFolder:d:\Reports -ParameterSchemaFile:%systemdrive%\inetpub\wwwroot\SIR\Parameters.xsd -sourcePath:D:\myAppGalleryPackage.zip&lt;/B&gt;&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;Future of SIR&lt;/H2&gt;
&lt;P&gt;We plan to eventually integrate SIR with the Application Gallery’s application submission process. Future versions of SIR will be aligned with the requirements of newer versions of the Web Deployment Tool and the Web Application Gallery.&lt;/P&gt;
&lt;H2&gt;Ackowledgements&lt;/H2&gt;
&lt;P&gt;We would like to thank &lt;A href="http://blogs.iis.net/davcox/" mce_href="http://blogs.iis.net/davcox/"&gt;Dave&lt;/A&gt;, &lt;A href="http://blogs.iis.net/nitashav/" mce_href="http://blogs.iis.net/nitashav/"&gt;Nitasha&lt;/A&gt; and the Application Gallery team for their support and feedback. &lt;/P&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;P&gt;&lt;BR&gt;Thanks,&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/yaminij/" target=_blank mce_href="http://blogs.iis.net/yaminij/"&gt;Yamini&lt;/A&gt; and &lt;A href="http://blogs.iis.net/kateroh" target=_blank mce_href="http://blogs.iis.net/kateroh"&gt;Katerina&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3639655" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+Deploy+Packages/default.aspx">Web Deploy Packages</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+App+Gallery/default.aspx">Web App Gallery</category><category domain="http://blogs.iis.net/kateroh/archive/tags/SIR/default.aspx">SIR</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+Deploy+Package+Validation/default.aspx">Web Deploy Package Validation</category></item><item><title>Install SIR Web Application with Web PI</title><link>http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx</link><pubDate>Mon, 25 Jan 2010 22:13:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3639653</guid><dc:creator>kateroh</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3639653</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2010/01/25/install-sir-web-application-with-web-pi.aspx#comments</comments><description>&lt;p&gt;SIR is a tool to validate Application Gallery packages. SIR comes in three different flavors, a dll, command-line tool and a web application. To read more about the dll and command line usage, &lt;a href="http://blogs.iis.net/kateroh/archive/2010/01/25/sniffer-installer-reporter-sir-for-application-gallery.aspx" target="_blank" mce_href="http://blogs.iis.net/kateroh/archive/2010/01/25/sniffer-installer-reporter-sir-for-application-gallery.aspx"&gt;you can refer to this blog&lt;/a&gt;. In this blog, you will learn how the same validation can be done using a one page web application. Similar to other Application Gallery packages, this web application is packaged into a zip file using Web Deploy technology. Similar to the SIR command line tool, this web application runs on top of the AppGallerySIR.dll that contains all important validation methods and outputs the results back on the screen. Below are the step by step instructions on how to install this web application in a few clicks and start validating your Application Gallery packages, existing or new.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer (Web PI)&lt;/a&gt; will help us install the package through a custom feed. &lt;/p&gt;  &lt;p&gt;1. Open Web PI and go to the Options dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_11AAA2F0.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_11AAA2F0.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_27D09875.png" width="638" height="474" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_27D09875.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;2. In the Options dialog, add the following feed: &lt;a href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml" mce_href="http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml"&gt;http://blogs.iis.net/blogs/kateroh/SIR/SIRWebPIFeed.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_0B06FD93.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_0B06FD93.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_081198E0.png" width="638" height="440" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_081198E0.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. A new tab called “Application Gallery Tools” will show. Follow the “Customize” link, select “SIR Web Application” and click to install. Note that if you will choose to install the command line tool as well, it will get installed under &lt;strong&gt;%ProgramFiles%\SIR&lt;/strong&gt; on a 32-bit machine or under &lt;strong&gt;%ProgramFiles(x86)%\SIR&lt;/strong&gt; on a 64-bit machine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_6E97A74F.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_6E97A74F.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_013C7B3A.png" width="638" height="474" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_013C7B3A.png" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;4. This web application requires Web Deploy v1.0 and .NET Framework 3.5 SP1, since validation uses AJAX calls to validate packages. Web PI will install these dependencies for you, if you don’t have them installed yet.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_72B15947.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_72B15947.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_0F6ACE5D.png" width="636" height="439" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_0F6ACE5D.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;5. On the parameters page, choose the physical path for your application. This is required for your configuration in web.config to be updated accordingly.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_56476BC8.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_56476BC8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_4894AFC0.png" width="636" height="438" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_4894AFC0.png" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;    &lt;br /&gt;6. Now application is successfully installed. Click “Launch” to launch the application in the browser or browse to the application’s default.aspx page. The page is ready to validate your packages either through a physical path to the package or a URL. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_31A56413.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_31A56413.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_49C8CE6E.png" width="723" height="767" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_49C8CE6E.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;If you need to configure the proxy for URL validations, uncomment and tweak the lines below in web.config&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.net&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;defaultProxy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;proxy&lt;/span&gt; &lt;span class="attr"&gt;proxyaddress&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;your-proxy-name.domain.com:port-number-if-any&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;bypassonlocal&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;autoDetect&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;defaultProxy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.net&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&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;p&gt;Refer to web.config for all SIR related configuration.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;NOTE: in order to successfully validate the packages, application pool identity for this application should have Read/Write permissions for the following settings defined in web.config:&lt;/b&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;reportFolder&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;=&amp;quot;&amp;lt;..&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&amp;quot; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; 
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;logFolder&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;=&amp;quot;&amp;lt;..&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&amp;quot; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; 
   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;key&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;unzippedFolderLocation&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;=&amp;quot;&amp;lt;..&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&amp;quot; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; 
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;appSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&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;p&gt;&lt;b&gt;During the install time, these settings will be set to the physical path of your application. If the application pool identity already has permissions to this location, no additional step of setting ACLs is required. 
    &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;7. Here is a sample report from the web application:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_6F524BCF.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_6F524BCF.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_6E0DB2F0.png" width="727" height="771" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_6E0DB2F0.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

&lt;p mce_keep="true"&gt;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3639653" width="1" height="1"&gt;</description></item><item><title>Web PI Options Dialog</title><link>http://blogs.iis.net/kateroh/archive/2009/11/04/web-pi-options-dialog.aspx</link><pubDate>Wed, 04 Nov 2009 22:16:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3494880</guid><dc:creator>kateroh</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3494880</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/11/04/web-pi-options-dialog.aspx#comments</comments><description>&lt;p&gt;As many of you already know, version 2 RTW of &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer&lt;/a&gt; released in September. So what’s new in this version since RC that was released in March? First of all, Web PI now caches downloaded installers. Second of all, Web PI now supports 9 additional languages – German, French, Spanish, Russian, Italian, Japanese, Korean, Traditional and Simplified Chinese. This language support extends to both displaying Web PI UI in the language of the current OS locale and installing a product (if available) in the language specified by the user. Finally, the last biggest feature of RTW is extensibility.&lt;/p&gt;  &lt;p&gt;All the new features are surfaced through the Options dialog, which is also new in RTW. Here is a list of new features surfaced through the dialog:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-additional-scenarios-media-and-developer-tools.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-additional-scenarios-media-and-developer-tools.aspx"&gt;Additional scenarios&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Extensibility      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx"&gt;installing custom products&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx"&gt;installing custom applications&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-localization.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-localization.aspx"&gt;Localization&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Installer caching &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some of these features are rather too big to include them in one article and are described separately through the links provided in each title. Thus, this article will cover only the remaining features surfaced through the Options dialog &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Installer caching, and &lt;/li&gt;    &lt;li&gt;Resetting the options &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_43852EC3.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_43852EC3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_283CAFF5.png" width="560" height="429" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_283CAFF5.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Installer Caching&lt;/h2&gt;  &lt;p&gt;In previous versions of Web PI, if installation fails for some reason and the user has to start installation again, Web PI would have to download the selected product again in order to start installation. This version of Web PI caches downloaded products in case it would want them again. Thus, every time you install something it gets cached under &lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Arial Black"&gt;%LocalAppData%\Microsoft\Web Platform Installer\installers&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If installation fails, you can always run the cached installer that is likely to have a UI that might surface the errors better. Also, if you want to install the same set of products on a different machine, you can just copy the installer cache folder to that machine to the same location and Web PI will pick it up. No worries if an installer gets updated for a product, since Web PI will compare the time stamps and download the newer file when you request to install the product again. The size of the cache is always shown in the dialog. If it gets too big or you don’t find it useful anymore (everything installs fine), you can clear the cache by clicking on “Delete installer cache folder” hyperlink.&lt;/p&gt;  &lt;h2&gt;Resetting the options&lt;/h2&gt;  &lt;p&gt;From the command line you can launch Web PI with a /reset switch that will restore your options to the default state:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Arial Black"&gt;&amp;quot;%ProgramFiles%\Microsoft\Web Platform Installer\WebPlatformInstaller.exe&amp;quot; /reset&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Enjoy the new set of features in Web Platform Installer and please provide your feedback to help us make the product serve your needs better!&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3494880" width="1" height="1"&gt;</description></item><item><title>Web PI Additional Scenarios: Media and Developer Tools</title><link>http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-additional-scenarios-media-and-developer-tools.aspx</link><pubDate>Thu, 29 Oct 2009 22:18:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3484584</guid><dc:creator>kateroh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3484584</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-additional-scenarios-media-and-developer-tools.aspx#comments</comments><description>&lt;P&gt;Web Platform Installer now offers a set of Media and Azure products that are not included in the set of Web PI products by default. These additional scenarios can be enabled through the options dialog: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_37C3B817.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_37C3B817.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_0D940A2F.png" width=615 height=454 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_0D940A2F.png"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Options dialog is a new RTW dialog that allows enabling the additional scenarios among other new features: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/clip_image0044_0125E706.jpg" mce_href="http://blogs.iis.net/blogs/kateroh/clip_image0044_0125E706.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image004[4] border=0 alt=clip_image004[4] src="http://blogs.iis.net/blogs/kateroh/clip_image0044_thumb_643CC230.jpg" width=619 height=427 mce_src="http://blogs.iis.net/blogs/kateroh/clip_image0044_thumb_643CC230.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.microsoft.com/expression/products/Web_Overview.aspx" mce_href="http://www.microsoft.com/expression/products/Web_Overview.aspx"&gt;Media Platform&lt;/A&gt; offers a set of products and services to enable a server side story of the HD smooth streaming. To include all Media products, check “Media” and click Ok. The new tab “Media Platform” will appear in Web PI that will offer a full set of Media Products offered up to the date. The following set of products is available so far (together with &lt;A href="http://www.microsoft.com/expression/products/Encoder_Overview.aspx"&gt;Expressions Encoder&lt;/A&gt; that is available from Media Content pillar): &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/clip_image0064_381FC53F.jpg" mce_href="http://blogs.iis.net/blogs/kateroh/clip_image0064_381FC53F.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image006[4] border=0 alt=clip_image006[4] src="http://blogs.iis.net/blogs/kateroh/clip_image0064_thumb_302822DD.jpg" width=622 height=460 mce_src="http://blogs.iis.net/blogs/kateroh/clip_image0064_thumb_302822DD.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;For additional Developer Tools products the following products are offered: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows Azure Tools for Microsoft Visual Studio &lt;/LI&gt;
&lt;LI&gt;Expressions Web 3 Trial &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Windows Azure Tools for Visual Studio enables web application development on &lt;A href="http://microsoft.com/azure" mce_href="http://microsoft.com/azure"&gt;Windows Azure Platform.&lt;/A&gt; It is one of the offered &lt;A href="http://www.microsoft.com/azure/sdk.mspx" mce_href="http://www.microsoft.com/azure/sdk.mspx"&gt;Windows Azure Developer SDKs&lt;/A&gt;. &lt;A href="http://www.microsoft.com/expression/products/Web_Overview.aspx" mce_href="http://www.microsoft.com/expression/products/Web_Overview.aspx"&gt;Expressions Web 3&lt;/A&gt; is a WYSIWYG HTML editor for faster and easier design of web sites.&lt;/P&gt;
&lt;P&gt;To enable a set of products under Developers Tools, enable Developers scenario through the Options dialog. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/clip_image0084_561DD333.jpg" mce_href="http://blogs.iis.net/blogs/kateroh/clip_image0084_561DD333.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image008[4] border=0 alt=clip_image008[4] src="http://blogs.iis.net/blogs/kateroh/clip_image0084_thumb_7C138389.jpg" width=620 height=459 mce_src="http://blogs.iis.net/blogs/kateroh/clip_image0084_thumb_7C138389.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Now you can install any additional Media or Developers Tools product with a full-blown Web PI experience, where Web PI pulls in the dependencies for you and checks for incompatibilities with already installed products.&lt;/P&gt;
&lt;P&gt;These are the “extra” products offered by Web PI in additional scenarios: Media and Developer Tools scenarios. Stay tuned for more products and updates!&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3484584" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/web+PI+Extensibility/default.aspx">web PI Extensibility</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category></item><item><title>Web PI Localization</title><link>http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-localization.aspx</link><pubDate>Thu, 29 Oct 2009 18:36:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3484264</guid><dc:creator>kateroh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3484264</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/10/29/web-pi-localization.aspx#comments</comments><description>&lt;P&gt;Version 2 RTW of Web Platform Installer, released in September, now not only comes localized in 9 languages - English, German, French, Spanish, Russian, Italian, Japanese, Korean, Traditional and Simplified Chinese, but also supports installations of products in supported languages. Now, users can choose the language in which they want Web PI to install the products. Though, not all products are localized in all 9 languages. Those products that are not available in the language selected by the user or not localized at all, will be offered in English. &lt;/P&gt;
&lt;P&gt;This article will talk about the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#DisplayLanguage" mce_href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#DisplayLanguage"&gt;The display language of Web PI UI&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#LanguageOfInstallers" mce_href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#LanguageOfInstallers"&gt;The language of products available in more than one language&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#CustomLoc" mce_href="http://blogs.iis.net/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=1203&amp;amp;postid=3484264#CustomLoc"&gt;Custom products and localization &lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With extensibility added to Web PI story, the users will also be able to install &lt;EM&gt;custom &lt;/EM&gt;products in different languages. To read about extensibility refer to the following articles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx"&gt;Web PI Extensibility: Custom Feeds – Installing Custom Products&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx"&gt;Web PI Extensibility: Custom Feeds – Installing Custom Applications&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;H2&gt;&lt;A style="COLOR: black; text: decoration:none" title=DisplayLanguage name=DisplayLanguage&gt;&lt;/A&gt;The display language of Web PI UI&lt;/H2&gt;
&lt;P&gt;If your system display language is one of the nine Web PI supported languages, Web PI will automatically show up translated in your display language. To change or install a display language (Vista and above) go to Control Panel--&amp;gt;Regional and Language Options--&amp;gt;Install or Uninstall display languages, install a display language from the original installation CD, restart the machine and enjoy your operating system in your preferred language… along with Web PI localized in the same language, given it is one of the supported languages.&lt;/P&gt;
&lt;H2&gt;&lt;A style="COLOR: black; text: decoration:none" title=LanguageOfInstallers name=LanguageOfInstallers&gt;&lt;/A&gt;The language of products&lt;/H2&gt;Now, Web PI offers products that are available in more than one language. However, not all products are available in multiple languages and not all products that support more than one language, support all other 9 Web PI supported languages. Below is the matrix of products offered with Web PI v2 RTW and languages these products are localized in. 
&lt;TABLE border=1 cellSpacing=3 cellPadding=3&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Title&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;French&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Spanish&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;German&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Japanese&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Korean&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Simplified &lt;BR&gt;Chinese&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Traditional &lt;BR&gt;Chinese&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&lt;B&gt;Italian&lt;/B&gt;&lt;/TD&gt;
&lt;TH vAlign=bottom&gt;&lt;B&gt;Russian&lt;/B&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom width=79&gt;
&lt;P&gt;Administration Pack 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom width=79&gt;
&lt;P&gt;Application Request Routing 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Database Manager 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom width=52&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom width=48&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;External Cache 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;FTP Publishing Service 7.5&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;PowerShell Snap-in For IIS7 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;IIS Media Services 2.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Remote Admin Manager for IIS7 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Silverlight 3 Tools for Visual Studio&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;SQL Server Express 2008 with Service Pack 1&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;SQL Server 2008 Express with Advanced Services&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;SQL Server 2008 Express with Tools&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;SQL Server 2008 Management Studio Express&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Web Deployment Tool 1.0 RC&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Visual Web Developer 2008 Express with SP1&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;WebDav 7.5&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;Web Farm Framework 1.0&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=bottom&gt;
&lt;P&gt;URL Rewrite 1.1&lt;/P&gt;&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD class=xloc vAlign=bottom class="xloc"&gt;x&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD vAlign=bottom&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;To make Web PI offer products in a language other than English, go to Options dialog and select the language for your installations:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/clip_image002_496F58FF.jpg" mce_href="http://blogs.iis.net/blogs/kateroh/clip_image002_496F58FF.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image002 border=0 alt=clip_image002 src="http://blogs.iis.net/blogs/kateroh/clip_image002_thumb_2FD7A605.jpg" width=627 height=432 mce_src="http://blogs.iis.net/blogs/kateroh/clip_image002_thumb_2FD7A605.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Once you choose a language other than English for your installations, Web PI UI will show you the same set of products with the only difference, that those products that are not available in the language you have chosen, will have “(English)” next to their title suggesting that if you pick those, they will install in English.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_21D03192.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_21D03192.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_5C1B81A6.png" width=631 height=475 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_5C1B81A6.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;BR&gt;
&lt;H2&gt;&lt;A style="COLOR: black; text: decoration:none" title=CustomLoc name=CustomLoc&gt;&lt;/A&gt;Custom products and localization&lt;/H2&gt;
&lt;P&gt;It was briefly covered in previous articles about extensibility, how to make a custom product localizable in more than one language. Let’s take a sample feed from &lt;A href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx" mce_href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx"&gt;that article&lt;/A&gt; and get it localized.&lt;/P&gt;
&lt;P&gt;In the example below, SampleProduct is localized in Italian – both in display language and installer. Note, how you have to add a unique (across all Web PI) resource name id to each element you want to translate: resourceName="" and then reference it in your translation xml.&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: #c3b091 1px solid; BORDER-LEFT: #c3b091 1px solid; BACKGROUND-COLOR: #fffacd; WIDTH: 731px; HEIGHT: 400px; OVERFLOW: auto; BORDER-TOP: #c3b091 1px solid; BORDER-RIGHT: #c3b091 1px solid"&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN class=html&gt;xml&lt;/SPAN&gt; &lt;SPAN class=attr&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1.0"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;encoding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="utf-8"&lt;/SPAN&gt;?&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.w3.org/2005/Atom"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product WebPI v2 RTW Feed&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;href&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.contoso.com/SampleProductFeed.xml"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-9-29T16:30:00Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product Builder&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProductFeed.xml&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;resourcesList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;resources&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;culture&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;en&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;culture&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;resources&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;resources&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;culture&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;it&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;culture&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;url&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProduct_it.xml&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;url&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;resources&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;resourcesList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt; &lt;SPAN class=attr&gt;resourceName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_Title"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;summary&lt;/SPAN&gt; &lt;SPAN class=attr&gt;resourceName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_Summary"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Just summary&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;summary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;longSummary&lt;/SPAN&gt; &lt;SPAN class=attr&gt;resourceName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_LongSummary"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Long summary of SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;longSummary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productFamily&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Products&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productFamily&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;images&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;icon&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;c:\SampleProductIcon.png&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;icon&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;images&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product Builder&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-9-29T12:30:00Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    
    &lt;SPAN class=rem&gt;&amp;lt;!-- How can WebPI know your product is installed? --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;or&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- 1. Through registry (version value should be 1.0.0, if dont care about the verion, should be just keypath) --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;registry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;keyPath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;HKEY_LOCAL_MACHINE\SOFTWARE\SampleProduct\Sample Product Version 1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;keyPath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Version&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueValue&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueValue&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;registry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;file&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- 2. Through filepath - if the exe is at this location, WebPI will know that SampleProduct is installed --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;filePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%ProgramFiles%\SampleProduct\SampleProduct.exe&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;filePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;file&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;or&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         What products need to be installed first? &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         Define dependencies through ProductId property of products&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         declared in the main WebProductList file or other previously &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         added feeds &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;    --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;dependency&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;IISManagementConsole&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;dependency&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- SampleProduct cannot be installed if product IncompatibleSampleProduct is already installed --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibilities&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibleProduct&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;IncompatibleSampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibleProduct&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibilities&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         installers and installer commands. Here you can define separate installers for&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         different architectures, OSes, SKUs and languages&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;    --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installers&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- installer Id should be unique for every SampleProduct installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- English installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;en&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- same English installer for both x86 and x64 --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x86&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x64&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;             list of OSes and SKUs this product can be installed on. On every OS/SKU that is not &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;             supported, the product will not display &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;        --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- the product is supported on Vista/Windows Server SP1 + --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;6&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

            &lt;SPAN class=rem&gt;&amp;lt;!-- list of SKUs --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Server&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HomePremium&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Ultimate&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Enterprise&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Business&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- before the user will install the product, the link to the following EULA will be presented --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/eula.html&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- this info is important for WebPI to verify that the downloaded file was not tampered --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=rem&gt;&amp;lt;!-- size in KBs --&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1024&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProduct_EnglishInstaller.msi&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;111222FFF000BBB444555EEEAAA777888999DDDD&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- how should WebPI install your product? --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%InstallerFile%&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

      &lt;SPAN class=rem&gt;&amp;lt;!-- x64 architecture installer --&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- installer Id should be unique for every SampleProduct installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- Italian installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;it&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        
        &lt;SPAN class=rem&gt;&amp;lt;!-- same Italian installer for both x86 and x64 --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x86&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x64&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- the product is supported on Vista/Windows Server SP1 + --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;6&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

            &lt;SPAN class=rem&gt;&amp;lt;!-- list of SKUs --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Server&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HomePremium&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Ultimate&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Enterprise&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Business&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- before the user will install the product, the link to the following EULA will be presented --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/eula.html&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- this info is important for WebPI to verify that the downloaded file was not tampered --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=rem&gt;&amp;lt;!-- size in KBs --&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1024&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProduct_ItalianInstaller.msi&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;111222FFF000BBB444555EEEAAA777888999DDDD&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- how should WebPI install your product? --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%InstallerFile%&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installers&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=rem&gt;&amp;lt;!-- define a tab that contains SampleProduct --&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;tabs&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;tab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillarTab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleTab&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Tab&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;My sample tab for my sample product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillar&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Pillar&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Install sample product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupingId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProductFamilyGrouping&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupingId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;recommended&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;recommended&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillar&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillarTab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;tab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;tabs&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupings&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;grouping&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProductFamilyGrouping&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=rem&gt;&amp;lt;!-- combine products based on their productFamily attributes --&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;attribute&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;productFamily&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;attribute&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;include&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;item&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Products&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;item&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;include&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;grouping&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupings&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color:#fffacd;
	/*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; }
.xloc { background-color: #f1e788; }&lt;/STYLE&gt;

&lt;P&gt;And SampleProduct_it.xml referenced in the resource list will have to look something like this:&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: #c3b091 1px solid; BORDER-LEFT: #c3b091 1px solid; BACKGROUND-COLOR: #fffacd; WIDTH: 730px; HEIGHT: 220px; OVERFLOW: auto; BORDER-TOP: #c3b091 1px solid; BORDER-RIGHT: #c3b091 1px solid"&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN class=html&gt;xml&lt;/SPAN&gt; &lt;SPAN class=attr&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1.0"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;encoding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="utf-8"&lt;/SPAN&gt;?&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;root&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_Title"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xml:space&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="preserve"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct Title in Italian&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_Summary"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xml:space&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="preserve"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct Summary in Italian&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="Entry_SampleProduct_LongSummary"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xml:space&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="preserve"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct Long Summary in Italian&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;value&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;data&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;root&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Conclusion:&lt;/U&gt;&lt;/STRONG&gt; to get all resource strings in your xml file localized, you need to point Web PI to another xml with all the translations. Resource section in resourceList of the first xml takes care of this. If you have your custom product available in more than one language, you can have a different installer for each of your supported language and hint Web PI with &amp;lt;languageId&amp;gt; element in your installer portion of the product definition, which installer to use for which language. &lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3484264" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category></item><item><title>Web PI Extensibility: Custom Feeds – Installing Custom Applications</title><link>http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx</link><pubDate>Sat, 24 Oct 2009 04:13:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3474735</guid><dc:creator>kateroh</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3474735</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-applications.aspx#comments</comments><description>&lt;p&gt;One of the most important features of &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer&lt;/a&gt;, version 2 RTW of which released in September, is that it surfaces web applications offered by &lt;a href="http://www.microsoft.com/web/gallery/default.aspx" mce_href="http://www.microsoft.com/web/gallery/default.aspx"&gt;Windows Web App Gallery&lt;/a&gt;. The Gallery is the place for open source apps that can be submitted through &lt;a href="http://www.microsoft.com/web/gallery/developer.aspx" mce_href="http://www.microsoft.com/web/gallery/developer.aspx"&gt;online submission process&lt;/a&gt; and be available through various sources, including Web PI, to millions of people. Both submission and admission is totally free, the application just needs to adhere to &lt;a href="http://learn.iis.net/page.aspx/605/web-application-gallery-principles/" mce_href="http://learn.iis.net/page.aspx/605/web-application-gallery-principles/"&gt;App Gallery Principles&lt;/a&gt; and be a &lt;a href="http://learn.iis.net/page.aspx/578/application-packaging-guide-for-the-windows-web-application-gallery/" mce_href="http://learn.iis.net/page.aspx/578/application-packaging-guide-for-the-windows-web-application-gallery/"&gt;Web Deploy zip package&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;However, you don’t need to submit an app to the App Gallery to make Web PI install it for you. With a new feature that version 2 comes with – extensibility – deploying your custom application via Web PI becomes a piece of cake. This article will show you how to create a custom feed for Web PI to recognize your application and be able to install it.&lt;/p&gt;  &lt;p&gt;All you need to start with this article is a &lt;a href="http://www.iis.net/extensions/WebDeploymentTool" target="_blank" mce_href="http://www.iis.net/extensions/WebDeploymentTool"&gt;Web Deploy&lt;/a&gt; zip package of your app and (optionally) an icon for the prettier UI display of your app.&lt;/p&gt;  &lt;p&gt;Let the fun begin!&lt;/p&gt;  &lt;p&gt;The feed below represents an example of how to add applications with ASP.NET/SQL and PHP/MySql dependencies, create a new tab and subtabs based on keywords, group products together and hint Web PI that your product is available in different languages. Please note that you have to define a new custom tab for your custom products, since they cannot be added to Web PI core tabs.&lt;/p&gt;  &lt;p&gt;You can also download this feed from &lt;a href="http://blogs.iis.net/blogs/kateroh/WebPI/SampleCustomAppsFeed.xml" target="_blank"&gt;here&lt;/a&gt; or add it to Web PI by specifying this link: &lt;a title="http://blogs.iis.net/blogs/kateroh/WebPI/SampleCustomAppsFeed.xml" href="http://blogs.iis.net/blogs/kateroh/WebPI/SampleCustomAppsFeed.xml"&gt;http://blogs.iis.net/blogs/kateroh/WebPI/SampleCustomAppsFeed.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="border-bottom: #c3b091 1px solid; border-left: #c3b091 1px solid; background-color: #fffacd; width: 730px; height: 570px; overflow: auto; border-top: #c3b091 1px solid; border-right: #c3b091 1px solid"&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;feed&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1.0.0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Applications for WebPI v2 RTW Feed&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;link&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.contoso.com/SampleApplicationsFeed.xml&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2009-10-5T16:30:00Z&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Application Builder&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SampleApplicationsFeed.xml&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="rem"&gt;&amp;lt;!-- Sample ASP.NET &amp;amp; SQL app with dependencies --&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;application&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample_ASPNET_SQL_App&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample ASP.NET and SQL application&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ASP.NET and SQL application sample&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;longSummary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample ASP.NET and SQL to show how to add a feed with a custom ASP.NET application to WebPI and define all dependencies.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;longSummary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="rem"&gt;&amp;lt;!-- Defines grouping for the application based on the keyword(s) --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ASPNETApps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1.0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;images&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;icon&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;c:\SampleASPNETAppIcon.jpg&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;icon&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;images&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2009-10-5T18:30:02Z&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;published&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2009-10-5T18:30:02Z&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;published&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Application Builder&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="rem"&gt;&amp;lt;!-- Bring along SQLExpress, if it is not installed as a related/nice-to-have product, not a dependency --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;related&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;relatedProduct&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SQLExpress&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;relatedProduct&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;related&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;
&lt;span class="rem"&gt;         Minimum set of requirements/dependencies in order to successfully install the application: &lt;/span&gt;
&lt;span class="rem"&gt;         WDeploy, SQL Management Objects and URL Rewrite.&lt;/span&gt;
&lt;span class="rem"&gt;    --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;and&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SMO&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;WDeployNoSMO&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;UrlRewrite2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;and&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
     
    &lt;span class="rem"&gt;&amp;lt;!-- Installer for an application should be Web Deploy package --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;&amp;lt;!-- List of languages this package is localized in: English, Korean, Spanish, Traditional and Simplified Chinese --&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;en&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ko&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;es&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;zh-tw&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;zh-cn&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installerFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="rem"&gt;&amp;lt;!-- size of the package in KBs --&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1024&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installerURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SampleASPNETApplication.zip&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installerURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;displayURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SampleASPNETApplication.aspx&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;displayURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="rem"&gt;&amp;lt;!-- SHA of the package file for signature verification --&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sha1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1223334444555556666667777777888888889999&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;sha1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installerFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;helpLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SampleASPNETApplicationForum.aspx&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;helpLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;msDeploy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;startPage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="rem"&gt;&amp;lt;!-- start with a setup page rather than a default one --&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;startPage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Setup.aspx&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;startPage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;startPage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;msDeploy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="rem"&gt;&amp;lt;!-- Sample PHP &amp;amp; MySQL app with dependencies --&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;application&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample_PHP_MySQL_App&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample PHP and and MySQL application&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PHP and MySQL application sample&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;summary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;longSummary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample PHP and MySQL to show how to add a feed with a custom PHP application to WebPI and define all dependencies.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;longSummary&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="rem"&gt;&amp;lt;!-- Display under PHPApps keyword subtab --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PHPApps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1.0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;images&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;icon&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;c:\SamplePHPAppIcon.jpg&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;icon&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;images&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2009-10-5T18:30:02Z&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;updated&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;published&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2009-10-5T18:30:02Z&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;published&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Application Builder&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;uri&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="rem"&gt;&amp;lt;!-- Bring along SQLExpress, if it is not installed as a related/nice-to-have product, not a dependency --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;related&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;relatedProduct&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SQLExpress&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;relatedProduct&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;related&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;
&lt;span class="rem"&gt;         Minimum set of requirements/dependencies in order to successfully install the application: &lt;/span&gt;
&lt;span class="rem"&gt;         PHP, WDeploy, SQL Management Objects, MySql Connector and URL Rewrite.&lt;/span&gt;
&lt;span class="rem"&gt;     --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;and&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;WDeployNoSMO&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PHP&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;MySQLConnector&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;UrlRewrite2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;productId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;and&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dependency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="rem"&gt;&amp;lt;!-- Installer for an application should be Web Deploy package --&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;&amp;lt;!-- List of languages this package is localized in: English, Russian, French, German and Italian --&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;en&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ru&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;fr&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;de&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;it&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;languageId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installerFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="rem"&gt;&amp;lt;!-- size of the package in KBs --&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1024&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;installerURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SamplePHPApplication.zip&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installerURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;displayURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SamplePHPApplication.aspx&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;displayURL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="rem"&gt;&amp;lt;!-- SHA of the package file for signature verification --&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sha1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1223334444555556666667777777888888889999&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;sha1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installerFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;helpLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;http://www.contoso.com/SamplePHPApplicationForum.aspx&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;helpLink&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;msDeploy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="rem"&gt;&amp;lt;!-- Default page is a start page --&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;startPage&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;msDeploy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;installers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;entry&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  
  &lt;span class="rem"&gt;&amp;lt;!-- Tab definition --&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tabs&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tab&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywordTab&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SampleApplications&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Sample Applications&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Select from sample applications:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        
        &lt;span class="rem"&gt;&amp;lt;!-- Subtabs definitions --&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ASPNETApps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PHPApps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywordId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywordTab&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tab&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tabs&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="rem"&gt;&amp;lt;!-- Keyword/titles of subtabs to group apps with those keywords under --&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keyword&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ASPNETApps&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ASP.NET Apps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keyword&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;keyword&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;PHPApps&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PHP Apps&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keyword&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;keywords&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;feed&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode {
	font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #fffacd
}
.csharpcode pre {
	font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #fffacd
}
.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 {
	margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;

&lt;p&gt;You can get a hash of your zip package, by using a free utility called &lt;a href="http://support.microsoft.com/kb/841290"&gt;File Checksum Integrity Verifier&lt;/a&gt; (FCIV) and running &lt;strong&gt;fciv.exe –sha &amp;lt;path to your zip package&amp;gt;&lt;/strong&gt; from the command prompt.&lt;/p&gt;

&lt;p&gt;Now, you can try the feed out by saving it locally or uploading it, opening the Options dialog and adding a feed through either a physical path or URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_22FD69CD.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_22FD69CD.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_4886E72E.png" width="731" height="541" mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_4886E72E.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Note how applications are grouped based on keywords rather than product families like products do. Also, applications are grouped into keyword subtabs rather than group boxes (pillars for products). To read about adding a custom product through a custom feed refer to this article - &lt;a title="WebPI Extensibility: Custom Scenarios - Installing Custom Products" href="http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx"&gt;Web PI Extensibility: Custom Feeds – Installing Custom Products&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3474735" width="1" height="1"&gt;</description></item><item><title>Web PI Extensibility: Custom Feeds – Installing Custom Products</title><link>http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx</link><pubDate>Sat, 24 Oct 2009 04:09:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3474732</guid><dc:creator>kateroh</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3474732</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/10/24/web-pi-extensibility-custom-feeds-installing-custom-products.aspx#comments</comments><description>&lt;P&gt;As it was already mentioned in several articles about Web Platform Installer (Web PI), version 2 RTW of the product now offers extensibility as a part of its new set of features. Now, users can not only add additional Media and Developer Tools scenarios with a set of products not offered in Web PI by default, but also define and install their own products through Web PI. To add a new product to Web PI UI interface, you need to create a custom feed with some information for Web PI to parse and be able to display and later install products offered by your feed.&lt;/P&gt;
&lt;P&gt;To make a product show up in the UI, you will need to define a new Web PI tab, pillar and product entities in the feed.&lt;/P&gt;
&lt;P&gt;Here is sample XML that defines a Sample Product with a unique SampleProduct productId, that is grouped by Sample Products product family and put into a newly defined Sample Tab. Please note that you have to define a new custom tab for your custom products, since they cannot to be added to Web PI core tabs.&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: #c3b091 1px solid; BORDER-LEFT: #c3b091 1px solid; BACKGROUND-COLOR: #fffacd; WIDTH: 700px; HEIGHT: 400px; OVERFLOW: auto; BORDER-TOP: #c3b091 1px solid; BORDER-RIGHT: #c3b091 1px solid"&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN class=html&gt;xml&lt;/SPAN&gt; &lt;SPAN class=attr&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="1.0"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;encoding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="utf-8"&lt;/SPAN&gt;?&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt; &lt;SPAN class=attr&gt;xmlns&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.w3.org/2005/Atom"&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product WebPI v2 RTW Feed&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;link&lt;/SPAN&gt; &lt;SPAN class=attr&gt;href&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="http://www.contoso.com/SampleProductFeed.xml"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-9-29T16:30:00Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;updated&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product Builder&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProductFeed.xml&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;title&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;summary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Just summary&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;summary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;longSummary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Long summary of SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;longSummary&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productFamily&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Products&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productFamily&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;version&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;images&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;icon&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;c:\SampleProductIcon.png&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;icon&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;images&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Product Builder&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;uri&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;author&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2009-9-29T12:30:00Z&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;published&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    
    &lt;SPAN class=rem&gt;&amp;lt;!-- How can WebPI know your product is installed? --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;or&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- 1. Through registry (version value should be 1.0.0, if dont care about the verion, should be just keypath) --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;registry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;keyPath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;HKEY_LOCAL_MACHINE\SOFTWARE\SampleProduct\Sample Product Version 1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;keyPath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Version&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueName&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueValue&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1.0.0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;valueValue&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;registry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;file&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- 2. Through filepath - if the exe is at this location, WebPI will know that SampleProduct is installed --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;filePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%ProgramFiles%\SampleProduct\SampleProduct.exe&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;filePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;file&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;or&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;discoveryHint&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         What products need to be installed first? &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         Define dependencies through ProductId property of products&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         declared in the main WebProductList file or other previously &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         added feeds &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;    --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;dependency&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;IISManagementConsole&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;dependency&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- SampleProduct cannot be installed if product IncompatibleSampleProduct is already installed --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibilities&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibleProduct&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;IncompatibleSampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibleProduct&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;incompatibilities&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         installers and installer commands. Here you can define separate installers for&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;         different architectures, OSes, SKUs and languages&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;    --&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installers&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=rem&gt;&amp;lt;!-- x86 architecture installer --&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- installer Id should be unique for every SampleProduct installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- language of installer is English --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;en&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x86&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;             list of OSes and SKUs this product can be installed on. On every OS/SKU that is not &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;             supported, the product will not display &lt;/SPAN&gt;
&lt;SPAN class=rem&gt;        --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- the product is supported on Vista/Windows Server SP1 + --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;6&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

            &lt;SPAN class=rem&gt;&amp;lt;!-- list of SKUs --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Server&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HomePremium&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Ultimate&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Enterprise&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Business&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- before the user will install the product, the link to the following EULA will be presented --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/eula.html&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- this info is important for WebPI to verify that the downloaded file was not tampered --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=rem&gt;&amp;lt;!-- size in KBs --&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1024&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProduct_x86.msi&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;111222FFF000BBB444555EEEAAA777888999DDDD&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- how should WebPI install your product? --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%InstallerFile%&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

      &lt;SPAN class=rem&gt;&amp;lt;!-- x64 architecture installer --&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=rem&gt;&amp;lt;!-- installer Id should be unique for every SampleProduct installer --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;2&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- language of installer is English --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;en&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;languageId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;x64&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;architectures&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=rem&gt;&amp;lt;!-- the product is supported on Vista/Windows Server SP1 + --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;6&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osMinorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;0&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;spMajorVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;minimumVersion&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

            &lt;SPAN class=rem&gt;&amp;lt;!-- list of SKUs --&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Server&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;HomePremium&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Ultimate&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Enterprise&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
              &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;Business&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osTypes&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;os&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;osList&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- before the user will install the product, the link to the following EULA will be presented --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/eula.html&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;eulaURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- this info is important for WebPI to verify that the downloaded file was not tampered --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=rem&gt;&amp;lt;!-- size in KBs --&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;1024&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;fileSize&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;http://www.contoso.com/SampleProduct_64.msi&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerURL&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;111222FFF000BBB444555EEEAAA777888999DDDD&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;sha1&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installerFile&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

        &lt;SPAN class=rem&gt;&amp;lt;!-- how should WebPI install your product? --&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;%InstallerFile%&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msi&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;msiInstall&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installCommands&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installer&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;installers&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;entry&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=rem&gt;&amp;lt;!-- define a tab that contains SampleProduct --&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;tabs&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;tab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillarTab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleTab&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Tab&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;My sample tab for my sample product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillar&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Pillar&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Install sample product&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;description&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupingId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProductFamilyGrouping&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupingId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;recommended&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProduct&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;productId&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
          &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;recommended&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillar&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;pillarTab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;tab&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;tabs&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;

  &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupings&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;grouping&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;SampleProductFamilyGrouping&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;id&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=rem&gt;&amp;lt;!-- combine products based on their productFamily attributes --&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;attribute&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;productFamily&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;attribute&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;include&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;item&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;Sample Products&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;item&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
      &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;include&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;grouping&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
  &lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;groupings&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;feed&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color:#fffacd;
	/*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;P&gt;&lt;BR&gt;You can get a hash of your product, by using a free utility called &lt;A href="http://support.microsoft.com/kb/841290"&gt;File Checksum Integrity Verifier&lt;/A&gt; (FCIV) and running &lt;STRONG&gt;fciv.exe –sha &amp;lt;path to your file&amp;gt;&lt;/STRONG&gt; from the command prompt. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;To add a product from this feed to Web PI, save this text to an xml file. Then, go to the Options dialog (click Options link on the main window) and type the location of the xml file into the text box, click “Add feed” and close the dialog. You will see a new tab called “Sample Tab” that contains the grouping with the product – all defined in the xml above.&lt;/P&gt;
&lt;P&gt;Below is a drill down of how your feed data is represented in the UI. The first screenshot shows how Web PI interprets tab and pillar feed elements.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_1CC59136.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_1CC59136.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_347CC89C.png" width=699 height=522 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_347CC89C.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;To see how tabs group products based on their productFamily element, click on “Customize” link. The “Sample Products” group box represents a grouping by productFamily, to which Sample Product belongs. All other products with the same productFamily element would be grouped in the same group box.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_61258275.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_61258275.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_242150E3.png" width=701 height=518 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_242150E3.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;To see product details, click on the small “i” icon next to the product title. Finally, the product details page shows all the details defined for the product itself. To install Sample Product, check “Install Sample Product” and click Install. Web PI will select an installer based on the current machine architecture and the language of the current UI culture (if such is available). &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/kateroh/image_3EED76EF.png" mce_href="http://blogs.iis.net/blogs/kateroh/image_3EED76EF.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.iis.net/blogs/kateroh/image_thumb_5D57B7D8.png" width=705 height=525 mce_src="http://blogs.iis.net/blogs/kateroh/image_thumb_5D57B7D8.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note that the feed refers to an icon located at my local path c:\SampleProductIcon.png, the feed is also added from a physical location c:\SampleProduct.xml. Most likely, you will want to host this content somewhere and refer to it through URLs. Your feed is ready to go – you can publish it and let other people install your product through Web PI. Enjoy!&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3474732" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/web+PI+Extensibility/default.aspx">web PI Extensibility</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI/default.aspx">Web PI</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+PI+Custom+Feeds/default.aspx">Web PI Custom Feeds</category></item><item><title>MSDeploy Custom Provider to execute batch files</title><link>http://blogs.iis.net/kateroh/archive/2009/06/19/msdeploy-custom-provider-to-execute-batch-files.aspx</link><pubDate>Fri, 19 Jun 2009 16:54:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3246060</guid><dc:creator>kateroh</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3246060</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/06/19/msdeploy-custom-provider-to-execute-batch-files.aspx#comments</comments><description>&lt;P&gt;&lt;B&gt;NOTE: &lt;/B&gt;All code and instructions in this blog post were updated to work with the latest version of &lt;A href="http://www.iis.net/expand/WebDeploy"&gt;Web Deploy v1.1&lt;/A&gt;. A blog post that outlines the changes that are required to custom providers in Web Deploy v.1.1 since Web Deploy v1 RC is &lt;A href="http://blogs.iis.net/msdeploy/archive/2010/02/04/writing-extensible-providers-for-webdeploy-v1-rtm.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Overview&lt;/H2&gt;
&lt;P&gt;The &lt;A href="http://www.iis.net/extensions/WebDeploymentTool" mce_href="http://www.iis.net/extensions/WebDeploymentTool"&gt;IIS Web Deployment Tool&lt;/A&gt; (also known as MSDeploy) simplifies the migration, management and deployment of IIS Web servers, Web applications and Web sites. MSDeploy also offers the ability to run custom providers. These providers unlock hidden power in MSDeploy.&lt;/P&gt;
&lt;P&gt;In this article you will find a sample code for a custom MSDeploy provider that executes batch file commands as a part of MSDeploy sync. The batch file provider can be used to execute custom scripts before or after deployment to make the deployment process a seamless one. You can set up performance counters for a particular MSDeploy sync, make a batch file copy content with xcopy rather than with MSDeploy (but remember that we’re faster than xcopy!) to name just a few possibilities. The code in this article is meant as a sample to get you started on writing your own custom MSDeploy provider. This provider is similar to MSDeploy runCommand provider with the exception that this custom provider does not have the full set of features the official MSDeploy runCommand provider does. In any case, the code is built thankfully to a &lt;A href="http://blogs.iis.net/msdeploy/archive/2009/03/30/msdeploy-sample-custom-provider-to-sync-mysql-databases-dbfullmysql.aspx" mce_href="http://blogs.iis.net/msdeploy/archive/2009/03/30/msdeploy-sample-custom-provider-to-sync-mysql-databases-dbfullmysql.aspx"&gt;great sample and blog&lt;/A&gt; that Yamini Jagadeesan wrote a couple of months ago on MSDeploy MySql custom provider that lets you sync from one MySql database to another. If you haven’t familiarized yourself with the article, it is a great read and another good start-up solution for MSDeploy custom provider.&lt;/P&gt;
&lt;H2&gt;Download and Install&lt;/H2&gt;
&lt;P&gt;First, &lt;A href="http://blogs.iis.net/blogs/msdeploy/CustomProviders.zip"&gt;download the zip file with the projects&lt;/A&gt; (also contains Yamini’s MySql custom provider). BatchProvider solution contains the following files:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;BatchProviderFactory.cs&lt;/B&gt; – an entry point to your provider that kindly returns an instance of the provider in overridden CreateProvider method. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;BatchProvider.cs &lt;/B&gt;– the provider itself that initiates execution of a batch file. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Strongname.pfx&lt;/B&gt; – the file with a key to sign the assembly for strong name verification. The password is “MSDeployRocks”, but you can delete the pfx file and specify your own key and password for singing the assembly by going to Project Properties--&amp;gt;Signing in Visual Studio. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To install the provider you need to &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Compile the project (or just &lt;A href="http://blogs.iis.net/blogs/kateroh/MSDeploy/BatchProvider.zip"&gt;use this dll&lt;/A&gt;) &lt;/LI&gt;
&lt;LI&gt;Create a folder called &lt;B&gt;Extensibility &lt;/B&gt;under “&lt;B&gt;%programfiles%\IIS\Microsoft Web Deploy”. &lt;/B&gt;This folder will contain all your MSDeploy custom providers&lt;/LI&gt;
&lt;LI&gt;Drop the dll into the newly created folder&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;MSDeploy is ready to work with the new provider. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;H2&gt;The Internals of BatchProvider&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;GetAttributes&lt;/B&gt; method is called on both source and destination to validate the object (think of performing a dump) without taking any action. If the object is invalid or if the object requires an action (in the example of the batch file provider, we need to run its commands in a shell program in a separate process), the method will throw a DeploymentException to make sure Add method is called. Finally, we want the code to take an action only when it is called on a destination object, which is insured by the following condition: &lt;BR&gt;&lt;BR&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.BaseContext.IsDestinationObject)&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;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Add&lt;/B&gt; method insures that the object is valid. Think of this method as a “Make valid” method that requires an action, since it is called only on a destination object. Destination objects will always be the objects that require an action, since dump can be performed only on source objects. Which makes sense, because in the command line, dump can be performed only with –source switch: &lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT size=2 face=Consolas&gt;msdeploy –verb:dump –source:&amp;lt;destination&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/B&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;GetStream&lt;/B&gt; method is called when the source is getting synced to an archive directory (archiveDir provider) or a package (package provider). For example, this method will get called whenever the following commands are executed: &lt;BR&gt;&lt;BR&gt;&lt;B&gt;&lt;FONT size=2 face=Consolas&gt;msdeploy –verb:sync –source:batch=”myBatchJob.bat” –dest:archiveDir=c:\backup &lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;B&gt;&lt;FONT size=2 face=Consolas&gt;msdeploy –verb:sync –source:batch=”myBatchJob.bat” –dest:package=c:\backup.zip &lt;BR&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;B&gt;&lt;FONT size=2 face=Consolas&gt;msdeploy –verb:sync –source:manifest=”manifestWithBatchInIt.xml” –dest:package=c:\backup.zip &lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/B&gt;In GetStream method, the FileStream is returned, so that MSDeploy can attach a batch file to an archive or package as a simple text file. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;You can tweak the provider to suit the task you have in mind. For example, you might want to tweak ProcessStartInfo of the process that will execute the batch file commands to control its behavior during sync. You might want to redirect output and error streams of the process to log the results of execution. &lt;/P&gt;
&lt;P&gt;Please feel free to post any comments and questions.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Thanks to &lt;A href="http://blogs.iis.net/yaminij/"&gt;Yamini&lt;/A&gt; for pointing out these differences between MSDeploy versions. &lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3246060" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+Deploy+Extensibility/default.aspx">Web Deploy Extensibility</category><category domain="http://blogs.iis.net/kateroh/archive/tags/Web+Deploy/default.aspx">Web Deploy</category></item><item><title>Troubleshooting Common MSDeploy Issues</title><link>http://blogs.iis.net/kateroh/archive/2009/06/05/troubleshooting-common-msdeploy-issues.aspx</link><pubDate>Fri, 05 Jun 2009 16:28:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3213583</guid><dc:creator>kateroh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3213583</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/06/05/troubleshooting-common-msdeploy-issues.aspx#comments</comments><description>&lt;p&gt;This article is meant to provide a quick reference troubleshooting guide to help with the most frequently encountered problems and questions. It does not contain a full list of issues and problems, but will be updated with the latest issues and workarounds as the need arises.&lt;/p&gt;  &lt;p&gt;Issues covered in this article:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Connection Issues and Remoting &lt;/li&gt;    &lt;li&gt;Logging &lt;/li&gt;    &lt;li&gt;Skip Replace Rules &lt;/li&gt;    &lt;li&gt;Enabling/Disabling Link Extensions &lt;/li&gt;    &lt;li&gt;Insufficient Privileges (401) &lt;/li&gt;    &lt;li&gt;Working with IIS6 &lt;/li&gt;    &lt;li&gt;If None of the Above Works &lt;/li&gt; &lt;/ul&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;h2&gt;Connection Issues and Remoting&lt;/h2&gt;  &lt;h3&gt;MSDeploy agent&lt;/h3&gt;  &lt;p&gt;If you are syncing over the MSDeploy agent, make sure the corresponding MSDeploy service is started on the remote machine:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;net start msdepsvc      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Handler&lt;/h3&gt; (Web Management Service)   &lt;p&gt;Similar to the agent case, if you are syncing over the handler, make sure the corresponding service is started:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;net start wmsvc      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Default TCP Port&lt;/h3&gt;  &lt;p&gt;MSDeploy operates through port 8172 by default. Enable port 8172 through the firewall by running&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;netsh firewall add portopening TCP 8172 WdeployAgent      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Logging&lt;/h2&gt;  &lt;p&gt;Fatal errors are logged in %TEMP%\Web_Deployment_Agent_Service.log. Where %TEMP% refers to the service identity's temp folder which by default is Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\MSDepSvc    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h2&gt;Skip Replace Rules&lt;/h2&gt;  &lt;p&gt;If some destination settings are different from source settings (e.g. different system drives in file paths), you can write a skip replace rule to change the setting. Thus, if you sync an IIS6 site with the content that resides on c:\wwwroot\inetpub to another site that is mapped to d:\wwwroot\inetpub, you’d write the following replace rule to make the 1-liner sync possible:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;msdeploy.exe -verb:sync -source:metaKey=/lm/w3svc/2 -dest:metaKey=/lm/w3svc/3 -replace:objectName=metaProperty,scopeAttributeName=name,scopeAttributeValue=path,targetAttributeName=value,match=&amp;quot;e:&amp;quot;,replace=&amp;quot;d:&amp;quot;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;An excellent resource for writing skip replace rules is the blog post: &lt;a href="http://blogs.iis.net/msdeploy/archive/2008/05/23/how-to-write-skip-and-replace-rules-for-msdeploy.aspx" target="_blank" mce_href="http://blogs.iis.net/msdeploy/archive/2008/05/23/how-to-write-skip-and-replace-rules-for-msdeploy.aspx"&gt;How to write skip and replace rules for MSDeploy&lt;/a&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;h2&gt;Enabling/Disabling Link Extensions&lt;/h2&gt;  &lt;p&gt;If you copy content of a webserver/site separately and don’t want it to be copied during your MSDeploy sync operation, you can do it by using -disableLink:ContentExtension command line option. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;&lt;u&gt;Example (sync one server to another w/o content): &lt;/u&gt;&lt;/i&gt;      &lt;br /&gt;&lt;b&gt;msdeploy -verb:sync -source:webserver -dest:webserver,computerName=URLtoRemoteAgent&lt;/b&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you sync a site and its app pool is not pulled in (default behavior), you can enable pulling in the app pool by using the &lt;b&gt;–enableLink:AppPoolExtension &lt;/b&gt;switch. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;&lt;u&gt;Example (create a backup of a site with app pool): &lt;/u&gt;&lt;/i&gt;      &lt;br /&gt;&lt;b&gt;msdeploy -verb:sync –source:appHostConfig=”MySite” –dest:package=”c:\BackupUpOfSiteWithAppPool.zip” –enableLink:AppPoolExtension&lt;/font&gt;&lt;/b&gt;       &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Insufficient Privileges (401)&lt;/h2&gt;  &lt;p&gt;Things to check:&lt;u&gt;      &lt;br /&gt;&lt;/u&gt;&lt;/p&gt;  &lt;h3&gt;ACLs&lt;/h3&gt;  &lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you are syncing as an IIS user, the content path that you are trying to access should be ACL’ed for read/write access for NT Service\WMSvc identity.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;AppPoolIndentity&lt;/h3&gt;  &lt;p&gt;If you think you might have problems with app pool identity, try to run the app pool with admin privileges, see if the problem persists, fix permissions problem if necessary and set the app pool back its original identity.    &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Delegation Rules &lt;/h3&gt;  &lt;p&gt;If you are running a sync operation as a non-admin account, make sure delegation rules are set up correctly on the remote server. For example, to allow all users to import iisApp packages and set ACLs within user connection scope, add the rule below to &amp;quot;system.webServer/management&amp;quot; section in administration.config file.    &lt;br /&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&amp;lt;!-- set allowAdministrators to &amp;quot;false&amp;quot; if you don't want administrators to bypass delegation rules --&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;delegation&lt;/span&gt; &lt;span class="attr"&gt;allowAdministrators&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="rem"&gt;&amp;lt;!--&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="rem"&gt;Will attempt to perform the operations as the current identity. &lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="rem"&gt;If you want to run these opearations as a specific user, uncomment &amp;quot;runAs&amp;quot; below&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rule&lt;/span&gt; &lt;span class="attr"&gt;providers&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;iisapp,createapp,contentpath,setAcl&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;actions&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;{userScope}&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;permissions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;user&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;isRole&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;accessType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Allow&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;permissions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;&lt;span class="rem"&gt;&amp;lt;runAs identityType=&amp;quot;SpecificUser&amp;quot; userName=&amp;quot;iisAppUser&amp;quot; password=&amp;quot;iisUserPassword&amp;quot; /&amp;gt; &lt;/span&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;
&lt;b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/b&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;rule&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;delegation&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&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;p&gt;Another useful reference on automating the creation of delegation rules in C# is the following IIS.NET article: &lt;a href="http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/" mce_href="http://learn.iis.net/page.aspx/516/configure-the-web-deployment-handler/"&gt;Configure the Web Deployment Handler&lt;/a&gt; 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Server Certificates&lt;/h3&gt;

&lt;p&gt;How does your client validate server certificates? 
  &lt;br /&gt;- If you are running a command line and trust the server, specify the –allowUntrusted switch to accept untrusted certificates. 

  &lt;br /&gt;- If you wrote your own client to interface with MSDeploy APIs and sync to a remote machine, make sure to provide a certificate validation delegate to validate the server certificate. 

  &lt;br /&gt;Another great reference on the subject of certificate validation delegate is the MSDN article: &lt;a href="http://blogs.msdn.com/webdevelopertips/archive/2009/01/04/tip-41-did-you-know-establishing-a-remote-connection-to-a-iis-server-with-self-issued-certificate-will-require-a-certificate-validation-delegate.aspx" mce_href="http://blogs.msdn.com/webdevelopertips/archive/2009/01/04/tip-41-did-you-know-establishing-a-remote-connection-to-a-iis-server-with-self-issued-certificate-will-require-a-certificate-validation-delegate.aspx"&gt;Did you know... establishing a remote connection to a IIS server with self-issued certificate will require a certificate validation delegate?&lt;/a&gt; 

  &lt;br /&gt;

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Working with IIS6&lt;/h2&gt;

&lt;p&gt;MSDeploy does work with IIS. Moreover, MSDeploy can migrate a site from IIS6 to IIS7. Another excellent article about how to migrate a site from IIS6 to IIS7: &lt;a href="http://learn.iis.net/page.aspx/427/migrate-from-iis-60-to-iis-70/" target="_blank" mce_href="http://learn.iis.net/page.aspx/427/migrate-from-iis-60-to-iis-70/"&gt;Migrate from IIS 6.0 to IIS 7.0&lt;/a&gt;. Below are some important tips and tricks that will help you get around common problems. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Webserver Provider&lt;/h3&gt;

&lt;p&gt;To sync the whole IIS6 server, you need to user &lt;b&gt;webserver60&lt;/b&gt; provider instead of &lt;b&gt;webserver, &lt;/b&gt;which is reserved for IIS7 servers 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Specific Metabase Path&lt;/h3&gt;

&lt;p&gt;To sync a specific metabase path (a site or application), you need to use &lt;b&gt;metakey &lt;/b&gt;provider 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Site Identifiers&lt;/h3&gt;

&lt;p&gt;To specify a siteId for your metabase path, you need to find out what identifier your site/application has. Run the following command to list metabase paths:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;adsutil enum /p w3svc&lt;/b&gt; 

    &lt;br /&gt;Microsoft (R) Windows Script Host Version 5.7 

    &lt;br /&gt;Copyright (C) Microsoft Corporation. All rights reserved. &lt;/p&gt;

  &lt;p&gt;[/w3svc/Info] 
    &lt;br /&gt;[/w3svc/Filters] &lt;/p&gt;
&lt;/blockquote&gt;

&lt;br /&gt;

&lt;br /&gt;

&lt;h2&gt;If None of the Above Works&lt;/h2&gt;

&lt;p&gt;Run your command with -debug switch and post your question on &lt;a href="http://forums.iis.net/1144.aspx" mce_href="http://forums.iis.net/1144.aspx"&gt;MSDeploy forum&lt;/a&gt; with the stack trace. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3213583" width="1" height="1"&gt;</description></item><item><title>IIS Remote Manager for Windows 7 is out</title><link>http://blogs.iis.net/kateroh/archive/2009/06/03/iis-remote-manager-for-windows-7-is-out.aspx</link><pubDate>Tue, 02 Jun 2009 23:47:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3206007</guid><dc:creator>kateroh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/kateroh/rsscomments.aspx?PostID=3206007</wfw:commentRss><comments>http://blogs.iis.net/kateroh/archive/2009/06/03/iis-remote-manager-for-windows-7-is-out.aspx#comments</comments><description>&lt;P&gt;&lt;BR&gt;Last week, IIS Remote Manager was re-released to support Windows 7. Prior to this release, remote management was supported only on XP, Vista, Windows Server 2003 and Server 2008 (excluding Home Basic editions). Now, the users can install Remote Manager on Windows 7 Client to manage Server 2008 and Server 2008 R2 remotely.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Remote Manager is available for download on iis.net download center: &lt;BR&gt;&lt;BR&gt;· &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1626" mce_href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1626"&gt;IIS Manager for Remote Administration (x86)&lt;/A&gt; &lt;BR&gt;· &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;i=1633&amp;amp;g=6" mce_href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;i=1633&amp;amp;g=6"&gt;IIS Manager for Remote Administration (x64)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt;And also on microsoft.com: &lt;BR&gt;&lt;BR&gt;· &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=32c54c37-7530-4fc0-bd20-177a3e5330b7" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=32c54c37-7530-4fc0-bd20-177a3e5330b7"&gt;Internet Information Services (IIS) Manager&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Finally, you can install IIS Remote Manager through &lt;A href="http://www.microsoft.com/web/downloads/" mce_href="http://www.microsoft.com/web/downloads/"&gt;Web Platform Installer&lt;/A&gt;: &lt;BR&gt;&lt;A href="http://go.microsoft.com/?linkid=9655670" mce_href="http://go.microsoft.com/?linkid=9655670"&gt;&lt;B&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip_image001 border=0 alt=clip_image001 src="http://blogs.iis.net/blogs/kateroh/clip_image001_5ACA0C9B.gif" width=176 height=51 mce_src="http://blogs.iis.net/blogs/kateroh/clip_image001_5ACA0C9B.gif"&gt;&lt;/B&gt;&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Learn about Remote Manager: &lt;BR&gt;· &lt;A href="http://learn.iis.net/page.aspx/390/remote-manager-for-windows-2003-xp-and-vista-sp1/" mce_href="http://learn.iis.net/page.aspx/390/remote-manager-for-windows-2003-xp-and-vista-sp1/"&gt;Remote Manager for Windows 2003, XP and Vista SP1&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://iis.net/" target=_blank mce_href="http://iis.net"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3206007" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/kateroh/archive/tags/IIS+Remote+Manager/default.aspx">IIS Remote Manager</category><category domain="http://blogs.iis.net/kateroh/archive/tags/IIS+7.5/default.aspx">IIS 7.5</category></item></channel></rss>