<?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>Jigar Mehta's Blog</title><link>http://blogs.msdn.com/b/jigarme/</link><description /><dc:language>en</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Symantec and Microsoft working together on SharePoint Interoperability</title><link>http://blogs.msdn.com/b/jigarme/archive/2010/12/14/symantec-and-microsoft-working-together-on-sharepoint-interoperability.aspx</link><pubDate>Mon, 13 Dec 2010 20:49:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10104276</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=10104276</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2010/12/14/symantec-and-microsoft-working-together-on-sharepoint-interoperability.aspx#comments</comments><description>&lt;p&gt;Its been quite some time I updated this blog. Have been busy at work, and working on something which may not interest you if I had put it here (Just to summarize 2 years of work in a sentence, I worked on creating tools and framework used internally by various Microsoft divisions for creating Protocol Documentation found &lt;a href="http://msdn.microsoft.com/en-us/library/cc307432(v=office.12).aspx" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/cc339473(v=office.12).aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/cc313105(v=office.12).aspx" target="_blank"&gt;here&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;But now, I am back to a job profile which includes some customer interactions. So, I will try to keep this blog updated with the work we (“Office Interoperability Team”) are doing here. It is possible some of the blog posts are cross posting of our &lt;a href="http://blogs.msdn.com/b/officeinteroperability/" target="_blank"&gt;team blog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Recently we worked with Symantec and posted some information about our interaction with them. Read complete blog post &lt;a href="http://blogs.msdn.com/b/officeinteroperability/archive/2010/12/13/symantec-and-microsoft-working-together-on-sharepoint-interoperability.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10104276" width="1" height="1"&gt;</description></item><item><title>Removing songs from disk with Rating 1 in SongBird.</title><link>http://blogs.msdn.com/b/jigarme/archive/2009/04/27/removing-songs-from-disk-with-rating-1-in-songbird.aspx</link><pubDate>Mon, 27 Apr 2009 04:21:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9570048</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=9570048</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2009/04/27/removing-songs-from-disk-with-rating-1-in-songbird.aspx#comments</comments><description>&lt;p&gt;&lt;font size="1"&gt;Note: This is a simple ‘Week-end adventure’, to make a tedious task into automated, fast and reliable one. The output may not be completely bug free.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Problem Description:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;I have ‘a lot’ of songs in my media library and I use &lt;a href="http://getsongbird.com/" target="_blank"&gt;SongBird&lt;/a&gt; player to listen to them. There are some ‘Not so good’ songs in the library too, which I never like to listen and dont want SongBird to repeat it ever in future. I wanted to pick all such songs and delete them from my library (from the file system actually) so no media player can play them again! &lt;img alt="Happy" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif" /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Options:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Listen to each and every song and delete them from disk manually (play from windows explorer and delete if song is bad – repeat this for all songs)!      &lt;ul&gt;       &lt;li&gt;Not possible. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Find a media player which allows to delete song from disk, in one click, from within the media player UI.      &lt;ul&gt;       &lt;li&gt;I am so addicted to SongBird, can’t move to something else. One of the major reasons I am stuck with SongBird is native Last.fm integration. So, this was not feasible for me. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Play songs in SongBird, when any bad song is played, mark the song with Rating 1, move to next song and periodically delete all such songs with Rating = 1.      &lt;ul&gt;       &lt;li&gt;I could update my playlist to exclude Rating 1 song (I use &lt;a href="http://swik.net/Ubuntu/Only+Ubuntu/Howto+Create+Smart+Playlists+in+Songbird/b68dz" target="_blank"&gt;Smart Playlist&lt;/a&gt; in SongBird to do this.. - so from the time when song is marked with 1 rating and its actually deleted, its never played!) &lt;/li&gt;        &lt;li&gt;This way, I will not have to spend too much time while actually listening to the song. All I do is, when a song is played (from the playlist), if I don’t like it, I would just set the rating to 1. &lt;/li&gt;        &lt;li&gt;This way, if I mark the song with Rating = 1 on my iPod, it will be deleted periodically too!          &lt;ul&gt;           &lt;li&gt;The way it works is, I mark the song as rating 1 in iPod, sync the iPod with iTunes and next time I start SongBird, it imports iTunes library with all the ratings! Happy happy &lt;img alt="Happy" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif" /&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So, last option from list above, seemed the best. But missing part was “Periodically delete all songs with rating 1”, how to do that!. I searched in SongBird help and closest I could find was,&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Sort Library view in Ascending order of rating. [So, all rating one songs are listed together] &lt;/li&gt;    &lt;li&gt;Right click on each and every such song and click on “Show File”. This will open Explorer window where you can see the actual MP3/WAV/MP4 file and hit delete key. &lt;/li&gt;    &lt;li&gt;Once its deleted from disk, delete the song from library too (this step is completely optional, but if you like things clean, you would like to do that). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Imagine 52 songs with rating 1 are to be processed, above procedure would take at least 6 minutes, and make me so bored that I will need a coffee. That was the birth of my wish to create a small utility / script that goes through the songbird library and deletes all rating 1 songs. So, I started the research…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;First task was to find out where SongBird stores the data about the library (where it stores that xyz song has 1 rating and file on disk for that song is at abc path).      &lt;ul&gt;       &lt;li&gt;I started the procmon tool, set the filter to give me data about only songbird.exe process and set rating for a song to 1. This made songbird write to a .db file in my Appdata\Roaming\. &lt;/li&gt;        &lt;li&gt;I went to the location (C:\Users\&amp;lt;username&amp;gt;\appdata\Roaming\Songbird2\Profiles\&amp;lt;randomID&amp;gt;.default\db\main@library.songbirdnest.com.db) and opened the file in notepad. &lt;/li&gt;        &lt;li&gt;From the signature (first few bytes of the file – which read as, “SQLite format 3”) of the file, I could see that songbird stores the data in a SQLite Database. &lt;/li&gt;        &lt;li&gt;I wanted to see what is the schema of the database in order to see if it is technically feasible to do what I wanted to. I searched for a free GUI based SQLite Database Viewer tool and found SQLite Administrator &lt;a href="http://sqliteadmin.orbmu2k.de/" target="_blank"&gt;here&lt;/a&gt;. What an awesome tool. Anyways, I saw that a table called, “media_items” stored basic details about all the songs. &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_thumb.png" width="869" height="280" /&gt;&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;“content_url” field stores URL of the song (in whacky style – URL style, but that can be dealt later), table has primary key of media_item_id. &lt;/li&gt;        &lt;li&gt;This table does not store Rating information yet. So, I continued my search. Reverse Engineering how they store Rating information was a little bit tricky but I found success after fondling for some time. &lt;/li&gt;        &lt;li&gt;Next table, I found interesting was “Properties”, &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_thumb_1.png" width="716" height="287" /&gt;&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;Though this table did not store much of data, but looked like it property_id will be referenced by some other table. So, in my case, Number 28 in Property_ID field was important to me. I wrote it down in scratch pad and continued my search. &lt;/li&gt;        &lt;li&gt;The one that actually stored the rating information was “Resource_Properties”. When I looked at it first time, it did not look like it had, but then in depth review said something more! &lt;img alt="Happy" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif" /&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_thumb_3.png" width="669" height="435" /&gt;&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;So, with this, I got all the information that I wanted. The conclusion was,          &lt;ul&gt;           &lt;li&gt;Query all the rows from resource_properties with property_id = 28 AND obj=1 AND obj_searchable=1 AND obj_sortable=1 &lt;/li&gt;            &lt;li&gt;For all such records, pick media_item_id number and query media_items table for that media, get the content_url for that song, and go to the file system and DELETE it! &lt;img alt="Happy" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif" /&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So, here came another set of choices. Where to write this code so that it is fast, flexible (change can be done without much hassle), simple. I had few choices.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;C# (Use the power of .NET)      &lt;ul&gt;       &lt;li&gt;I would love to write code in C# for this, but few problems I could see,          &lt;ul&gt;           &lt;li&gt;Deployment (if I had to give this to somebody else, they have to have .net framework 3.5 – if i’d use LINQ/System.core, and I’d have to deploy all the client libraries such as reading SQLite libraries or any other third parties – I did not want to get into that mess) &lt;/li&gt;            &lt;li&gt;Changing just small thing would need me to recompile &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Batch Script      &lt;ul&gt;       &lt;li&gt;I’ve been learning few advanced batch script techniques at work to make keep my life away from hell. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Songbird AddOn (more info &lt;a href="http://addons.songbirdnest.com/" target="_blank"&gt;here&lt;/a&gt;)       &lt;ul&gt;       &lt;li&gt;This would take lot of time because I dont know what language they are written. I rejected this option right away. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After a few minutes of thoughts, I chose Batch script to be the way to go. The task was though, if it’d been .NET I could have found some client library to access database. I had to find something similar for command line or write a small tool that does SQLite part and returns the output! Here’s how the research went.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I searched for a tool that can interact with SQLite databases from command line. And I got sqlite3.exe from &lt;a href="http://www.sqlite.org/sqlite.html" target="_blank"&gt;here&lt;/a&gt;. Played with this tool and found that I can actually open a sqlite database and query tables from command line!! How great! But the problem was, I had to do everything from SQLite shell, which looked something as follows. Yellow highlighted rectangles shows shell prompt where one can enter commands and get output, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_thumb_5.png" width="681" height="264" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;So, from batch file, this would be of no use if I had to automate it 100% (because a batch script can not enter input into some other shell!). &lt;/li&gt;    &lt;li&gt;I continued my research to see if there was anyway sqlite.exe could take all the commands from command line or may be input file and give me output without entering into its shell (only then it was useful for my purpose of calling it from batch script.) &lt;/li&gt;    &lt;li&gt;And I found something from a webpage, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/RemovingsongsfromdiskwithRating1inSongB_EA31/image_thumb_6.png" width="378" height="108" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Above looked promising to me. So, I went ahead to solve another big problem. &lt;/li&gt;    &lt;li&gt;Next problem was to convert URL styled paths to normal paths which DOS understands. I knew the formula to convert them but I wanted to automate them. While searching for command line search-replace utility, I found ssr.exe &lt;a href="http://www.programmersheaven.com/download/41236/download.aspx" target="_blank"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;That was all I needed from outside. I took all these things and developed a final batch script that does the task for me, which is as follows, &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Code for Batch Script:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:18c25f2c-13c9-47dd-8ad0-2904d53af2b3" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#F9F9F9;overflow: auto;;font-family:Courier New;font-size:9.75"&gt;&lt;span style="color: #0000FF;"&gt;@echo&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;off&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #008000;"&gt;REM&lt;/span&gt;&lt;span style="color: #008000;"&gt; Generate Songs.csv file&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;sqlite3 &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;C:\Users\Jigar Mehta\appdata\Roaming\Songbird2\Profiles\dv86zu0s.default\db\main@library.songbirdnest.com.db&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;select media_item_id, content_url from media_items&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv

&lt;/span&gt;&lt;span style="color: #008000;"&gt;REM&lt;/span&gt;&lt;span style="color: #008000;"&gt; Convert URL style path to file system path&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;ssr &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;file:///&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt; Songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv
ssr &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;\\&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; Songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv
ssr &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;%%20&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; Songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv
ssr &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; Songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv

&lt;/span&gt;&lt;span style="color: #008000;"&gt;REM&lt;/span&gt;&lt;span style="color: #008000;"&gt; Query Songbird database for All Songs with Rating = 1, and write path to all such files to a temporary file&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;sqlite3 &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;C:\Users\Jigar Mehta\appdata\Roaming\Songbird2\Profiles\dv86zu0s.default\db\main@library.songbirdnest.com.db&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;select * from resource_properties where obj like '1' AND obj_searchable like '1'&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; | findstr &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;|28|&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; tobeDeleted&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;exist&lt;/span&gt;&lt;span style="color: #000000;"&gt; tobedeleted&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;F &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;delims=|&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; %%i in &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;tobeDeleted&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt; songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv | findstr &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;^%%i,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; deleteList&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;

&lt;/span&gt;&lt;span style="color: #008000;"&gt;REM&lt;/span&gt;&lt;span style="color: #008000;"&gt; Actually DELETE the file from the disk.&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;exist&lt;/span&gt;&lt;span style="color: #000000;"&gt; deletelist&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;F &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;tokens=2 delims=,&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; %%j in &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;deleteList&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;echo&lt;/span&gt;&lt;span style="color: #000000;"&gt; Deleting  :  %%j
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;del&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;%%j&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;

&lt;/span&gt;&lt;span style="color: #008000;"&gt;REM&lt;/span&gt;&lt;span style="color: #008000;"&gt; Remove temporary files created during the process.&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;exist&lt;/span&gt;&lt;span style="color: #000000;"&gt; deletelist&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;del&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Q deleteList&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; nul &lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;exist&lt;/span&gt;&lt;span style="color: #000000;"&gt; tobeDeleted&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;del&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Q tobeDeleted&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;txt &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; nul &lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;exist&lt;/span&gt;&lt;span style="color: #000000;"&gt; songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;del&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Q songs&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;csv &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; nul &lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I have uploaded all the files (Batch script + Other tools like sqlite3.exe and ssr.exe used by batch script). Please download them from here.&lt;/p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-dd7841dfb6968535.skydrive.live.com/embedrowdetail.aspx/Public/SongBird.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p&gt;If you want to use the script, please make sure you change path to your database file in the batch script. HTH,&lt;/p&gt;

&lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9570048" width="1" height="1"&gt;</description></item><item><title>2 years.. and counting!</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/08/01/2-years-and-counting.aspx</link><pubDate>Fri, 01 Aug 2008 16:57:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8799861</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8799861</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/08/01/2-years-and-counting.aspx#comments</comments><description>&lt;p&gt;Yes, today I finish 2 years working with &lt;a href="http://microsoft.com" target="_blank"&gt;my Dream company&lt;/a&gt;! Its been great journey so far, and I guess company has given me everything that I ever dreamed for (except night job, but efforts are in motion to find some resolution to that! &lt;img alt="Happy" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif" /&gt;)&lt;/p&gt;  &lt;p&gt;On development side, If I retrospect, I find that I have learned so many things in past two years&amp;#160; that I had not in 5 before! &lt;/p&gt;  &lt;p&gt;Thanks Microsoft.&lt;/p&gt;  &lt;p&gt;PS: Apologize for not writing blog posts actively from quite some time, actually I am busy these days with something which I have to focus on right now, will share more details after its right time to do so!&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8799861" width="1" height="1"&gt;</description></item><item><title>Look at the operating system version and SP details from the dump in WinDbg..</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/06/04/look-at-the-operating-system-version-and-sp-details-from-the-dump-in-windbg.aspx</link><pubDate>Tue, 03 Jun 2008 21:50:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8571965</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8571965</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/06/04/look-at-the-operating-system-version-and-sp-details-from-the-dump-in-windbg.aspx#comments</comments><description>&lt;p&gt;This is a very common question, we encounter almost all the times.&lt;/p&gt;  &lt;p&gt;Just imagine a situation, we have got a memory dump from somewhere and want to see what operating system which is run there and what SP is installed.. For this, there is a very simple command.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New" size="2"&gt;0:001&amp;gt;&lt;font color="#ff0000"&gt;vertarget&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New" size="2"&gt;Windows Server 2003 Version 3790 (Service Pack 2) MP (4 procs) Free x86 compatible       &lt;br /&gt;Product: Server, suite: TerminalServer SingleUserTS        &lt;br /&gt;kernel32.dll version: 5.2.3790.4062 (srv03_sp2_gdr.070417-0203)        &lt;br /&gt;Debug session time: Tue Oct 30 05:54:21.000 2007 (GMT+5)        &lt;br /&gt;System Uptime: 3 days 8:21:53.750        &lt;br /&gt;Process Uptime: 0 days 4:28:05.000        &lt;br /&gt;&amp;#160; Kernel time: 0 days 0:00:34.000        &lt;br /&gt;&amp;#160; User time: 0 days 0:09:37.000&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8571965" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/WinDbg/">WinDbg</category><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/Debugging/">Debugging</category></item><item><title>How to change value of register when doing live debugging with Windbg?</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/06/04/how-to-change-value-of-register-when-doing-live-debugging-with-windbg.aspx</link><pubDate>Tue, 03 Jun 2008 21:46:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8571951</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8571951</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/06/04/how-to-change-value-of-register-when-doing-live-debugging-with-windbg.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Windbg has not only registers reading functionality but it can also modify registers when doing live debugging..&lt;/p&gt;  &lt;p&gt;Its really useful sometimes to modify the register values and take different path to check for particular code branch..&lt;/p&gt;  &lt;p&gt;You can modify the register value like this..&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;0:000&amp;gt;&lt;font color="#ff0000"&gt;r @eax=0x80040005&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Above command will modify value of register eax and set it to 0x80040005.&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8571951" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/WinDbg/">WinDbg</category><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/Debugging/">Debugging</category></item><item><title>Collection of SysInternal Tools</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/05/30/collection-of-sysinternal-tools.aspx</link><pubDate>Thu, 29 May 2008 22:38:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8559828</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8559828</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/05/30/collection-of-sysinternal-tools.aspx#comments</comments><description>&lt;p&gt;The team has just released a new subdomain that has neat and clean list of all SysInternal Tools, ready for you!!&lt;/p&gt;  &lt;p&gt;Take a look,   &lt;br /&gt;&lt;a href="http://live.sysinternals.com"&gt;http://live.sysinternals.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8559828" width="1" height="1"&gt;</description></item><item><title>Visual Studio 2008 SP1 Beta is available!!</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/05/28/visual-studio-2008-sp1-beta-is-available.aspx</link><pubDate>Tue, 27 May 2008 21:29:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8555276</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8555276</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/05/28/visual-studio-2008-sp1-beta-is-available.aspx#comments</comments><description>&lt;p&gt;I've been using Visual Studio 2008 from few months.. Its really a great improvement over productivity.. I love new features and speedy IDE. Service Pack 1 for Visual Studio 2008 contains not only bug fixes but also lots of new features! Along with .NET Framework 3.5 SP1 beta, VS2008 SP1 beta has been released few days ago. I just installed it on all my machines!&lt;/p&gt;  &lt;p&gt;If you want to download it, refer to following links,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8C36ACA4-E947-4760-9B05-93CAC04C6F87&amp;amp;displaylang=en" target="_blank"&gt;.NET Framework 3.5 Service Pack 1 Beta&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=CF99C752-1391-4BC3-BABC-86BC0B9E8E5A&amp;amp;displaylang=en" target="_blank"&gt;Visual Studio 2008 Service Pack 1 Beta&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After you install it, following may be few useful links,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" target="_blank"&gt;List of features added in Service Pack 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="https://connect.microsoft.com/VisualStudio" target="_blank"&gt;Provide Feedback or Report Bugs&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://vs2008sp1docs.msdn.microsoft.com/" target="_blank"&gt;MSDN Documentation for Visual Studio 2008 Service Pack 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=2136&amp;amp;SiteID=1" target="_blank"&gt;Discuss with Community (Forum)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Happy coding!&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8555276" width="1" height="1"&gt;</description></item><item><title>What is better way of keeping an eye on last win32 error while debugging?</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/what-is-better-way-of-keeping-an-eye-on-last-win32-error-while-debugging.aspx</link><pubDate>Thu, 08 May 2008 20:26:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8473045</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8473045</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/what-is-better-way-of-keeping-an-eye-on-last-win32-error-while-debugging.aspx#comments</comments><description>&lt;p&gt;I have found it necessary many times to keep an eye on last win32 error, while using Win32 APIs in code! (Calling GetLastError() after each API usage is not feasible solution!).. In Visual Studio they have provided a very good small feature. You can write @err,hr in the watch window,&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/Whatisbetterwayofkeepinganeyeonlastwin32_14293/05-08-2008%20(225206)_4.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="81" alt="05-08-2008 (225206)" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/Whatisbetterwayofkeepinganeyeonlastwin32_14293/05-08-2008%20(225206)_thumb_1.jpg" width="795" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Similarly, you can use another pseudo register @eax for keeping an eye on the function return value! (If you are looking at some Win32 API's return value, you can also do @eax,hr to find out the text message behind the integer..)&lt;/p&gt;  &lt;p&gt;Sometimes these small debugging tips increase significant debugging speed..&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8473045" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/Debugging/">Debugging</category></item><item><title>How can I check the details about Process Token while debugging in Visual Studio?</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/how-can-i-check-the-details-about-process-token-while-debugging-in-visual-studio.aspx</link><pubDate>Thu, 08 May 2008 20:04:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8472901</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8472901</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/how-can-i-check-the-details-about-process-token-while-debugging-in-visual-studio.aspx#comments</comments><description>&lt;p&gt;Visual Studio 2005 onwards, watch window has got a pseudo register for investigating the details about process token. So, all you have to do is, just start debugging and write &amp;quot;$user&amp;quot; in watch window,&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/HowcanIcheckthedetailsaboutProcessTokenw_13D78/05-08-2008%20(223012)_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="216" alt="05-08-2008 (223012)" src="http://blogs.msdn.com/blogfiles/jigarme/WindowsLiveWriter/HowcanIcheckthedetailsaboutProcessTokenw_13D78/05-08-2008%20(223012)_thumb.jpg" width="794" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Its interesting to look at expanded view of privileges and groups sometimes!&lt;/p&gt;  &lt;p&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8472901" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/Debugging/">Debugging</category></item><item><title>CoCreateInstance returns 0x80080005 for Visual Studio 2008 based ATL service??</title><link>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/cocreateinstance-returns-0x80080005-for-visual-studio-2008-based-atl-service.aspx</link><pubDate>Thu, 08 May 2008 04:37:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8468254</guid><dc:creator>Jigar-Mehta MSFT</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jigarme/rsscomments.aspx?WeblogPostID=8468254</wfw:commentRss><comments>http://blogs.msdn.com/b/jigarme/archive/2008/05/08/cocreateinstance-returns-0x80080005-for-visual-studio-2008-based-atl-service.aspx#comments</comments><description>&lt;p&gt;I just worked with a customer who was facing interesting issue. He was getting 0x80080005 at client when he calls CoCreateInstance. The COM component is implemented within an ATL Service which is running on the same machine (we are not hitting wire/network). Now, typical meaning of this error is,&lt;/p&gt;  &lt;p&gt;CO_E_SERVER_EXEC_FAILURE&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;#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; winerror.h   &lt;br /&gt;Server execution failed&lt;/p&gt;  &lt;p&gt;Generally this means Server (out of process server, either stand alone EXE or service) did not respond to RPCSS within definite time about COM server's successful start. Many things could have happened (may be Server got some exception/error, or server got crashed!)&lt;/p&gt;  &lt;p&gt;But in this case, even if I start the service before making call from client, I get same response from client. Something else was wrong! And after lots of checks here and there, we found out that it is a BUG!&lt;/p&gt;  &lt;p&gt;The bug shows up when,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You create a brand new ATL Service project using Wizard with Visual Studio 2008.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The root cause is, newly generated CoClass's rgs file (that holds the component registration information) doesn't contain entry for AppID. So, even if you register the COM component (using &amp;lt;exename.exe&amp;gt; /service), you dont get AppID key generated for CoClass. And COM runtime returns this error at client.&lt;/p&gt;  &lt;p&gt;To fix it,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Look at your rgs file (for each ATL simple objects you added to COM service project),&lt;/li&gt;    &lt;li&gt;     &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;Replace snippet looking similar to following,           &lt;br /&gt;&lt;/font&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; ForceRemove {9ACB97C6-4492-40E8-A1BD-51DFE8962E92} = s 'CMyObject Class'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; ProgID = s 'ATLComService.CMyObject.1'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; VersionIndependentProgID = s 'ATLComService.CMyObject'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; ForceRemove 'Programmable'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; LocalServer32 = s '%MODULE%'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; 'TypeLib' = s '{E423A7DE-58C7-4535-A864-395DCEDE941F}'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: #1f497d; font-family: &amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana" color="#333333"&gt;with&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ForceRemove {9ACB97C6-4492-40E8-A1BD-51DFE8962E92} = s 'CMyObject Class'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; ProgID = s 'ATLComService.CMyObject.1'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; VersionIndependentProgID = s 'ATLComService.CMyObject'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; ForceRemove 'Programmable'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; LocalServer32 = s '%MODULE%'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; &lt;span style="background: yellow"&gt;val AppID = s '%APPID%'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&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; 'TypeLib' = s '{E423A7DE-58C7-4535-A864-395DCEDE941F}'&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;There is also another way to permanently fix this issue (Product Team is planning to fix this issue in Visual Studio 2008 SP1), you can also,&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;Go to &lt;font color="#1f497d"&gt;C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\CodeWiz\ATL\Simple\Templates\1033\object.rgs&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;    &lt;li&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;Add following line right before statement for &amp;quot;typelib&amp;quot;                 &lt;br /&gt;                  &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;[!if APPID_EXIST]&lt;/span&gt;&lt;/p&gt;                  &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&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;#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; val AppID = s '[!output APPID_REGISTRY_FORMAT]'&lt;/span&gt;&lt;/p&gt;                  &lt;p class="MsoNormal"&gt;&lt;span style="color: #1f497d"&gt;[!endif]&lt;/span&gt;&lt;/p&gt;               &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana"&gt;             &lt;p&gt;&lt;span style="color: #1f497d"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana" color="#333333"&gt;That should fix the issue.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;              &lt;p&gt;&lt;span style="color: #1f497d"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;"&gt;&lt;font face="Verdana" color="#333333"&gt;Stay tuned.. &lt;img alt="Wave" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif" /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;           &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8468254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jigarme/archive/tags/COM/">COM</category></item></channel></rss>