<?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>The Official Microsoft IIS Site</title><link>http://blogs.iis.net/</link><description>The platform that enables you to build rich, interactive communities</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Presenting at ASP.NET Connections in Las Vegas</title><link>http://blogs.iis.net/carlosag/archive/2009/11/07/presenting-at-asp-net-connections-in-las-vegas.aspx</link><pubDate>Sun, 08 Nov 2009 01:49:50 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3500162</guid><dc:creator>CarlosAg Blog</dc:creator><slash:comments>3</slash:comments><description>Next week I will be presenting at the ASP.NET Connections event in Las Vegas the following topics: AMS04: Boost Your Site’s Search Ranking with the IIS Search Engine Optimization Toolkit : Search engines are just robots, and you have to play by their rules if you want to see your site in the top search results. In this session, you will learn how to leverage the IIS Search Engine Optimizer and other tools to improve your Web site for search engine and user traffic. You will leave this session with...(&lt;a href="http://blogs.iis.net/carlosag/archive/2009/11/07/presenting-at-asp-net-connections-in-las-vegas.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3500162" width="1" height="1"&gt;</description><cs:applicationKey>carlosag</cs:applicationKey><category domain="http://blogs.iis.net/carlosag/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Configuring FTP 7.5 with Host Header and SSL</title><link>http://blogs.iis.net/webtopics/archive/2009/11/05/configuring-ftp-7-5-with-host-header-and-ssl.aspx</link><pubDate>Fri, 06 Nov 2009 00:04:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3499036</guid><dc:creator>WebTopics</dc:creator><slash:comments>3</slash:comments><description>FTP 7.5 comes with new features like supporting Host headers (Virtual host) and SSL. For compatibility purposes, FTP clients can check whether the FTP server supports host headers by sending a FEAT command to check for supported features. An FTP server would respond with HOST being one of the extended features supported by it and from here on client can use this feature. There are two ways of using this feature currently by the FTP clients: 1. They can send the virtual host name along with the Username...(&lt;a href="http://blogs.iis.net/webtopics/archive/2009/11/05/configuring-ftp-7-5-with-host-header-and-ssl.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3499036" width="1" height="1"&gt;</description><cs:applicationKey>webtopics</cs:applicationKey></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:34 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3494880</guid><dc:creator>kateroh</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As many of you already know, version 2 RTW of &lt;a 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"&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"&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"&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"&gt;Localization&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Installer caching &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&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;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_43852EC3.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="429" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_283CAFF5.png" width="560" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&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 face="Arial Black" size="2"&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;p&gt;&amp;#160;&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 face="Arial Black" size="2"&gt;%ProgramFiles%\Microsoft\Web Platform Installer\WebPlatformInstaller.exe /reset&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&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><cs:applicationKey>kateroh</cs:applicationKey></item><item><title>Using IIS Manager accounts for Web Deployment Tool (msdeploy) delegation</title><link>http://blogs.iis.net/krolson/archive/2009/11/04/using-iis-manager-accounts-for-web-deployment-tool-msdeploy-delegation.aspx</link><pubDate>Wed, 04 Nov 2009 20:04:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3494686</guid><dc:creator>krolson</dc:creator><slash:comments>2</slash:comments><description>&lt;P&gt;This blog outlines the basic steps for setting up IIS Manager accounts so that they may be used for Web Deployment Tool delegation.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Most of the steps particular to using IIS Manager users for delegation are required for connecting remotely using the Windows Management service, so if there are already accounts set up for remote management, that work has already been done.&lt;/P&gt;
&lt;P&gt;The following steps will allow IIS Manager accounts to be used for management service delegation. Step-by-step instructions with screen shots may be found for steps 1 through 4 on this page, &lt;EM&gt;with their section title added in parenthesis&lt;/EM&gt;: &lt;A href="http://learn.iis.net/page.aspx/159/configuring-remote-administration-and-feature-delegation-in-iis-70/" mce_href="http://learn.iis.net/page.aspx/159/configuring-remote-administration-and-feature-delegation-in-iis-70/"&gt;http://learn.iis.net/page.aspx/159/configuring-remote-administration-and-feature-delegation-in-iis-70/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;1. Make sure that Windows Management Service is installed&lt;/FONT&gt;&lt;/STRONG&gt; (&lt;I&gt;Configuring Remote Connections in IIS Manager&lt;/I&gt;)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;2. Enable remote connections for IIS users&lt;/FONT&gt;&lt;/STRONG&gt; (&lt;I&gt;Enable Remote Connections and Configure Identity Credentials&lt;/I&gt;)&lt;/P&gt;
&lt;P&gt;The previous steps only need to be performed once, however the following steps may be repeated for any number of new IIS Manager users.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;3. Create an IIS Manager account&lt;/FONT&gt;&lt;/STRONG&gt; (&lt;I&gt;Add an IIS Manager User&lt;/I&gt;)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;4. Give the user access to a site or application&lt;/FONT&gt;&lt;/STRONG&gt; (&lt;I&gt;Configure IIS Manager Permissions for a Site or an Application&lt;/I&gt;)&lt;/P&gt;
&lt;P&gt;This next step is vital for remote management, without which IIS users could not access or modify content for a site/application. A complete walkthrough for this step is the main focus of this page.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;5. Grant access to the physical site/application content&lt;/FONT&gt;&lt;/STRONG&gt; (&lt;I&gt;Configure Access Control Lists (ACLs) for Content Directories&lt;/I&gt;) &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Open IIS Manager (from start menu type “inetmgr” and press ENTER) &lt;/LI&gt;
&lt;LI&gt;Select the site (or application) you want to give an IIS user access to, right-click, and select the “Edit Permissions…” option. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_03_selectSiteEditPermissions_549E8F10.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_03_selectSiteEditPermissions_549E8F10.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=selectSiteEditPermissions border=0 alt=selectSiteEditPermissions src="http://blogs.iis.net/blogs/krolson/IU_03_selectSiteEditPermissions_thumb_014748EA.jpg" width=531 height=530 mce_src="http://blogs.iis.net/blogs/krolson/IU_03_selectSiteEditPermissions_thumb_014748EA.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Go to the Security tab and click “Edit…” under the “Group or user names:” section. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_04_editPermissions_31FA5095.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_04_editPermissions_31FA5095.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=editPermissions border=0 alt=editPermissions src="http://blogs.iis.net/blogs/krolson/IU_04_editPermissions_thumb_69CC94B8.jpg" width=379 height=483 mce_src="http://blogs.iis.net/blogs/krolson/IU_04_editPermissions_thumb_69CC94B8.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;This will open a very similar looking Permissions window. Click the “Add…” button. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_05_editPermissionsClickAdd_6887FBD9.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_05_editPermissionsClickAdd_6887FBD9.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=editPermissionsClickAdd border=0 alt=editPermissionsClickAdd src="http://blogs.iis.net/blogs/krolson/IU_05_editPermissionsClickAdd_thumb_1C4FF22B.jpg" width=409 height=512 mce_src="http://blogs.iis.net/blogs/krolson/IU_05_editPermissionsClickAdd_thumb_1C4FF22B.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Now type in the WMSvc identity in the Select Users, Computers, or Groups dialog (i.e. “Local Service” - without the quotation marks. To confirm that this is the account WMSvc uses, check out the section, below, “How to find out what account to add for IIS user ACLs”). Click OK. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_06_typeInLocalService_34072991.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_06_typeInLocalService_34072991.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=typeInLocalService border=0 alt=typeInLocalService src="http://blogs.iis.net/blogs/krolson/IU_06_typeInLocalService_thumb_20E5FCE5.jpg" width=472 height=255 mce_src="http://blogs.iis.net/blogs/krolson/IU_06_typeInLocalService_thumb_20E5FCE5.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Select the LOCAL SERVICE user and modify the Permissions for LOCAL SERVICE by checking/unchecking the permission boxes. For example, you may want to allow Write or Modify permissions. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_07_editPermissionsCheckAllowOrDeny_11CF1E0B.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_07_editPermissionsCheckAllowOrDeny_11CF1E0B.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=editPermissionsCheckAllowOrDeny border=0 alt=editPermissionsCheckAllowOrDeny src="http://blogs.iis.net/blogs/krolson/IU_07_editPermissionsCheckAllowOrDeny_thumb_5773A829.jpg" width=403 height=508 mce_src="http://blogs.iis.net/blogs/krolson/IU_07_editPermissionsCheckAllowOrDeny_thumb_5773A829.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;When finished editing the permissions, click OK. You may be warned that “You are about to change the permission settings on system folders…” depending on where the directory for your web site is located. &lt;/LI&gt;
&lt;LI&gt;Now you will see LOCAL SERVICE in the list of “Group or user names:” and can view the permissions by selecting that account. If at any point you want to change these permissions, you can follow similar steps by clicking Edit and then changing the check-box permission selections. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_08_editPermissionFinishedClickOK_5D4E4BC2.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_08_editPermissionFinishedClickOK_5D4E4BC2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=editPermissionFinishedClickOK border=0 alt=editPermissionFinishedClickOK src="http://blogs.iis.net/blogs/krolson/IU_08_editPermissionFinishedClickOK_thumb_002F0D73.jpg" width=374 height=481 mce_src="http://blogs.iis.net/blogs/krolson/IU_08_editPermissionFinishedClickOK_thumb_002F0D73.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Click OK when you are finished. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#800000&gt;6. Add the IIS user to existing/new Management Service Delegation rules to allow those users to import content, create applications, and/or modify databases&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;H2&gt;How to find out what account to add for IIS user ACLs&lt;/H2&gt;
&lt;P&gt;This will typically be “Local Service”, and it is easy to check this.&lt;/P&gt;
&lt;P&gt;Click Start and type “Services” – open the Services feature.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_01_selectServicesFromStartMenu_7EEA7493.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_01_selectServicesFromStartMenu_7EEA7493.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=selectServicesFromStartMenu border=0 alt=selectServicesFromStartMenu src="http://blogs.iis.net/blogs/krolson/IU_01_selectServicesFromStartMenu_thumb_00BACA5B.jpg" width=399 height=543 mce_src="http://blogs.iis.net/blogs/krolson/IU_01_selectServicesFromStartMenu_thumb_00BACA5B.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In Services, locate the service named “Web Management Service” and see what is listed under the Log On As column.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.iis.net/blogs/krolson/IU_02_servicesLogOnIdentity_583BE846.jpg" mce_href="http://blogs.iis.net/blogs/krolson/IU_02_servicesLogOnIdentity_583BE846.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: block; FLOAT: none; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: auto; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: auto" title=servicesLogOnIdentity border=0 alt=servicesLogOnIdentity src="http://blogs.iis.net/blogs/krolson/IU_02_servicesLogOnIdentity_thumb_6FF31FAC.jpg" width=953 height=409 mce_src="http://blogs.iis.net/blogs/krolson/IU_02_servicesLogOnIdentity_thumb_6FF31FAC.jpg"&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3494686" width="1" height="1"&gt;</description><cs:applicationKey>krolson</cs:applicationKey><category domain="http://blogs.iis.net/krolson/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.iis.net/krolson/archive/tags/IIS+Manager/default.aspx">IIS Manager</category><category domain="http://blogs.iis.net/krolson/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/krolson/archive/tags/MSDeploy/default.aspx">MSDeploy</category><category domain="http://blogs.iis.net/krolson/archive/tags/Delegation/default.aspx">Delegation</category><category domain="http://blogs.iis.net/krolson/archive/tags/UI/default.aspx">UI</category><category domain="http://blogs.iis.net/krolson/archive/tags/Web+Deploy/default.aspx">Web Deploy</category><category domain="http://blogs.iis.net/krolson/archive/tags/Web+Deployment+Tool/default.aspx">Web Deployment Tool</category><category domain="http://blogs.iis.net/krolson/archive/tags/Management+Service+Delegation/default.aspx">Management Service Delegation</category><category domain="http://blogs.iis.net/krolson/archive/tags/IIS+User/default.aspx">IIS User</category><category domain="http://blogs.iis.net/krolson/archive/tags/ACL/default.aspx">ACL</category></item><item><title>Tip#99: Did you know… You can now install new Media and Developer Tools products with Web PI v2 RTW?</title><link>http://blogs.iis.net/webdevelopertips/archive/2009/11/03/tip-99-did-you-know-you-can-now-install-new-media-and-developer-tools-products-with-web-pi-v2-rtw.aspx</link><pubDate>Tue, 03 Nov 2009 18:03:58 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3492327</guid><dc:creator>Tips &amp; Tricks for ASP.NET, IIS, and Visual Web Developer</dc:creator><slash:comments>3</slash:comments><description>RTW version 2 of Web PI, which shipped in September, now offers additional products through Media and Developer Tools scenarios through the new Options Dialog. You can include products from these scenarios from the Options dialog: and check the corresponding checkboxes: Katerina Rohonyan SDET | IIS Team...(&lt;a href="http://blogs.iis.net/webdevelopertips/archive/2009/11/03/tip-99-did-you-know-you-can-now-install-new-media-and-developer-tools-products-with-web-pi-v2-rtw.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3492327" width="1" height="1"&gt;</description><cs:applicationKey>webdevelopertips</cs:applicationKey></item><item><title>MSDeploy API Scenarios</title><link>http://blogs.iis.net/jamescoo/archive/2009/11/03/msdeploy-api-scenarios.aspx</link><pubDate>Tue, 03 Nov 2009 00:57:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3490355</guid><dc:creator>Jamescoo</dc:creator><slash:comments>6</slash:comments><description>&lt;p&gt;This C# code given below will demonstrate how the MSDeploy API can accomplish some common scenarios that users may want to perform.&lt;/p&gt;  &lt;p&gt;The following examples are documented below in no particular order:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;I. Server Sync IIS6.0 to IIS6.0 with ‘whatif’,deleting allowed and no content&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;II. Sync with tracing ( verbose is demonstrated )&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;III. Skip directive usage&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;IV. Replace Rule + Skip Rule ( using skipAction ) usage&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;V. Sync a site from iis7 to Hostable web core ( iis7 )&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;VI. SetAcl on a directory ( setting provider settings )&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you would like other examples posted or have a request please post below and it could be submitted in the future.&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;I. Server Sync IIS6.0 to IIS6.0 with ‘whatif’,deleting allowed and no content –&amp;#160; Setup a server with no content, just the settings and configuration moving from one IIS6.0 box to another IIS6.0 box allowing deletion&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="4"&gt;&lt;/font&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;msdeploy –verb:sync –source:metakey,computername=computer,username=user,password=password –whatif –disableLink:ContentExtension –disableRule:DoNotDeleteRule&lt;/font&gt;&lt;/strong&gt;&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; Microsoft.Web.Deployment;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; MSDeploy.Web.Deployment
{
    &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)
        {
            DeploymentBaseOptions sourceBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentBaseOptions destBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();

            &lt;span class="rem"&gt;// setup remote credential information to source machine&lt;/span&gt;
            sourceBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.UserName = &lt;span class="str"&gt;@&amp;quot;user&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="rem"&gt;// setup remote credential information to destination machine&lt;/span&gt;
            destBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            destBaseOptions.UserName  = &lt;span class="str"&gt;@&amp;quot;user&amp;quot;&lt;/span&gt;;
            destBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="rem"&gt;// use whatif to avoid any operations from happening, but set delete destination to true to see how much&lt;/span&gt;
            &lt;span class="rem"&gt;// will be deleted if this sync operation occurred&lt;/span&gt;
            syncOptions.WhatIf = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            syncOptions.DeleteDestination = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

            &lt;span class="rem"&gt;// remove these rules to allow deletions of destination&lt;/span&gt;
            syncOptions.Rules.Remove(&lt;span class="str"&gt;&amp;quot;BlockHarmfulDeleteOperations&amp;quot;&lt;/span&gt;);
            syncOptions.Rules.Remove(&lt;span class="str"&gt;&amp;quot;BlockUnsupportedDeleteOperations&amp;quot;&lt;/span&gt;);

            &lt;span class="rem"&gt;// disableLink:contentExtension, must be done for both source and destination base options&lt;/span&gt;
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DeploymentLinkExtension extension &lt;span class="kwrd"&gt;in&lt;/span&gt; sourceBaseOptions.LinkExtensions)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (extension.Name == &lt;span class="str"&gt;&amp;quot;ContentExtension&amp;quot;&lt;/span&gt;)
                {
                    extension.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            } 

            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DeploymentLinkExtension extension &lt;span class="kwrd"&gt;in&lt;/span&gt; destBaseOptions.LinkExtensions)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (extension.Name == &lt;span class="str"&gt;&amp;quot;ContentExtension&amp;quot;&lt;/span&gt;)
                {
                    extension.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }

            &lt;span class="rem"&gt;// perform a sync using webserver60 provider, if doing iis7 to iis7 this should be apphostconfig provider&lt;/span&gt;
            DeploymentObject deploymentObject = DeploymentManager.CreateObject(&lt;span class="str"&gt;&amp;quot;webserver60&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, sourceBaseOptions);

            &lt;span class="rem"&gt;// collect and report all the changes that would happen&lt;/span&gt;
            DeploymentChangeSummary changes = deploymentObject.SyncTo(destBaseOptions, syncOptions);

            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;BytesCopied:       &amp;quot;&lt;/span&gt; + changes.BytesCopied.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Added:             &amp;quot;&lt;/span&gt; + changes.ObjectsAdded.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Updated:           &amp;quot;&lt;/span&gt; + changes.ObjectsUpdated.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Deleted:           &amp;quot;&lt;/span&gt; + changes.ObjectsDeleted.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Errors:            &amp;quot;&lt;/span&gt; + changes.Errors.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Warnings:          &amp;quot;&lt;/span&gt; + changes.Warnings.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;ParametersChanged: &amp;quot;&lt;/span&gt; + changes.ParameterChanges.ToString());
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;TotalChanges:      &amp;quot;&lt;/span&gt; + changes.TotalChanges.ToString());
        }
    }
}&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&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;font size="4"&gt;&lt;strong&gt;II. Sync with verbose tracing -&amp;#160; Enable tracing of verbose events during a sync operation by adding into their event handlers.&amp;#160; This may allow you to troubleshoot or simply confirm certain operations take place after a sync&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;msdeploy –verb:sync –source:metaKey=“Default Web Site”,computername=sourcemachine –dest:metaKey=”Default Web Site”,computername=destMachine –verbose –whatif&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&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)
        {
            DeploymentBaseOptions sourceBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentBaseOptions destBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();
    
            sourceBaseOptions.Trace += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;DeploymentTraceEventArgs&amp;gt;(Source_Trace);
            sourceBaseOptions.TraceLevel = System.Diagnostics.TraceLevel.Verbose;
            sourceBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;sourcemachine&amp;quot;&lt;/span&gt;;

            destBaseOptions.Trace += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;DeploymentTraceEventArgs&amp;gt;(Dest_Trace);
            destBaseOptions.TraceLevel = System.Diagnostics.TraceLevel.Verbose;
            destBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;destmachine&amp;quot;&lt;/span&gt;;

            syncOptions.WhatIf = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (DeploymentObject deploymentObject =&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   DeploymentManager.CreateObject(DeploymentWellKnownProvider.MetaKey, &lt;span class="str"&gt;&amp;quot;Default Web Site&amp;quot;&lt;/span&gt;, sourceBaseOptions))
            {
                deploymentObject.SyncTo(DeploymentWellKnownProvider.MetaKey, &lt;span class="str"&gt;&amp;quot;AnotherDefaultSite3&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                              destBaseOptions, syncOptions);
            }
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Dest_Trace(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DeploymentTraceEventArgs e)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; name = System.Reflection.MethodInfo.GetCurrentMethod().Name;
            Console.WriteLine(name + &lt;span class="str"&gt;&amp;quot;: &amp;quot;&lt;/span&gt; + e.Message);
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Source_Trace(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DeploymentTraceEventArgs e)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; name = System.Reflection.MethodInfo.GetCurrentMethod().Name;
            Console.WriteLine(name + &lt;span class="str"&gt;&amp;quot;: &amp;quot;&lt;/span&gt; + e.Message);
        }&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&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;strong&gt;&lt;font size="4"&gt;III. Skip machine and root configuration settings during a sync from IIS6 to IIS6&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;font color="#400080"&gt;&lt;strong&gt;msdeploy –verb:sync –source:webserver60,computername=source,username=user,password=password –dest:webserver60,computername=dest,username=user,password=password –skip:objectName=machineConfig,attributes.path=”/” –skip:objectName=rootWebConfig,attributes.path=”/” –verbose&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&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)
        {
            DeploymentBaseOptions sourceBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentBaseOptions destinationBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();

            sourceBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;source&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.UserName = &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            destinationBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;dest&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.UserName = &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (DeploymentObject deploymentObject = &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   DeploymentManager.CreateObject(DeploymentWellKnownProvider.WebServer60, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, sourceBaseOptions))
            {
                DeploymentSkipDirective skipMachineConfig = &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSkipDirective(&lt;span class="str"&gt;&amp;quot;skipMachineConfig&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;@&amp;quot;objectName=machineConfig,attributes.path=&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                DeploymentSkipDirective skipRootWebConfig = &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSkipDirective(&lt;span class="str"&gt;&amp;quot;skipRootWebConfig&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;@&amp;quot;objectName=rootWebConfig,attributes.path=&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span class="kwrd"&gt;true&lt;/span&gt;);

                sourceBaseOptions.SkipDirectives.Add(skipMachineConfig);
                sourceBaseOptions.SkipDirectives.Add(skipRootWebConfig);

                destinationBaseOptions.SkipDirectives.Add(skipMachineConfig);
                destinationBaseOptions.SkipDirectives.Add(skipRootWebConfig);

                sourceBaseOptions.TraceLevel = System.Diagnostics.TraceLevel.Verbose;
                destinationBaseOptions.TraceLevel = System.Diagnostics.TraceLevel.Verbose;

                sourceBaseOptions.Trace += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;DeploymentTraceEventArgs&amp;gt;(sourceBaseOptions_Trace);
                destinationBaseOptions.Trace += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;DeploymentTraceEventArgs&amp;gt;(destinationBaseOptions_Trace);

                deploymentObject.SyncTo
                    (
                        DeploymentWellKnownProvider.WebServer60,
                        &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,
                        destinationBaseOptions,
                        syncOptions
                    );
            }
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; destinationBaseOptions_Trace(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DeploymentTraceEventArgs e)
        {
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;dest: &amp;quot;&lt;/span&gt; + e.Message);
        }

        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; sourceBaseOptions_Trace(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DeploymentTraceEventArgs e)
        {
            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;source: &amp;quot;&lt;/span&gt; + e.Message);
        }&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;font size="4"&gt;&lt;strong&gt;IV. Replace the name of DefaultAppPool with NewDefaultAppPool when performing a sync with AppPoolConfig provider from IIS7 to IIS7 and skip deleting the destination’s DefaultAppPool by applying a skip rule to ignore Delete operations&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;font color="#400080"&gt;&lt;strong&gt;msdeploy –verb:sync –source:appPoolConfig,computername=computer,username=user,password=password –dest:appPoolConfig,computername=computer,username=user,password=password –replace:objectName=add,targetAttributeName=name,match=DefaultAppPool,replace=NewDefaultAppPool –skip:skipAction=Delete,objectname=add&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&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)
        {
            DeploymentBaseOptions sourceBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentBaseOptions destinationBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();

            sourceBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.UserName = &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            destinationBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.UserName = &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (DeploymentObject deploymentObject = &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   DeploymentManager.CreateObject(DeploymentWellKnownProvider.AppPoolConfig, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, sourceBaseOptions))
            {
                DeploymentReplaceRule replaceAppPoolName = &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentReplaceRule(&lt;span class="str"&gt;&amp;quot;replaceDefaultAppPool&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="str"&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="str"&gt;&amp;quot;DefaultAppPool&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                                             &lt;span class="str"&gt;&amp;quot;NewDefaultAppPool&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;
                DeploymentSkipRule skipDelete = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSkipRule(&lt;span class="str"&gt;&amp;quot;skipDeleteOnDestination&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Delete&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;span class="kwrd"&gt;null&lt;/span&gt;);
                syncOptions.Rules.Add(replaceAppPoolName);
                syncOptions.Rules.Add(skipDelete);
                deploymentObject.SyncTo(destinationBaseOptions,syncOptions);
            }
        }&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&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;font size="4"&gt;&lt;strong&gt;V. Sync from a live server to Hostable Web Core &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&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)
        {
            DeploymentBaseOptions sourceBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentBaseOptions destinationBaseOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();
            sourceBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.UserName = &lt;span class="str"&gt;@&amp;quot;user&amp;quot;&lt;/span&gt;;
            sourceBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="rem"&gt;// core modules      &lt;/span&gt;
            destinationBaseOptions.WebServerConfiguration.WebServerDirectory = &lt;span class="str"&gt;@&amp;quot;C:\windows\system32\inetsrv&amp;quot;&lt;/span&gt;;      
            
            &lt;span class="rem"&gt;// new configuration for webcore&lt;/span&gt;
            destinationBaseOptions.WebServerConfiguration.ConfigurationDirectory = &lt;span class="str"&gt;@&amp;quot;F:\myconfigpath&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;            destinationBaseOptions.ComputerName = &lt;span class="str"&gt;&amp;quot;computer&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.UserName = &lt;span class="str"&gt;@&amp;quot;user&amp;quot;&lt;/span&gt;;
            destinationBaseOptions.Password = &lt;span class="str"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;;

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (DeploymentObject deploymentObject =&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                   DeploymentManager.CreateObject(&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                       DeploymentWellKnownProvider.AppHostConfig,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                       &lt;span class="str"&gt;&amp;quot;Default Web Site&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;                       sourceBaseOptions))
            {
                deploymentObject.SyncTo(destinationBaseOptions,syncOptions);
            }
        } &lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;font size="4"&gt;VI. Set ACLs on a directory for an application&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;font color="#400080"&gt;&lt;strong&gt;msdeploy –verb:sync –source:setacl –dest:setacl=”C:\inetpub\wwwroot2”,setAclUser=”user”,setAclAccess=”Read”,setAclResourceType=”Directory”&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#400080"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&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)
        {

            DeploymentBaseOptions destination = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentBaseOptions();
            DeploymentSyncOptions syncOptions = &lt;span class="kwrd"&gt;new&lt;/span&gt; DeploymentSyncOptions();

            destination.AddDefaultProviderSetting(&lt;span class="str"&gt;&amp;quot;setAcl&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;setAclUser&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;);
            destination.AddDefaultProviderSetting(&lt;span class="str"&gt;&amp;quot;setAcl&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;setAclAccess&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Read&amp;quot;&lt;/span&gt;);
            destination.AddDefaultProviderSetting(&lt;span class="str"&gt;&amp;quot;setAcl&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;setAclresourceType&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Directory&amp;quot;&lt;/span&gt;);

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (DeploymentObject deploymentObject = DeploymentManager.CreateObject(&lt;span class="str"&gt;&amp;quot;setAcl&amp;quot;&lt;/span&gt;,&lt;span class="str"&gt;@&amp;quot;c:\inetpub\wwwroot2&amp;quot;&lt;/span&gt;))
            {
                deploymentObject.SyncTo(destination, syncOptions);
            }
        }&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;More to come in the future.. &lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3490355" width="1" height="1"&gt;</description><cs:applicationKey>jamescoo</cs:applicationKey></item><item><title>Running PHP displays the code itself</title><link>http://blogs.iis.net/donraman/archive/2009/11/01/running-php-displays-the-code-itself.aspx</link><pubDate>Sun, 01 Nov 2009 20:31:31 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3488160</guid><dc:creator>don.raman</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;At times we get posting on the forum where user complain that when they are running a PHP file, the output is the file itself. This means that the script was not recognized as a PHP script and rather it was treated as plain text by the browser. There are two reasons why you can run into this situation to my knowledge.&lt;/p&gt;  &lt;p&gt;If you are using short tags for writing PHP script like &amp;lt;? echo 'Hello World' ?&amp;gt;, you should ensure that you have &lt;a href="http://php.net/manual/en/ini.core.php" target="_blank"&gt;short_open_tag&lt;/a&gt; INI directive set to '1' in your PHP INI file. If this is not the case the script will not be treated as PHP script. I would prefer PHP script like &amp;lt;?php echo 'Hello World' ?&amp;gt;. This is more clear and avoids confusion.&lt;/p&gt;  &lt;p&gt;Another reason for running into this situation can be if the PHP file is not saved as ASCII/ANSI. Saving the PHP script in UNICODE/Multi-byte format will again fail the script to be recognized as PHP script. Always save the PHP script as plain text file to avoid running into this situation.&lt;/p&gt;  &lt;p&gt;Hopefully this will help some of you in getting around this problem. Thanks for patient reading and good bye.&lt;/p&gt;  &lt;p&gt;Don&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3488160" width="1" height="1"&gt;</description><cs:applicationKey>donraman</cs:applicationKey><category domain="http://blogs.iis.net/donraman/archive/tags/PHP/default.aspx">PHP</category></item><item><title>Urlscan to RequestFiltering migration using MSDeploy</title><link>http://blogs.iis.net/ksingla/archive/2009/10/30/urlscan-to-requestfiltering-migration-using-msdeploy.aspx</link><pubDate>Fri, 30 Oct 2009 21:57:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3486460</guid><dc:creator>ksingla</dc:creator><slash:comments>2</slash:comments><description>&lt;FONT size=3 face=Calibri&gt;In addition to &lt;/FONT&gt;&lt;A href="http://blogs.iis.net/ksingla/archive/2009/09/24/migraing-fastcgi-configuration-from-iis-5-1-6-0-to-iis-7-0-7-5.aspx" mce_href="http://blogs.iis.net/ksingla/archive/2009/09/24/migraing-fastcgi-configuration-from-iis-5-1-6-0-to-iis-7-0-7-5.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;FastCGI migration provider&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, MSDeploy 1.0 RTW shipped with a URLScan to request filtering migration provider to ease migration of UrlScan.ini settings to &lt;I&gt;system.webServer/security/requestFiltering&lt;/I&gt; section. Even though URLScan 3.1 is supported on Win2K8 and you are not required to move to request filtering module, there are few advantages in using request filtering module. One advantage is that all your configuration can stay together in applicationHost.config and web.config and you are not required to maintain a separate configuration file. Another advantage is that you can take advantages of new configuration system features like distributed configuration, shared configuration, locking, ability to use appcmd, UI, configuration editor etc which cannot be used if you use UrlScan and your configuration is in UrlScan.ini. In Win2K8 R2, you get additional advantages like configuration system auditing. Moreover, request filtering is one of the core IIS modules and will continue to get much attention compared to URLScan. If you are running Win2K8 SP2 or Win2K8 R2 in which request filtering module has all the features available in URLScan 3.1, you should definitely evaluate migrating from URLScan to request filtering. If you decide to migrate, migration is as simple as running a MSDeploy sync command.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;URLScan migration is handled by a new provider in msdeploy named UrlScanConfig which accepts “INI” or “APPHOST” as path. When path is “INI”, URLScan configuration from “%windir%\system32\inetsrv\urlscan\urlscan.ini” is read. When path is “APPHOST”, configuration is picked from &lt;I&gt;system.webServer/security/requestFiltering&lt;/I&gt; section. This migration provider works similar to &lt;/FONT&gt;&lt;A href="http://blogs.iis.net/ksingla/archive/2009/09/24/migraing-fastcgi-configuration-from-iis-5-1-6-0-to-iis-7-0-7-5.aspx" mce_href="http://blogs.iis.net/ksingla/archive/2009/09/24/migraing-fastcgi-configuration-from-iis-5-1-6-0-to-iis-7-0-7-5.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;FastCGI migration provider&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. UrlScanConfig migration provider reads UrlScan.ini configuration and produces xml which looks like requestFiltering section configuration. MSDeploy engine then takes care of comparing xml and doing add/update/delete operations on destination to make destination configuration same as source. Because msdeploy sync is a single master sync engine, we take care of not removing configuration from requestFiltering section which doesn’t have a counterpart in UrlScan. For example, hiddenSegments configuration in apphost is not deleted (skipped using urlScanSkipIncompatRuleHandler) and also applyToWebDav properties are not touched. Below are few examples showing the usage of UrlScanConfig migration provider.&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;Command to dump urlscan.ini settings.&lt;BR&gt;&lt;/FONT&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msdeploy –verb:dump –source:urlScanConfig=ini –xml&lt;BR&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msdeploy –verb:dump –source:UrlScanConfig=apphost -xml&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;BR&gt;Command to migrate urlscan.ini to requestFiltering section.&lt;BR&gt;&lt;/FONT&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msdeploy –verb:sync –source:urlScanConfig=ini –dest:urlScanConfig=apphost -whatif&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;FONT size=3 face=Calibri&gt;UrlScanConfig provider can be used to migrate global urlscan.ini configuration to server level requestFiltering section. Migrating site level UrlScan.ini is not supported. Here is how various URLScan properties map to requestFiltering section.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;TABLE style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class=MsoNormalTable border=0 cellSpacing=0 cellPadding=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;UseAllowVerbs&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If set to 1 AllowVerbs section is used. Else DenyVerbs section in urlscan.ini is used&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;UseAllowExtensions&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If set to 1 AllowExtensions section is used. Else DenyExtensions section in urlscan.ini is used&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;VerifyNormalization&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;allowDoubleEscaping&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AllowHighBitCharacters&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;allowHighBitCharacters&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;UnescapeQueryString&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;unescapeQueryString&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;B&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/B&gt; 
&lt;TABLE style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class=MsoNormalTable border=0 cellSpacing=0 cellPadding=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;RequestLimits&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;MaxAllowedContentLength, MaxUrl and MaxQueryString settings are moved to requestLimits.&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AllowVerbs, DenyVerbs&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;If UseAllowVerbs is 1, verbs@allowUnlisted is set to false and entries are added with enabled=”true”. If UseAllowVerbs is 0, entries has enabled=”false” and verbs@allowUnlisted is set to true.&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AllowExtensions, DenyExtensions&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;When UseAllowExtensions is set 1, extensions are added with enabled=”true” and fileExtensions@allowUnlisted is set to false. When UseAllowExtensions is 0, fileExtensions@allowUnlisted is set to true and entries are added with enabled=”false”.&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;DenyHeaders&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Moved to requestLimits/headerLimits after removing colon.&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AlwaysAllowedUrls&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;alwaysAllowedUrls collection&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;DenyUrlSequences&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;denyUrlSequences collection&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 6"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AlwaysAllowedQueryStrings&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;alwaysAllowedQueryStrings collection&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 7; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;DenyQueryStringSequences&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;denyQueryStringSequences collection&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt; &lt;FONT size=3 face=Calibri&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;For each rule in RulesList, a filteringRule is created and Rule properties are mapped as following.&lt;/FONT&gt;&lt;/P&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt; 
&lt;TABLE style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class=MsoNormalTable border=0 cellSpacing=0 cellPadding=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;AppliesTo&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule/appliesTo&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;DenyDataSection&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule/denyStrings.&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 2"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;ScanURL&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule@scanUrl&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 3"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;ScanAllRaw&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule@scanAllRaw&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 4"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;ScanQueryString&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule@scanQueryString&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 5; mso-yfti-lastrow: yes"&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: black 1pt solid; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 239.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=319&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;ScanHeaders&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: black 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0in; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 273.2pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: black 1pt solid; PADDING-TOP: 0in" vAlign=top width=364&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;filteringRule/scanHeaders&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;B&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;BR&gt;All other properties (NormalizeUrlBeforeScan, AllowDotInPat, RemoveServerHeader, AlternateServerName, AllowLateScanning, UseFastPathReject, RejectResponseUrl, EnableLogging, PerProcessLogging, PerDayLogging, LogLongUrls, LoggingDirectory) are ignored because either they don’t make sense or the feature is always enforced by IIS core. We do block migration when incompatible versions of source and destination are present. Some request filtering features like applyToWebDav and hiddenSegments were not present in webDav. urlscanConfig migration provider doesn’t touch these properties if they are present on target. Not that if version of UrlScan is not compatible with IIS version present, migration will not be performed.&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;&lt;BR&gt;Thanks,&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Kanwal&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3486460" width="1" height="1"&gt;</description><cs:applicationKey>ksingla</cs:applicationKey><category domain="http://blogs.iis.net/ksingla/archive/tags/MSDeploy/default.aspx">MSDeploy</category><category domain="http://blogs.iis.net/ksingla/archive/tags/Request+Filtering/default.aspx">Request Filtering</category><category domain="http://blogs.iis.net/ksingla/archive/tags/UrlScan/default.aspx">UrlScan</category></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:45 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3484584</guid><dc:creator>kateroh</dc:creator><slash:comments>4</slash: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 title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="454" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_0D940A2F.png" width="615" border="0" 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 title="clip_image004[4]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="427" alt="clip_image004[4]" src="http://blogs.iis.net/blogs/kateroh/clip_image0044_thumb_643CC230.jpg" width="619" border="0" 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 title="clip_image006[4]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="460" alt="clip_image006[4]" src="http://blogs.iis.net/blogs/kateroh/clip_image0064_thumb_302822DD.jpg" width="622" border="0" 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 title="clip_image008[4]" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="459" alt="clip_image008[4]" src="http://blogs.iis.net/blogs/kateroh/clip_image0084_thumb_7C138389.jpg" width="620" border="0" 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><cs:applicationKey>kateroh</cs:applicationKey></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:51 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3484264</guid><dc:creator>kateroh</dc:creator><slash:comments>2</slash: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="#DisplayLanguage"&gt;The display language of Web PI UI&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="#LanguageOfInstallers"&gt;The language of products available in more than one language&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="#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"&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"&gt;Web PI Extensibility: Custom Feeds – Installing Custom Applications&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;a style="color: black; text: decoration:none" name="DisplayLanguage"&gt;The display language of Web PI UI&lt;/a&gt;&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;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;a style="color: black; text: decoration:none" name="LanguageOfInstallers"&gt;The language of products&lt;/a&gt;&lt;/h2&gt;  &lt;p&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 cellspacing="3" cellpadding="3" border="1"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom" width="52"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom" width="48"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&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"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td class="xloc" valign="bottom"&gt;x&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;          &lt;td valign="bottom"&gt;&amp;#160;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&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"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="432" alt="clip_image002" src="http://blogs.iis.net/blogs/kateroh/clip_image002_thumb_2FD7A605.jpg" width="627" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&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;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/kateroh/image_21D03192.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="475" alt="image" src="http://blogs.iis.net/blogs/kateroh/image_thumb_5C1B81A6.png" width="631" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;h2&gt;&lt;a style="color: black; text: decoration:none" name="CustomLoc"&gt;Custom products and localization&lt;/a&gt;&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"&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=&amp;quot;&amp;quot; and then reference it in your translation xml.&lt;/p&gt;  &lt;div style="border-right: #c3b091 1px solid; border-top: #c3b091 1px solid; overflow: auto; border-left: #c3b091 1px solid; width: 731px; border-bottom: #c3b091 1px solid; height: 400px; background-color: #fffacd"&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 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;=&amp;quot;http://www.contoso.com/SampleProductFeed.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-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;=&amp;quot;Entry_SampleProduct_Title&amp;quot;&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;=&amp;quot;Entry_SampleProduct_Summary&amp;quot;&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;=&amp;quot;Entry_SampleProduct_LongSummary&amp;quot;&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;&amp;#160;&lt;/p&gt;

&lt;p&gt;And SampleProduct_it.xml referenced in the resource list will have to look something like this:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div style="border-right: #c3b091 1px solid; border-top: #c3b091 1px solid; overflow: auto; border-left: #c3b091 1px solid; width: 730px; border-bottom: #c3b091 1px solid; height: 220px; background-color: #fffacd"&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;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;=&amp;quot;Entry_SampleProduct_Title&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xml:space&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;preserve&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;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;=&amp;quot;Entry_SampleProduct_Summary&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xml:space&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;preserve&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;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;=&amp;quot;Entry_SampleProduct_LongSummary&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xml:space&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;preserve&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;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;&amp;#160;&lt;/p&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><cs:applicationKey>kateroh</cs:applicationKey></item><item><title>DebugDiag 1.1 X64 is available now.</title><link>http://blogs.iis.net/ganekar/archive/2009/10/29/debugdiag-1-1-x64-is-available-now.aspx</link><pubDate>Thu, 29 Oct 2009 11:46:08 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3483494</guid><dc:creator>ganeshanekar</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Much awaited tool for 64 bit platforms. Debugdiag 1.1 x64 is now RTW. &lt;/p&gt;  &lt;p&gt;Download here:    &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Whitepaper is posted at:    &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4A2FBD0D-0635-440C-A08B-ED81BDBB5960&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=4A2FBD0D-0635-440C-A08B-ED81BDBB5960&amp;amp;displaylang=en&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Notes:&lt;/p&gt;  &lt;p&gt;· To install the RTW package, please remove all previous versions and run the new MSI.    &lt;br /&gt;· Debugging/Analyzing Win32 bit processes is not supported.     &lt;br /&gt;· Running both 64 bit and 32 bit releases on the same 64 bit platform is not supported.     &lt;br /&gt;. Debugging/Analyzing Vista/2008 and Win7/2008 R2 x64 bit processes is not supported.&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3483494" width="1" height="1"&gt;</description><cs:applicationKey>ganekar</cs:applicationKey></item><item><title>IIS 7 and Windows Failover clustering support!!</title><link>http://blogs.iis.net/steveschofield/archive/2009/10/29/iis-7-and-windows-failover-clustering-support.aspx</link><pubDate>Thu, 29 Oct 2009 08:59:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3483297</guid><dc:creator>Steve Schofield Weblog : IIS</dc:creator><slash:comments>3</slash:comments><description>In Windows 2000 clustering, there was a resource for IIS clustering. This was removed and hasn't been available until recently Thomas Deml from the IIS team pointed to a KB article.. Exciting, Exciting news!! http://blogs.iis.net/thomad/archive/2009/10/27/iis7-and-failover-clustering.aspx Here is more information about Windows 2008 failover clustering http://www.microsoft.com/windowsserver2008/en/us/high-availability.aspx Clustering forum http://social.technet.microsoft.com/Forums/en/winserverClustering...(&lt;a href="http://blogs.iis.net/steveschofield/archive/2009/10/29/iis-7-and-windows-failover-clustering-support.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3483297" width="1" height="1"&gt;</description><cs:applicationKey>steveschofield</cs:applicationKey><category domain="http://blogs.iis.net/steveschofield/archive/tags/IIS/default.aspx">IIS</category></item><item><title>IIS7 and Failover Clustering</title><link>http://blogs.iis.net/thomad/archive/2009/10/27/iis7-and-failover-clustering.aspx</link><pubDate>Tue, 27 Oct 2009 07:00:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3478770</guid><dc:creator>thomad</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;We recently published an &lt;A href="http://support.microsoft.com/kb/970759/" target=_blank mce_href="http://support.microsoft.com/kb/970759/"&gt;article&lt;/A&gt; on how to enable failover clustering for IIS7 and Microsoft Cluster Service (MSCS). MSCS provides failover and increased availability of applications by failing over to a second machine that is on stand-by or by just taking the sick machine out of the network so that no requests are routed to it anymore. &lt;/P&gt;
&lt;P&gt;There is a fundamental problem with configuring failover clustering for IIS however: IIS in itself is not an application; IIS is an application&amp;nbsp;platform and it's hard to come up with a clear yay or nay when to fail over. We don't know enough to decide if an application is terminally sick and can't recover. Is it when a web application returns 500 errors, when the application is overloaded and TCP connections can't be established anymore, when its Application Pool crashes repeatedly? What if more than one application is hosted on the IIS machine?&amp;nbsp;Should IIS only fail over when W3SVC is terminated? Should IIS fail over if one of the web applications is dead, when 50% of the apps are dead? 90%?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There is no good way to make these decisions without involving the people managing the IIS machine and the web application developers that run code on the IIS box. And that's why we decided to publish sample code that somebody can take and adjust for their specific needs. &lt;/P&gt;
&lt;P&gt;The sample code in the &lt;A href="http://support.microsoft.com/kb/970759/" target=_blank mce_href="http://support.microsoft.com/kb/970759/"&gt;article&lt;/A&gt; is a script that can be configured as a &lt;A href="http://msdn.microsoft.com/en-us/library/aa373089(VS.85).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa373089(VS.85).aspx"&gt;Generic Script Resource&lt;/A&gt; in the MSCS service. The script monitors the run-time status of the IIS7 "Default Web Site" and IIS7 "DefaultAppPool" and will trigger a fail over if one of them is stopped. It is trivial to change the Site or Application Pool name in the script and it should be easy for a developer familiar with VBScript to add some custom functionality to this script. &lt;/P&gt;
&lt;P&gt;Happy fail over!&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3478770" width="1" height="1"&gt;</description><cs:applicationKey>thomad</cs:applicationKey></item><item><title>MSDeploy Powershell Scripts Part II – Exceptions And Remote Server Syncs</title><link>http://blogs.iis.net/jamescoo/archive/2009/10/24/msdeploy-powershell-scripts-part-ii-exceptions-and-remote-server-syncs.aspx</link><pubDate>Sat, 24 Oct 2009 22:30:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3475458</guid><dc:creator>Jamescoo</dc:creator><slash:comments>5</slash:comments><description>&lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;  &lt;div align="left" mce_keep="true"&gt;   &lt;p&gt;In this blog I will show how to script syncing remote servers and add some useful exception handling.&amp;#160; This blog assumes you have read or are familiar with part I at:&lt;/p&gt;    &lt;p&gt;&lt;a title="http://blogs.iis.net/jamescoo/archive/2009/09/09/cool-msdeploy-powershell-scripts.aspx" href="http://blogs.iis.net/jamescoo/archive/2009/09/09/cool-msdeploy-powershell-scripts.aspx" mce_href="http://blogs.iis.net/jamescoo/archive/2009/09/09/cool-msdeploy-powershell-scripts.aspx"&gt;&lt;font color="#004000"&gt;http://blogs.iis.net/jamescoo/archive/2009/09/09/cool-msdeploy-powershell-scripts.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;For MSDeploy API examples visit here:&lt;/p&gt;    &lt;p&gt;&lt;a title="http://blogs.iis.net/jamescoo/archive/2009/11/03/msdeploy-api-scenarios.aspx" href="http://blogs.iis.net/jamescoo/archive/2009/11/03/msdeploy-api-scenarios.aspx"&gt;http://blogs.iis.net/jamescoo/archive/2009/11/03/msdeploy-api-scenarios.aspx&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;First a borrowed function that will help implement a try catch block in the script-let logic from part I.&amp;#160; This will allow for MSDeploy exceptions to be caught and reported making life a bit easier when you get an error.&amp;#160; The code is from:&lt;/p&gt;    &lt;p&gt;&lt;a title="http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx" href="http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx" mce_href="http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx"&gt;&lt;font color="#004000"&gt;http://weblogs.asp.net/adweigert/archive/2007/10/10/powershell-try-catch-finally-comes-to-life.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Simply paste this into the Powershell session ( or start all these functions in your profile ) and you are ready to use try catch blocks:&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;function Try        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; param         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [ScriptBlock]$Command = $(&lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;The parameter -Command is required.&amp;quot;&lt;/span&gt;),         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [ScriptBlock]$Catch&amp;#160;&amp;#160; = { &lt;span class="kwrd"&gt;throw&lt;/span&gt; $_ },         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [ScriptBlock]$Finally = {}         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $local:ErrorActionPreference = &lt;span class="str"&gt;&amp;quot;SilentlyContinue&amp;quot;&lt;/span&gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trap         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trap         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trap { &lt;span class="kwrd"&gt;throw&lt;/span&gt; $_ }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;$Finally         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span class="kwrd"&gt;throw&lt;/span&gt; $_         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $_ | &amp;amp; { &amp;amp;$Catch }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;$Command         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; {         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; trap { &lt;span class="kwrd"&gt;throw&lt;/span&gt; $_ }         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;$Finally         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }         &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;Visiting back to part I, the most versatile script-let was the Sync-Provider so next is to add exception handling to this script-let.&amp;#160; Of course, not to forget to load the assembly first (hopefully this is now part of your Powershell profile ). &lt;/p&gt;    &lt;pre class="csharpcode"&gt;&lt;font color="#0000ff"&gt;[System.Reflection.Assembly]::LoadWithPartialName(&lt;span class="str"&gt;&amp;quot;Microsoft.Web.Deployment&amp;quot;&lt;/span&gt;)
function Sync-Provider($provider, $sourceLocation, $destLocation) 
{ 
    $destBaseOptions   = &lt;span class="kwrd"&gt;new&lt;/span&gt;-&lt;span class="kwrd"&gt;object&lt;/span&gt; Microsoft.Web.Deployment.DeploymentBaseOptions 
    $syncOptions       = &lt;span class="kwrd"&gt;new&lt;/span&gt;-&lt;span class="kwrd"&gt;object&lt;/span&gt; Microsoft.Web.Deployment.DeploymentSyncOptions 
    Try
    {
      $deploymentObject = [Microsoft.Web.Deployment.DeploymentManager]::CreateObject($provider, $sourceLocation) 
      $deploymentObject.SyncTo($provider,$destLocation,$destBaseOptions,$syncOptions)
    }
    Catch
    {
      echo &lt;span class="str"&gt;&amp;quot;EXCEPTION THROWN::[ $_ ] &amp;quot;&lt;/span&gt;
      #&lt;span class="kwrd"&gt;throw&lt;/span&gt; $_
    }
} &lt;/font&gt;&lt;/pre&gt;

  &lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;

  &lt;p&gt;Now that you have better exception handling you can get messages like this ( in this case you cannot sync a site to a directory with apphostconfig provider ):&lt;/p&gt;

  &lt;p&gt;&amp;gt;&amp;#160; &lt;strong&gt;&lt;em&gt;Sync-Provider apphostconfig &amp;quot;Default Web Site&amp;quot; c:\mysite 
        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;EXCEPTION THROWN::[ Exception calling &amp;quot;SyncTo&amp;quot; with &amp;quot;4&amp;quot; argument(s): &amp;quot;Invalid site name 
    &lt;br /&gt;&amp;quot; ]&lt;/p&gt;

  &lt;p&gt;In order to perform remote server syncs, credentials will have to be included with the name of the machines that you want to sync.&amp;#160; To do this I decided to go with the below functions to help store remote machine information.&amp;#160; ‘Create-Server’ will make a new file that will be saved on the local system drive ( feel free to change where you are storing these but you must also change Sync-Server respectively ) with the same name as the computer name being stored.&amp;#160; The credentials will be saved and the password will be converted to a secure and then encrypted into the same file.&lt;/p&gt;

  &lt;p&gt;#load and run this function for each server you would like to perform a remote sync operation on&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;function Create-Server() 
      &lt;br /&gt;{ 

      &lt;br /&gt;&amp;#160; Try 

      &lt;br /&gt;&amp;#160; { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $machine = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt; | select ComputerName,UserName,Password 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $machine.ComputerName = Read-host -prompt &lt;span class="str"&gt;&amp;quot;Machine name&amp;quot;&lt;/span&gt; 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $fileName = $machine.ComputerName 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $machine.UserName&amp;#160;&amp;#160;&amp;#160; = Read-host -prompt &lt;span class="str"&gt;&amp;quot;User name&amp;quot;&lt;/span&gt; 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $machine.Password = Read-host -prompt Password -assecurestring | convertfrom-securestring 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $machine | Export-Csv $Env:SystemDrive\$fileName.txt 

      &lt;br /&gt;&amp;#160; } Catch { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; echo &lt;span class="str"&gt;&amp;quot;EXCEPTION THROWN::[ $_ ] &amp;quot;&lt;/span&gt; 

      &lt;br /&gt;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;}&amp;#160;&amp;#160; &lt;br /&gt;&lt;/font&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&gt;The next function will help us later when converting the secure string to plain text, this snippet is from a forum reply at:&lt;/p&gt;

  &lt;p&gt;&lt;a title="http://www.vistax64.com/powershell/159190-read-host-assecurestring-problem.html" href="http://www.vistax64.com/powershell/159190-read-host-assecurestring-problem.html" mce_href="http://www.vistax64.com/powershell/159190-read-host-assecurestring-problem.html"&gt;&lt;font color="#004000"&gt;http://www.vistax64.com/powershell/159190-read-host-assecurestring-problem.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;Function ConvertTo-PlainText( [&lt;/font&gt;&lt;a href="http://www.vistax64.com/#" mce_href="http://www.vistax64.com/#"&gt;&lt;font color="#0000ff" face="Courier New"&gt;security&lt;/font&gt;&lt;/a&gt;&lt;font color="#0000ff" face="Courier New"&gt;.securestring]$secure )&lt;/font&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;{ 
      &lt;br /&gt;&amp;#160;&amp;#160; $marshal = [Runtime.InteropServices.Marshal] 

      &lt;br /&gt;&amp;#160;&amp;#160; $marshal::PtrToStringAuto( $marshal::SecureStringToBSTR($&lt;/font&gt;&lt;a href="http://www.vistax64.com/#" mce_href="http://www.vistax64.com/#"&gt;&lt;font color="#0000ff" face="Courier New"&gt;secure&lt;/font&gt;&lt;/a&gt;&lt;font color="#0000ff" face="Courier New"&gt;) ) 
      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;

  &lt;p&gt;The next function Sync-Server will take a provider as a string, then the name of two machines that you want to sync.&amp;#160; It will then match the names of the machines to corresponding files on the local box and import the original objects that are exported in “Create-Server”, then convert the encrypted password so it can be used by msdeploy.&amp;#160; Examples of usage are farther down:&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;function Sync-Server($provider, $source, $dest) 
      &lt;br /&gt;{ 

      &lt;br /&gt;&amp;#160; Try 

      &lt;br /&gt;&amp;#160; { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; #read from files 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceMachine = Import-Csv $Env:SystemDrive\$source.txt 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destMachine = Import-Csv $Env:SystemDrive\$dest.txt 

      &lt;br /&gt;&amp;#160; } 

      &lt;br /&gt;&amp;#160; Catch 

      &lt;br /&gt;&amp;#160; { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;EXCEPTION THROWN::[ $_&amp;#160; ] &amp;quot; 

      &lt;br /&gt;&amp;#160; } 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions&amp;#160;&amp;#160; = new-object Microsoft.Web.Deployment.DeploymentBaseOptions 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions&amp;#160;&amp;#160; = new-object Microsoft.Web.Deployment.DeploymentBaseOptions 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $syncOptions = new-object Microsoft.Web.Deployment.DeploymentSyncOptions &lt;/font&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; #fill in remoting information for source machine 
      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.ComputerName = $sourceMachine.ComputerName 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.UserName = $sourceMachine.UserName; 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-SecureString $sourceMachine.Password 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-PlainText $password 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.Password = $password &lt;/font&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; #fill in remoting information for destination machine 
      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.ComputerName = $destMachine.ComputerName 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.UserName = $destMachine.UserName; 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-SecureString $destMachine.Password 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-PlainText $password 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.Password = $password &lt;/font&gt;&lt;/p&gt;

  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160; Try 
      &lt;br /&gt;&amp;#160; { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $providerOptions = new-object Microsoft.Web.Deployment.DeploymentProviderOptions($provider) 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $deploymentObject = [Microsoft.Web.Deployment.DeploymentManager]::CreateObject($providerOptions, $sourceBaseOptions) 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $deploymentObject.SyncTo($destBaseOptions,$syncOptions) 

      &lt;br /&gt;&amp;#160; } 

      &lt;br /&gt;&amp;#160; Catch 

      &lt;br /&gt;&amp;#160; { 

      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;EXCEPTION THROWN::[ $_&amp;#160; ] &amp;quot; 

      &lt;br /&gt;&amp;#160; } 

      &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Assuming you have all of the above code snippets now loaded into a Powershell session here is an example of the use of these methods to accomplish a server sync:&lt;/p&gt;

&lt;p&gt;PS &amp;gt; &lt;strong&gt;&lt;em&gt;Create-Server 
      &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Machine name: &amp;lt;machineName1&amp;gt; 

  &lt;br /&gt;User name: &amp;lt;userName&amp;gt; 

  &lt;br /&gt;Password: ******** 

  &lt;br /&gt;PS &amp;gt; &lt;strong&gt;&lt;em&gt;Create-Server 
      &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Machine name: &amp;lt;machineName2&amp;gt; 

  &lt;br /&gt;User name: &amp;lt;userName&amp;gt; 

  &lt;br /&gt;Password: ********&lt;/p&gt;

&lt;p&gt;PS &amp;gt; &lt;strong&gt;&lt;em&gt;Sync-Server metakey &amp;lt;machineName1&amp;gt; &amp;lt;machineName2&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Errors&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0 
  &lt;br /&gt;Warnings&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;BytesCopied&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;ObjectsDeleted&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;ObjectsUpdated&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;ObjectsAdded&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;TotalChanges&amp;#160;&amp;#160;&amp;#160;&amp;#160; : 0 

  &lt;br /&gt;ParameterChanges : 0&lt;/p&gt;

&lt;p&gt;Sometimes it takes a little while for the sync to occur, and in the above example I had installed MSDeploy and started the service on my remote machines.&amp;#160; Also, you can modify the $sourceBaseOptions and $destBaseOptions by changing the “TempAgent” property to true.&amp;#160; This can help you run remotely when you have not installed MSDeploy on your source or destination.&amp;#160; TempAgent is very useful for this type of syncing.&amp;#160; &lt;/p&gt;

&lt;p&gt;Another note is that if you want to take this one step farther, you can make a couple of changes and sync a provider path across both machines, I will just paste the new function farther down and you can use it like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Sync-ServerPath apphostconfig “Default Web Site” &amp;lt;machine1&amp;gt; &amp;lt;machine2&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;function Sync-ServerPath($provider,$path, $source, $dest) 
    &lt;br /&gt;{ 

    &lt;br /&gt;&amp;#160; Try 

    &lt;br /&gt;&amp;#160; { 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; #read from files 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceMachine = Import-Csv $Env:SystemDrive\$source.txt 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destMachine = Import-Csv $Env:SystemDrive\$dest.txt 

    &lt;br /&gt;&amp;#160; } 

    &lt;br /&gt;&amp;#160; Catch 

    &lt;br /&gt;&amp;#160; { 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;EXCEPTION THROWN::[ $_&amp;#160; ] &amp;quot; 

    &lt;br /&gt;&amp;#160; } 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions&amp;#160;&amp;#160; = new-object Microsoft.Web.Deployment.DeploymentBaseOptions 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions&amp;#160;&amp;#160; = new-object Microsoft.Web.Deployment.DeploymentBaseOptions 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $syncOptions = new-object Microsoft.Web.Deployment.DeploymentSyncOptions &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; #fill in remoting information for source machine 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.ComputerName = $sourceMachine.ComputerName 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.UserName = $sourceMachine.UserName; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-SecureString $sourceMachine.Password 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-PlainText $password 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $sourceBaseOptions.Password = $password &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; #fill in remoting information for destination machine 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.ComputerName = $destMachine.ComputerName 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.UserName = $destMachine.UserName; 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-SecureString $destMachine.Password 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $password = ConvertTo-PlainText $password 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $destBaseOptions.Password = $password &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;&amp;#160; Try 
    &lt;br /&gt;&amp;#160; { 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $deploymentObject = [Microsoft.Web.Deployment.DeploymentManager]::CreateObject($provider,$path, $sourceBaseOptions) 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $deploymentObject.SyncTo($provider,$path,$destBaseOptions,$syncOptions) 

    &lt;br /&gt;&amp;#160; } 

    &lt;br /&gt;&amp;#160; Catch 

    &lt;br /&gt;&amp;#160; { 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; echo &amp;quot;EXCEPTION THROWN::[ $_&amp;#160; ] &amp;quot; 

    &lt;br /&gt;&amp;#160; } 

    &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and hope this is useful.&amp;#160; Please leave replies for any request / corrections or comments.&amp;#160; In part III, I will try to go into things like using Credentials Manager, dumps or other verbs like getdependencies or getsysteminfo.&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3475458" width="1" height="1"&gt;</description><cs:applicationKey>jamescoo</cs:applicationKey></item><item><title>WINCACHE statistics page - login dialog keeps popping up</title><link>http://blogs.iis.net/donraman/archive/2009/10/24/wincache-statistics-page-login-dialog-keeps-popping-up.aspx</link><pubDate>Sat, 24 Oct 2009 17:06:55 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3475280</guid><dc:creator>don.raman</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;As you know we released &lt;a href="http://www.iis.net/extensions/WinCacheForPHP" target="_blank"&gt;WINCACHE 1.0 RC&lt;/a&gt; early last week. We have got some good response for all the new features and bug fixes the RC release contains. If you haven't tried the RC version you should definitely try it out. We also included a brand new WINCACHE statistics page which displays lot of useful statistics about the cache. However there were people in the forum who complained about getting the login dialog again and again no matter what they pass as login/password.&lt;/p&gt;  &lt;p&gt;Before giving the solution let me explain what the problem was. The Basic PHP authentication as described &lt;a href="http://blogs.iis.net/donraman/archive/2009/10/13/simple-authentication-page-in-php.aspx" target="_blank"&gt;here&lt;/a&gt; works with IIS only if IIS is configured to support 'Anonymous Authentication' and nothing else. If you have any other authentication support enabled for your site like 'Basic Authentication' or 'Digest Authentication' etc. PHP basic authentication as coded in our WINCACHE.php stops working. This happens because the variables PHP_AUTH_USER and PHP_AUTH_PW are not set when your site allows any other authentication support other than 'Anonymous' in IIS. If any other authentication mechanism is supported, that takes precedence over anonymous authentication and IIS pops up it's own authentication dialog and hence PHP basic authentication never comes into picture. If the user keeps filling the username/password as specified in WINCACHE.php the login prompt will keep coming back as those are not valid credentials for IIS.&lt;/p&gt;  &lt;p&gt;The solution was to modify the code to ignore the PHP basic authentication if IIS is authenticating the user other than 'Anonymous'. We also got request from the users that they would like to further restrict access to this page by providing their own list of users on top of IIS authentication. If you are experiencing a similar problem please do the below:&lt;/p&gt;  &lt;p&gt;If you open existing WINCACHE.php you will find below code:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( !extension_loaded( &lt;span style="color: #006080"&gt;'wincache'&lt;/span&gt; ) )
{
    die(&lt;span style="color: #006080"&gt;'The extension WINCACHE (php_wincache.dll) is not loaded. No statistics to show.'&lt;/span&gt;);
}

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( USE_AUTHENTICATION == 1 ) {
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( !isset($_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_USER'&lt;/span&gt;] ) || !isset( $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] ) ||    
    $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_USER'&lt;/span&gt;] != USERNAME || $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] != PASSWORD ) {
        header( &lt;span style="color: #006080"&gt;'WWW-Authenticate: Basic realm=&amp;quot;WINCACHE Log In!&amp;quot;'&lt;/span&gt; );
        header( &lt;span style="color: #006080"&gt;'HTTP/1.0 401 Unauthorized'&lt;/span&gt; );
        exit;
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] == &lt;span style="color: #006080"&gt;'wincache'&lt;/span&gt; )
    {
        echo &lt;span style="color: #006080"&gt;&amp;quot;Please change the default password to get this page working. Exiting.&amp;quot;&lt;/span&gt;;
        exit;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;These lines should be replaced by:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;/*The Basic PHP authentication will work only when IIS is configured to support &lt;/span&gt;
&lt;span style="color: #008000"&gt;'Anonymous Authentication' and nothing else. If IIS is configured to support/use&lt;/span&gt;
&lt;span style="color: #008000"&gt;any other kind of authentication like Basic/Negotiate/Digest etc. this will not work.&lt;/span&gt;
&lt;span style="color: #008000"&gt;In that case please define the name of users in the array below which you would like&lt;/span&gt;
&lt;span style="color: #008000"&gt;to grant access in your domain/network/workgroup.*/&lt;/span&gt;
$user_allowed = array(&lt;span style="color: #006080"&gt;'DOMAIN\user1'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'DOMAIN\user2'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'DOMAIN\user3'&lt;/span&gt;);

&lt;span style="color: #008000"&gt;/*If the array contains string 'all' all the users authenticated by IIS&lt;/span&gt;
&lt;span style="color: #008000"&gt;will have access to the page. Uncomment the below line and comment above line&lt;/span&gt;
&lt;span style="color: #008000"&gt;to grant access to all users who gets authenticated by IIS.*/&lt;/span&gt;
&lt;span style="color: #008000"&gt;/*$user_allowed = array('all');*/&lt;/span&gt;

&lt;span style="color: #008000"&gt;/** ===================== END OF CONFIGURATION SETTINGS ========================== */&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( !extension_loaded( &lt;span style="color: #006080"&gt;'wincache'&lt;/span&gt; ) )
{
    die(&lt;span style="color: #006080"&gt;'The extension WINCACHE (php_wincache.dll) is not loaded. No statistics to show.'&lt;/span&gt;);
}

&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( USE_AUTHENTICATION == 1 ) {
    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!empty($_SERVER[&lt;span style="color: #006080"&gt;'AUTH_TYPE'&lt;/span&gt;]) &amp;amp;&amp;amp; !empty($_SERVER[&lt;span style="color: #006080"&gt;'REMOTE_USER'&lt;/span&gt;]) &amp;amp;&amp;amp; strcasecmp($_SERVER[&lt;span style="color: #006080"&gt;'REMOTE_USER'&lt;/span&gt;], &lt;span style="color: #006080"&gt;'anonymous'&lt;/span&gt;))
    {
        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!in_array(strtolower($_SERVER[&lt;span style="color: #006080"&gt;'REMOTE_USER'&lt;/span&gt;]), array_map(&lt;span style="color: #006080"&gt;'strtolower'&lt;/span&gt;, $user_allowed))
        &amp;amp;&amp;amp; !in_array(&lt;span style="color: #006080"&gt;'all'&lt;/span&gt;, array_map(&lt;span style="color: #006080"&gt;'strtolower'&lt;/span&gt;, $user_allowed)))
        {
            echo &lt;span style="color: #006080"&gt;'You are not authorised to view this page. Please contact server admin to get permission. Exiting.'&lt;/span&gt;;
            exit;
        }
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( !isset($_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_USER'&lt;/span&gt;] ) || !isset( $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] ) ||    
    $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_USER'&lt;/span&gt;] != USERNAME || $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] != PASSWORD ) {
        header( &lt;span style="color: #006080"&gt;'WWW-Authenticate: Basic realm=&amp;quot;WINCACHE Log In!&amp;quot;'&lt;/span&gt; );
        header( &lt;span style="color: #006080"&gt;'HTTP/1.0 401 Unauthorized'&lt;/span&gt; );
        exit;
    }
    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $_SERVER[&lt;span style="color: #006080"&gt;'PHP_AUTH_PW'&lt;/span&gt;] == &lt;span style="color: #006080"&gt;'wincache'&lt;/span&gt; )
    {
        echo &lt;span style="color: #006080"&gt;&amp;quot;Please change the default password to get this page working. Exiting.&amp;quot;&lt;/span&gt;;
        exit;
    }
}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This should fix your problem. I also believe this is the right way to write a basic PHP authentication page for IIS. It was fun to work on this problem for the entire team and I would like to mention the Program Manager on the team who showed equal enthusiasm in coming out with a session based authentication. This kind of passion really helps in keeping the motivation level up in the team.&lt;/p&gt;

&lt;p&gt;Hopefully this will help you in running WINCACHE statistics page in a much better way. Thanks for the patient reading and good bye.&lt;/p&gt;

&lt;p&gt;Don.&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3475280" width="1" height="1"&gt;</description><cs:applicationKey>donraman</cs:applicationKey><category domain="http://blogs.iis.net/donraman/archive/tags/Wincache+RC/default.aspx">Wincache RC</category><category domain="http://blogs.iis.net/donraman/archive/tags/PHP+Wincahe/default.aspx">PHP Wincahe</category></item></channel></rss>