<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nikhil's Blog</title><link>http://blogs.msdn.com/nikhiln/default.aspx</link><description>A .NET dev generalist blog covering pretty much everything under the sun of .NET.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Commerce Server 2007 Staging Error: CatalogImport failed; _FullTextCatalog' cannot be reused until after the next BACKUP LOG operation</title><link>http://blogs.msdn.com/nikhiln/archive/2009/01/19/commerce-server-2007-staging-error-catalogimport-failed-fulltextcatalog-cannot-be-reused-until-after-the-next-backup-log-operation.aspx</link><pubDate>Mon, 19 Jan 2009 06:46:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9339342</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/9339342.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=9339342</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=9339342</wfw:comment><description>In one of the production commerce server instances of my client, I suddenly found this error getting logged since a couple of days. Now, the text of the error has nothing to do with Commerce Server 2007 but everything to do with the Sql Server 2005 that...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2009/01/19/commerce-server-2007-staging-error-catalogimport-failed-fulltextcatalog-cannot-be-reused-until-after-the-next-backup-log-operation.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9339342" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Catalog+System/default.aspx">Catalog System</category></item><item><title>Commerce Server 2007 Staging Error : "Error occurred with the database StagingLog.mdb"</title><link>http://blogs.msdn.com/nikhiln/archive/2008/11/13/commerce-server-2007-staging-error-error-occurred-with-the-database-staginglog-mdb.aspx</link><pubDate>Thu, 13 Nov 2008 13:27:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9065882</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/9065882.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=9065882</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=9065882</wfw:comment><description>Yesterday I came across a very strange Commerce Server Staging error at one of the production boxes of the customer am working for. Strangely, for some reason, the Staging server stopped and started to throw out the below error: &amp;#160; Event Type:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/11/13/commerce-server-2007-staging-error-error-occurred-with-the-database-staginglog-mdb.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9065882" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category></item><item><title>Using HttpModules to perform a SSL switch on web pages</title><link>http://blogs.msdn.com/nikhiln/archive/2008/09/05/using-httpmodules-to-perform-a-ssl-switch-on-web-pages.aspx</link><pubDate>Fri, 05 Sep 2008 11:56:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8926095</guid><dc:creator>nikhiln</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8926095.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8926095</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8926095</wfw:comment><description>A common requirement of any secure website is to make sure that when a user traverses to a &amp;quot;sensitive&amp;quot; part of the website such the login page, the password reset page or even the personal profile page which might contain contact detail you...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/09/05/using-httpmodules-to-perform-a-ssl-switch-on-web-pages.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8926095" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Web+Application/default.aspx">Web Application</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/HttpModule/default.aspx">HttpModule</category></item><item><title>Commerce Server 2007: Accessing multi-valued custom properties in UserObject of Profile System</title><link>http://blogs.msdn.com/nikhiln/archive/2008/09/04/commerce-server-2007-accessing-multi-valued-custom-properties-in-userobject-of-profile-system.aspx</link><pubDate>Thu, 04 Sep 2008 15:34:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8924339</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8924339.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8924339</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8924339</wfw:comment><description>The MSDN's Managing Profiles section of the commerce server gives an in-depth view of the working of the profile system and the steps needed to create custom properties for the UserObject. The Extending the Profile System section gives out detailed steps...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/09/04/commerce-server-2007-accessing-multi-valued-custom-properties-in-userobject-of-profile-system.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8924339" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Profile+System/default.aspx">Profile System</category></item><item><title>EntLib 3.1 DAAB: Be careful with the ExecuteReader</title><link>http://blogs.msdn.com/nikhiln/archive/2008/07/08/entlib-3-1-daab-be-careful-with-the-executereader.aspx</link><pubDate>Tue, 08 Jul 2008 09:40:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8706852</guid><dc:creator>nikhiln</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8706852.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8706852</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8706852</wfw:comment><description>The EntLib 3.1 is simply superb, right?! Well, I would give a typical consultant answer... "It depends!". It depends on the developers who are using it and it depends on motivation of the developers to know the component before "copy-pasting" code and...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/07/08/entlib-3-1-daab-be-careful-with-the-executereader.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8706852" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/EntLib/default.aspx">EntLib</category></item><item><title>Commerce Server 2007: Catalog Import Error for Large Files</title><link>http://blogs.msdn.com/nikhiln/archive/2008/06/16/commerce-server-2007-catalog-import-error-for-large-files.aspx</link><pubDate>Mon, 16 Jun 2008 14:51:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8604677</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8604677.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8604677</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8604677</wfw:comment><description>When you are trying to import a large catalog into the commerce server catalog system you might come across this error: The import failed because the import file is larger than the maximum size allowed on your server.&amp;#160; Contact your system administrator....(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/06/16/commerce-server-2007-catalog-import-error-for-large-files.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8604677" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Web+Services/default.aspx">Web Services</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Catalog+System/default.aspx">Catalog System</category></item><item><title>HttpHandler to Authorize File Downloads - C# Code Sample</title><link>http://blogs.msdn.com/nikhiln/archive/2008/05/22/httphandler-to-authorize-file-downloads-c-code-sample.aspx</link><pubDate>Thu, 22 May 2008 07:31:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8531246</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8531246.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8531246</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8531246</wfw:comment><description>Its quite a common scenario to have a feature in a web site to check for the credentials of the user before allowing a particular download. For example, there might be some documents which should be visible only to a set of users and not to any others....(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/05/22/httphandler-to-authorize-file-downloads-c-code-sample.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8531246" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Web+Application/default.aspx">Web Application</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/HttpHandler/default.aspx">HttpHandler</category></item><item><title>.NET 2.0 Symmetric Encryption Code Sample</title><link>http://blogs.msdn.com/nikhiln/archive/2008/05/18/net-2-0-symmetric-encryption-code-sample.aspx</link><pubDate>Sun, 18 May 2008 18:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8518240</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8518240.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8518240</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8518240</wfw:comment><description>One of the most common problems when developing any web site if the need to use Symmetric Encryption to save some data in the Cookie so that it can be looped back to the user's session / identity. .NET provides a very robust mechanism in which this can...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/05/18/net-2-0-symmetric-encryption-code-sample.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8518240" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Cryptography/default.aspx">Cryptography</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/.NET+2.0/default.aspx">.NET 2.0</category></item><item><title>Commerce Server 2007 Code Samples - Catalog System and Basic Catalog Search</title><link>http://blogs.msdn.com/nikhiln/archive/2008/04/14/commerce-server-2007-code-samples-catalog-system-and-basic-catalog-search.aspx</link><pubDate>Mon, 14 Apr 2008 08:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8386402</guid><dc:creator>nikhiln</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8386402.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8386402</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8386402</wfw:comment><description>I did some qualitative analysis of the referrals of my blog, and found that a majority of the search terms are for Commerce Server Code Samples or for Commerce Server API usage samples.Though some very good code samples are available at the Microsoft...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/04/14/commerce-server-2007-code-samples-catalog-system-and-basic-catalog-search.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8386402" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Catalog+System/default.aspx">Catalog System</category></item><item><title>Multi-Threaded Web Service Calls - A C# Code Sample</title><link>http://blogs.msdn.com/nikhiln/archive/2008/04/12/multi-threaded-web-service-calls-a-c-code-sample.aspx</link><pubDate>Sat, 12 Apr 2008 18:51:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8385439</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8385439.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8385439</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8385439</wfw:comment><description>Sometimes it becomes necessary to call an external web service in a multi threaded manner to speed up processing of records that we have in a buffer so that the overall time spent in waiting for the calls to return is reduced. The high-level steps to...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/04/12/multi-threaded-web-service-calls-a-c-code-sample.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8385439" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Web+Services/default.aspx">Web Services</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Threads/default.aspx">Threads</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Commerce Server 2007 SetJoin API</title><link>http://blogs.msdn.com/nikhiln/archive/2008/04/02/commerce-server-2007-setjoin-api.aspx</link><pubDate>Wed, 02 Apr 2008 06:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8349739</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/8349739.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=8349739</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=8349739</wfw:comment><description>The official documentation for the commendable SetJoin API in commerce Server 2007 seems more like a class reference without any code samples or introductory material into the way SetJoin should be used. So here's the "low-down" as to how a SetJoin API...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2008/04/02/commerce-server-2007-setjoin-api.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8349739" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/nikhiln/attachment/8349739.ashx" length="10573" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category></item><item><title>Commerce Server 2007 Web Services Application Pool Invalid Identity Error</title><link>http://blogs.msdn.com/nikhiln/archive/2007/12/03/commerce-server-2007-web-services-application-pool-invalid-identity-error.aspx</link><pubDate>Mon, 03 Dec 2007 10:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6644992</guid><dc:creator>nikhiln</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/6644992.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=6644992</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=6644992</wfw:comment><description>When you are configuring a clean install of Commerce Server 2007, you'll definitely need to go through the hellish and longish configuration steps that this document specifies. But once in a blue moon you might get this Application Pool Invalid Identity...(&lt;a href="http://blogs.msdn.com/nikhiln/archive/2007/12/03/commerce-server-2007-web-services-application-pool-invalid-identity-error.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6644992" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Commerce+Server+2007/default.aspx">Commerce Server 2007</category></item><item><title>Passing property values in Remove action using UAB for MSIs</title><link>http://blogs.msdn.com/nikhiln/archive/2007/06/27/passing-property-values-in-remove-action-using-uab-for-msis.aspx</link><pubDate>Wed, 27 Jun 2007 16:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3565330</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/3565330.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=3565330</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=3565330</wfw:comment><description>&lt;P&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt; An application which you are developing is using UAB (&lt;A class="" title="Updater Application Block" href="http://msdn2.microsoft.com/en-us/library/ms978574.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms978574.aspx"&gt;Updater Application Block&lt;/A&gt;)&amp;nbsp;to pull in updates from a server. There is a requirement to uninstall the application using UAB with the help of an MSI, but the uninstall needs to happen conditionally so that, based on the value of a property, parts of the uninstall steps are skipped. The issue now is that the infrastructure that the UAB provides does not allow us to pass property-value pairs using the MsiProcessor to invoke the msi uninstall action AND pass some property=value pairs.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution&lt;/STRONG&gt;: The usual way in which a manifest is authored for a msi processor to use the Remove action will be something like:&lt;/P&gt;
&lt;HR height="1"&gt;
&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;BR&gt;&amp;lt;manifest manifestId="{311085F7-9320-4318-9A67-9BE32F04E933}" mandatory="True"&lt;BR&gt;&amp;nbsp;xmlns="urn:schemas-microsoft-com:PAG:updater-application-block:v2:manifest"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;TestUAB Manifest&amp;lt;/description&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;application applicationId="{215E1AD7-9ABA-432f-A952-24BABA556850}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;entryPoint file="" parameters="" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;location&amp;gt;.\..\..&amp;lt;/location&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/application&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;activation&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tasks&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;task name="MSIProcessorInstall" type="Microsoft.ApplicationBlocks.Updater.ActivationProcessors.MsiProcessor, Microsoft.ApplicationBlocks.Updater.ActivationProcessors" taskId="{425E1AD7-9ABA-432f-A952-24BABA556850}"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;config&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;installType&amp;gt;Remove&amp;lt;/installType&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;productCode&amp;gt;{F7924949-7D0A-47E5-B133-AD2CC5C081F4}&amp;lt;/productCode&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uiLevel&amp;gt;msiUILevelDefault&amp;lt;/uiLevel&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/config&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/task&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tasks&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/activation&amp;gt;&lt;BR&gt;&amp;lt;/manifest&amp;gt; 
&lt;HR height="1"&gt;

&lt;P&gt;The one glaring&amp;nbsp;mess-up (uhum... miss-up) is that unlike the Install action, there is no provision to pass propertyValues to the Remove action! There are two things that need to be done for the UAB MSI uninstall or rather the remove action to recognize the various property values being passed.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Modify the MsiProcessor.cs&lt;/STRONG&gt; found in Microsoft.ApplicationBlocks.Updater.ActivationProcessors (aka ActivationProcessors project)&lt;BR&gt;Modify the RemoveProduct(...) to include the follow bits of code&lt;BR&gt;&lt;FONT size=2&gt;
&lt;P&gt;...&lt;BR&gt;session = installer.OpenProduct( productCode );&lt;BR&gt;&lt;/FONT&gt;&lt;EM&gt;&lt;FONT size=2&gt;propertyValuePairs = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;.GetPropertValuePairs(propertyValues);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; i = 0; i &amp;lt; propertyValuePairs.Length; i++)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;[] parts = propertyValuePairs[i].Split(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;'='&lt;/FONT&gt;&lt;/EM&gt;&lt;FONT size=2&gt;&lt;EM&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;EM&gt;session.set_Property(parts[0], parts[1]);&lt;BR&gt;}&lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;session.DoAction( &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"INSTALL"&lt;/FONT&gt;&lt;FONT size=2&gt; );&lt;BR&gt;...&lt;BR&gt;&lt;BR&gt;And, in the same class put in the definition for parsing the property values&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;[] GetPropertValuePairs(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; propertyValues)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;[] propertyValuePairs = propertyValues.Split(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;' '&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; propertyValuePairs;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;EM&gt;&lt;STRONG&gt;If this doesn't make much sense the full code is attached along&amp;nbsp;this post!&amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Modify the Manifest&lt;/STRONG&gt; to include the propertyValues tag&lt;BR&gt;Once the MsiProcessor is modified, we need to tag a tag to the manifest so that we will be able to pass on the property to the msiexec.exe process which actually hadles all requests for MSI actions. (Again, refer the RemoveManifest.xml attached in this mail)&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;That's all folks... you are up and running.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3565330" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/nikhiln/attachment/3565330.ashx" length="3727" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Setup+and+Deployment/default.aspx">Setup and Deployment</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/MSI/default.aspx">MSI</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/UAB/default.aspx">UAB</category></item><item><title>Detecting Session Timeout in ASP.NET 2.0 Web Applications</title><link>http://blogs.msdn.com/nikhiln/archive/2007/06/21/detecting-session-timeout-in-asp-net-2-0-web-applications.aspx</link><pubDate>Thu, 21 Jun 2007 16:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3443782</guid><dc:creator>nikhiln</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/3443782.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=3443782</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=3443782</wfw:comment><description>&lt;P&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt; An ASP.NET 2.0 web application needs to detect a session timeout condition so that the user can be redirected to a different page and / or an error message is displayed.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt; There are three ways of approaching this problem, starting off with the simplest one to the most complicated one. So, here it goes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Using Session["xxx"] value to determine the session timeout:&lt;/STRONG&gt; This is a &lt;EM&gt;"quick and dirty"&lt;/EM&gt; hack that can be introduced into an application to figure out whether a timeout has occured. We need to do two things here. &lt;BR&gt;&lt;EM&gt;First, in Global.asax, create your own GUID and put it in the session object,&lt;/EM&gt;&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&lt;/FONT&gt;&lt;FONT size=2&gt; Session_Start(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;EventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Code that runs when a new session is started&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session["CustomSessionId"] = &lt;FONT color=#2b91af size=2&gt;Guid&lt;/FONT&gt;&lt;FONT size=2&gt;.NewGuid();&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;EM&gt;&lt;BR&gt;Second&lt;/EM&gt;, BasePage.cs which would have inherited Page, in PageLoad() event, check whether the Session["CustomSessionId"] == null, if it&amp;nbsp;IS null, it means that the session was timed-out and AspNet runtime cleared it out.&lt;FONT size=2&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt;( Session[&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"CustomSessionId"&lt;/FONT&gt;&lt;FONT size=2&gt;] == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"TimeoutPage.htm"&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Using a combination of Session.IsNewSession and Request.Cookies collection:&lt;/STRONG&gt; Leveraging the behavior of ASP.NET runtime, we can check whether the Session.IsNewSession flag is true, if its true and we find that &lt;FONT size=2&gt;Request.Cookies[&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"ASP.NET_SessionId"&lt;/FONT&gt;&lt;FONT size=2&gt;] has a valid value, it means that a timeout occured and a new request was generated by the runtime. This code fragment can be inserted into the OnInit(...) method in the BasePage class so that it applies across the application.&lt;BR&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/P&gt;
&lt;P&gt;protected&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; OnInit(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;EventArgs&lt;/FONT&gt;&lt;FONT size=2&gt; e)&lt;BR&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; base&lt;/FONT&gt;&lt;FONT size=2&gt;.OnInit(e);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; (Context.Session != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//check whether a new session was generated&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/FONT&gt;&lt;FONT size=2&gt; (Session.IsNewSession)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//check whether a cookies had already been associated with this request&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;HttpCookie&lt;/FONT&gt;&lt;FONT size=2&gt; sessionCookie = Request.Cookies[&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"ASP.NET_SessionId"&lt;/FONT&gt;&lt;FONT size=2&gt;];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; (sessionCookie != &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; sessionValue = sessionCookie.Value;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; (!&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;.IsNullOrEmpty(sessionValue))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#008000 size=2&gt;// we have session timeout condition!&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Response.Redirect("SessionTimeout.htm");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;Session[&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"IsSessionTimeOut"&lt;/FONT&gt;&lt;FONT size=2&gt;] = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT size=2&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;FONT color=red&gt;&lt;EM&gt;&lt;STRONG&gt;WARNING&lt;/STRONG&gt;:- We will have to wireup the&amp;nbsp;"&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; Session_Start(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt; sender, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;EventArgs&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT color=#000000&gt; e)&lt;/FONT&gt;&lt;/FONT&gt;" method in the Global.asax to use the Session.IsNewSession meaningfully. ASP.NET 2.0 runtime is a bit weird in the sense that it will always return the value of Session.IsNewSession as true in case the Event is not wireup!&lt;/EM&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Using HTTP Module:&lt;/STRONG&gt; Arguably the most complex but robust way to tackle this situation. I would rather not go into this as this carries the risk of opening security holes in the HTTP stream&lt;/P&gt;&lt;/LI&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/OL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3443782" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Web+Application/default.aspx">Web Application</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Session/default.aspx">Session</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/ASP.NET+2.0/default.aspx">ASP.NET 2.0</category></item><item><title>Creating the Other People (aka AddressBook) Certificate Store through Registry</title><link>http://blogs.msdn.com/nikhiln/archive/2007/05/04/creating-the-other-people-aka-addressbook-certificate-store-through-registry.aspx</link><pubDate>Fri, 04 May 2007 15:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2409679</guid><dc:creator>nikhiln</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nikhiln/comments/2409679.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nikhiln/commentrss.aspx?PostID=2409679</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nikhiln/rsscomments.aspx?PostID=2409679</wfw:comment><description>&lt;P&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt; A common scenario while installing application which consume certificates from the Other People store (or AddressBook in registry terms) is the failure of CertMgr.exe on a clean machine which doesn't have any other certificates. Now the problem will be, for a clean machine which doesn't already have the Other People store,&amp;nbsp;when we are trying to install the certificate using CertMgr.exe it would fails with an error stating that the store specified is not found! The typical solution listed will be &lt;EM&gt;"Open Internet Explorer | Internet Options, flip to the Content tab and press the Certificates button. Click the Other People tab and press the Import button to continue". &lt;/EM&gt;But in case of an automated installation, this obviously is not the answer!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Solution:&lt;/STRONG&gt; Using .NET registry API or if you are authoring the setup in WiX, through the Regitry action, create the following key in registry which should then allow you to execute CertMgr.exe to import the certificate at the AddressBook store.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AddressBook&lt;/EM&gt; &lt;/P&gt;
&lt;P&gt;This will create the Other People store which will be visible in MMC Certificates Snap-in. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2409679" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Setup+and+Deployment/default.aspx">Setup and Deployment</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/CertMgr/default.aspx">CertMgr</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Certificates/default.aspx">Certificates</category><category domain="http://blogs.msdn.com/nikhiln/archive/tags/Registry/default.aspx">Registry</category></item></channel></rss>