<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2513751741660765205</id><updated>2012-01-17T11:19:20.990-08:00</updated><category term='SharePoint 2010 Mobile'/><category term='Blogger iPhone App'/><category term='COM Error'/><title type='text'>DigiOz Programming Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-725796710409465285</id><published>2011-12-14T10:11:00.000-08:00</published><updated>2011-12-14T10:18:45.621-08:00</updated><title type='text'>Serialize and Deserialize Objects in C# Revised</title><content type='html'>I wrote a blog entry a few years back about this topic, and I have since been asked to rewrite the Serialize and Deserialize Functions to support any type of object. Here is how one can Serialize/Deserialize objects using boxing in C#:&lt;br /&gt;&lt;br /&gt;Sample Object:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Serializable&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&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;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;FirstName&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;LastName&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;Here are our methods to perform the operations:&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Serializer&lt;/span&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;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;GetString(&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;&amp;nbsp;psMemStream)&lt;br /&gt;&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;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;lsReturn&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&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;psMemStream.Position&amp;nbsp;=&amp;nbsp;0;&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;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;&amp;nbsp;loReader&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;(psMemStream))&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;{&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;lsReturn&amp;nbsp;=&amp;nbsp;loReader.ReadToEnd();&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;}&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;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;lsReturn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;SerializeMessage(&lt;span style="color: #2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;poObject)&lt;br /&gt;&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;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;lsResponse&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;;&lt;br /&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;&lt;span style="color: blue;"&gt;try&lt;/span&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;{&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;&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;&amp;nbsp;loStream&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&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;&lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt;&amp;nbsp;loMessageSerialize&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt;(poObject.GetType());&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;loMessageSerialize.Serialize(loStream,&amp;nbsp;poObject);&lt;br /&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;lsResponse&amp;nbsp;=&amp;nbsp;GetString(loStream);&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;}&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;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;ex)&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;{&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;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;ex;&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;}&lt;br /&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;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;lsResponse;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;DeserializeMessage(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;psObjectXML,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Object&lt;/span&gt;&amp;nbsp;poObject)&lt;br /&gt;&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;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;loResponse&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&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;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;loObject&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;object&lt;/span&gt;();&lt;br /&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;&lt;span style="color: blue;"&gt;try&lt;/span&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;{&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;&lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt;&amp;nbsp;loMessage&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt;(poObject.GetType());&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;loObject&amp;nbsp;=&amp;nbsp;loMessage.Deserialize(&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringReader&lt;/span&gt;(psObjectXML));&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;}&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;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;ex)&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;{&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;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;ex;&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;}&lt;br /&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;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;loObject;&lt;br /&gt;&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;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;When you want to call the above methods, here is how you do it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background: none repeat scroll 0% 0% white; color: black; font-family: Consolas;"&gt;&lt;span style="font-size: x-small;"&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;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;nbsp;loPerson&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&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;loPerson.FirstName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"John"&lt;/span&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;loPerson.LastName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;"Doe"&lt;/span&gt;;&lt;br /&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;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;lsXMLString&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Serializer&lt;/span&gt;.SerializeMessage(loPerson);&lt;br /&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;&lt;span style="color: #2b91af;"&gt;MessageBox&lt;/span&gt;.Show(lsXMLString);&lt;br /&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;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;&amp;nbsp;loPerson2&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Person&lt;/span&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;loPerson2&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;Person&lt;/span&gt;)&lt;span style="color: #2b91af;"&gt;Serializer&lt;/span&gt;.DeserializeMessage(lsXMLString,&amp;nbsp;loPerson2);&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;That's it! Enjoy!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-725796710409465285?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/725796710409465285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=725796710409465285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/725796710409465285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/725796710409465285'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/12/serialize-and-deserialize-objects-in-c.html' title='Serialize and Deserialize Objects in C# Revised'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7215797276079203246</id><published>2011-12-01T11:40:00.000-08:00</published><updated>2011-12-01T11:40:25.515-08:00</updated><title type='text'>Configuring SQL Server Instance for Windows Azure Storage Emulator</title><content type='html'>Let's say you have downloaded the &lt;a href="http://www.microsoft.com/windowsazure/sdk/" target="_blank"&gt;Windows Azure SDK&lt;/a&gt; which installs several Add-on to Visual Studio 2010 and IIS, and includes some Windows Azure Solutions Templates. Now suppose you have created a Windows Azure Solution based on one of these templates, and are trying to debug the solution. The first time you try to debug the solution, you may come across the following message:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="color: red; font-size: x-small;"&gt;Windows Azure Tools: Failed to initialize Windows Azure storage emulator. Unable to start Development Storage. Failed to start Storage Emulator: the SQL Server instance ‘localhost\SQLExpress’ could not be found.&amp;nbsp;&amp;nbsp; Please configure the SQL Server instance for Storage Emulator using the ‘DSInit’ utility in the Windows Azure SDK.&lt;/span&gt;&lt;/blockquote&gt;You will get this message if either of the items below applies to you:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You don't have any SQL Server Installed on your workstation.&amp;nbsp;&lt;/li&gt;&lt;li&gt;You don't have SQL Express installed and have the full version of SQL Installed&lt;/li&gt;&lt;li&gt;You have an older version of SQL Express installed which Azure SDK does not support.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;If item 3 applies to you there is no choice but to install the latest SQL Express version.&amp;nbsp; But if you have the full version of SQL Installed as Default Instance, then you can do the following to fix the issue:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to "Start &amp;gt; All Programs &amp;gt; Accessories", right click on "Command Prompt" and select "Run as Administrator".&lt;/li&gt;&lt;li&gt;Navigate to "C:\Program Files\Windows Azure Emulator\emulator\devstore\" directory by entering "cd [Directory Path]" and hitting Enter.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Enter "DsInit /sqlInstance:." and hit Enter.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;Here is the Window you will see (or a slight variation from it which accomplishes the same thing):&lt;br /&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cLy9BiAe1iM/TtfXqglPJVI/AAAAAAAAALE/8ZjZzSnjJaM/s1600/Azure_SDK_Staging_DB_Error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://2.bp.blogspot.com/-cLy9BiAe1iM/TtfXqglPJVI/AAAAAAAAALE/8ZjZzSnjJaM/s400/Azure_SDK_Staging_DB_Error.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;That's it! You should now be able to rebuild your Azure Solution in Visual Studio 2010 and run it to debug it locally using the Azure Emulators.&lt;br /&gt; &lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia, Inc.&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7215797276079203246?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7215797276079203246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7215797276079203246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7215797276079203246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7215797276079203246'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/12/configuring-sql-server-instance-for.html' title='Configuring SQL Server Instance for Windows Azure Storage Emulator'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-cLy9BiAe1iM/TtfXqglPJVI/AAAAAAAAALE/8ZjZzSnjJaM/s72-c/Azure_SDK_Staging_DB_Error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-8279861082656025679</id><published>2011-11-28T10:36:00.000-08:00</published><updated>2011-11-28T21:50:31.897-08:00</updated><title type='text'>Fetching Remote Data in Salesforce.com using APEX</title><content type='html'>Suppose you need to fetch some data from a remote website inside a Salesforce.com APEX Code. This can be any type of text ranging from text to XML content, which you want to use to perform additional tasks based on. This comes in particularly handy if you need to do some sort of an integration with a Legacy System which cannot produce a structured WSDL Web Service.&lt;br /&gt;&lt;br /&gt;Here is how you can accomplish this:&lt;br /&gt;&lt;br /&gt;1. Create an APEX Class called "HttpCalloutSample", with the following code:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;public class HttpCalloutSample {&lt;br /&gt;&lt;br /&gt;// Pass in the endpoint to be used using the string url &lt;br /&gt;&amp;nbsp; public String getContent(String url) {&lt;br /&gt;&lt;br /&gt;// Instantiate a new http object &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Http h = new Http();&lt;br /&gt;&lt;br /&gt;// Instantiate a new HTTP request, specify the method (GET) as well as the endpoint&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpRequest req = new HttpRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.setEndpoint(url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; req.setMethod('GET');&lt;br /&gt;&lt;br /&gt;// Send the request, and return a response&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpResponse res = h.send(req);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return res.getBody();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; public String testContent()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 'Testing ... 1... 2... 3...';&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now let's call this APEX Class using Eclipse Force.com IDE "Execute Anonymous" code block feature (or if you prefer to call it from within an APEX Trigger you can do that too). Your calling code would look something like this: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;HttpCalloutSample loCS = new HttpCalloutSample();&lt;br /&gt;String lsReturnValue = loCS.testContent();&lt;br /&gt;System.debug (lsReturnValue);&lt;br /&gt;lsReturnValue = loCS.getContent('http://www.digioz.com/downloads/vbnet/DigiOz_Distribution_Agreement.txt');&lt;br /&gt;System.debug (lsReturnValue);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;The URL is basically the URL of the content you wish to fetch from the Remote Server. In this case I am using the URL of the Distribution Agreement of one of my open source projects, which is a simple text file containing some text. The first time you execute the code, you will see this error:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_yfWjJPH46Q/TtPTPGhKZ4I/AAAAAAAAAK0/dNv3nWM41ks/s1600/fetch_remote_content_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://4.bp.blogspot.com/-_yfWjJPH46Q/TtPTPGhKZ4I/AAAAAAAAAK0/dNv3nWM41ks/s400/fetch_remote_content_1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is because by default Salesforce.com blocks accessing remote websites. We can fix this by going to "Setup &amp;gt; Security Controls &amp;gt; Remote Site Settings" in Salesforce, and add an Exception for our Remote site:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-o7LoTT8KwqE/TtPTtPltOzI/AAAAAAAAAK8/Ti5zPmJU97M/s1600/fetch_remote_content_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-o7LoTT8KwqE/TtPTtPltOzI/AAAAAAAAAK8/Ti5zPmJU97M/s640/fetch_remote_content_2.png" width="450" /&gt;&lt;/a&gt;&lt;/div&gt;Now when you call that same site URL again, you will be able to access the remote content and fetch the data from it. If you look in your debug log, you will see an entry like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;10:15:31.238 (238577000)|USER_DEBUG|[5]|DEBUG|Definition of Freeware &lt;br /&gt;&lt;br /&gt;Freeware distribution gives users a chance to try software and continue to us ... (the rest of the content)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hope others find this blog entry helpful.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia, Inc.&lt;br /&gt;www.digioz.com&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-8279861082656025679?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/8279861082656025679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=8279861082656025679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8279861082656025679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8279861082656025679'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/11/fetching-remote-data-in-salesforcecom.html' title='Fetching Remote Data in Salesforce.com using APEX'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_yfWjJPH46Q/TtPTPGhKZ4I/AAAAAAAAAK0/dNv3nWM41ks/s72-c/fetch_remote_content_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-4436594287937604751</id><published>2011-09-27T09:35:00.000-07:00</published><updated>2011-09-27T09:35:56.886-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='COM Error'/><title type='text'>Retrieving the COM class factory for component failed due to the following error: 80040154</title><content type='html'>Despite the fact that COM Components are considered legacy technology now, because Microsoft never made a clear cut decision to retire COM Components in newer versions of their Operating System these Libraries still linger around in many Applications, and have made their way into many .NET based Applications through DLL Referencing. Here is an error I have come across from time to time that doesn't tell you a whole lot unfortunately:&lt;br /&gt;&lt;br /&gt;Retrieving the COM class factory for component with CLSID {XXXXXXXX-XX...} failed due to the following error: 80040154&lt;br /&gt;&lt;br /&gt;There are several ways to resolve this issue. Here is a short list:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Modify your project's platform from 'Any CPU' to 'X86' in Project Properties, Build/Platform's Target in Visual Studio&lt;/li&gt;&lt;li&gt;If your Application is a Web-Based Application, try setting IIS to run in 32-bit mode. You can do this by going to IIS Manager, selecting the Application Pool, then choosing "Advanced Settings". The second option from the top is "Enable 32-bit Applications".&lt;/li&gt;&lt;li&gt;If your Application is Web-Based, it could be that the com object was not configured to allow launch and access permissions for the aspnet user identity. Under administrative tools &amp;gt; Component services under the tree view, go to Component Services &amp;gt; Computers &amp;gt; My Computer &amp;gt; DCOM Config and find the registered com object. Right click for properties. Under the security tag, customize the Permissions to allow asp.net user&lt;/li&gt;&lt;/ol&gt;Usually one of the above 3 methods solves this problem.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-4436594287937604751?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/4436594287937604751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=4436594287937604751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4436594287937604751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4436594287937604751'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/09/retrieving-com-class-factory-for.html' title='Retrieving the COM class factory for component failed due to the following error: 80040154'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-2845217587751459514</id><published>2011-09-10T12:10:00.001-07:00</published><updated>2011-09-10T19:43:56.880-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger iPhone App'/><title type='text'>Blogger finally got an iPhone App</title><content type='html'>It was only a matter of time I suppose, but Blogger finally got an iPhone App on the App Store. Some features worth mentioning are location detection, upload of pictures from your photo library of your phone or you can take a picture and upload it instantly. Overall it does make it a lot easier to Blog on the Go, so I give it two Thumbs Up!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-2845217587751459514?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/2845217587751459514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=2845217587751459514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/2845217587751459514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/2845217587751459514'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/09/blogger-finally-got-iphone-app.html' title='Blogger finally got an iPhone App'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-6639290727222536678</id><published>2011-08-17T12:07:00.000-07:00</published><updated>2011-08-17T12:14:44.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Mobile'/><title type='text'>Disable SharePoint 2010 Mobile Site</title><content type='html'>SharePoint 2010 has made a huge improvement over the 2007 version, but there are still times when you may want to disable the Mobile version of the site, for example if you wish to have your SharePoint Publishing Site be External Facing. There is no out of box feature for disabling SharePoint 2010 Mobile Site, however there is a quick fix for this. Follow these steps to disable SharePoint 2010 Mobile Site and redirect all traffic to the standard version:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Locate the IIS Directory for the SharePoint Site in Question (for example inetpub/wwwroot/wss/VirtualDirectories/80).&lt;/li&gt;&lt;li&gt;Open the folder "App_Browsers", and open the file "compat.browser" using notepad.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Find all instances of the "isMobileDevice" attribute, and change its value from "true" to "false". So find this:&lt;/li&gt;&lt;/ol&gt;&lt;textarea cols="19" name="textarea" style="width: 332px;" this.select();"=""&gt; &amp;lt;capability name="isMobileDevice" value="true" /&amp;gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Replace it with this:&lt;br /&gt;&lt;br /&gt;&lt;textarea cols="19" name="textarea" style="width: 332px;" this.select();"=""&gt; &amp;lt;capability name="isMobileDevice" value="false" /&amp;gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;That's all you need. No IISRESET is required.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-6639290727222536678?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/6639290727222536678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=6639290727222536678' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/6639290727222536678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/6639290727222536678'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/08/disable-sharepoint-2010-mobile-site.html' title='Disable SharePoint 2010 Mobile Site'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-5960840867674562559</id><published>2011-04-27T13:33:00.000-07:00</published><updated>2011-04-27T13:33:23.031-07:00</updated><title type='text'>Troubleshooting SharePoint 2010 Errors Using Correlation ID</title><content type='html'>SharePoint 2010 has made tracking down error messages somewhat cryptic. If you ever get an error message, usually it looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-99MNbTWU-rM/Tbh7C6GJuUI/AAAAAAAAAHs/yH1v0c4F25U/s1600/sharepoint_correlation_id.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://3.bp.blogspot.com/-99MNbTWU-rM/Tbh7C6GJuUI/AAAAAAAAAHs/yH1v0c4F25U/s400/sharepoint_correlation_id.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Assuming that this is a production environment, the error message above tells you pretty much nothing! So how can we make sense of what is going on behind the scene you may ask. To answer that, let's navigate to the LOGS directory of the SharePoint Server in question and find the most recent log file there (which should be at C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS\):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DzrkSw_z8BE/Tbh7zEJry2I/AAAAAAAAAHw/On8pwBbTEa8/s1600/sharepoint_correlation_id_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="344" src="http://2.bp.blogspot.com/-DzrkSw_z8BE/Tbh7zEJry2I/AAAAAAAAAHw/On8pwBbTEa8/s640/sharepoint_correlation_id_2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Right-Click on the file in question, and open it using notepad. Copy the Correlation ID you obtained from the error message and perform a search for it. You will have multiple entries in the file which will specify what page the error occurred on, what the Scope was when the error happened, what event was triggered when the error happend, and finally; what the actual cause of the error was, which depending on what you did to upset SharePoint will be different.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia, Inc.&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-5960840867674562559?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/5960840867674562559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=5960840867674562559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5960840867674562559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5960840867674562559'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/04/troubleshooting-sharepoint-2010-errors.html' title='Troubleshooting SharePoint 2010 Errors Using Correlation ID'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-99MNbTWU-rM/Tbh7C6GJuUI/AAAAAAAAAHs/yH1v0c4F25U/s72-c/sharepoint_correlation_id.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-5151857256811909507</id><published>2011-04-11T07:48:00.000-07:00</published><updated>2011-04-11T07:50:17.510-07:00</updated><title type='text'>The language-neutral solution package was not found</title><content type='html'>This error pops up from time to time when trying to deploy a solution to SharePoint 2007 or 2010 and when it happens it doesn't easily go away:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Error occurred in deployment step 'Retract Solution': The language-neutral solution package was not found.&lt;/i&gt;&lt;/blockquote&gt;There are several things you can try to resolve the issue, in this specific order:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Close Visual Studio Solution and completely exit out of it, then run it again and compile. This sometimes fixes the issue.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Right-Click on your Visual Studio Solution, select "Clean" Solution, then Right Click on SharePoint Project and choose "Retract". Rebuild and Deploy.&amp;nbsp;&lt;/li&gt;&lt;li&gt;In PowerShell running as Administrator&amp;nbsp;run&amp;nbsp;Uninstall-SPSolution:&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Unistall-SPSolution -identity {Name of WSP File} -allwebapplications&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In PowerShell running as Administrator run&amp;nbsp;Remove-SPSolution:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Remove-SPSolution -identity {Name of WSP File} -force&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In PowerShell running as Administrator run the Delete() command:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;(Get-SPSolution {Name of WSP File}).Delete()&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;If items 1 through 4 doesn't fix it, item 5 will definitely do the trick, but it shouldn't be run unless all the other solutions fail.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pete Soheil&lt;/div&gt;&lt;div&gt;DigiOz Multimedia, Inc.&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-5151857256811909507?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/5151857256811909507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=5151857256811909507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5151857256811909507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5151857256811909507'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/04/language-neutral-solution-package-was.html' title='The language-neutral solution package was not found'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-20056392593093140</id><published>2011-03-17T13:25:00.000-07:00</published><updated>2011-03-17T13:25:36.714-07:00</updated><title type='text'>Debugging SharePoint 2010 Web Parts from Visual Studio 2010</title><content type='html'>&lt;br /&gt;&lt;div class="MsoNormal"&gt;Most of you probably already have figured this out, but forthose of you who still have not, here is how you can debug your web part inVisual Studio 2010:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Deploy your Web Part&lt;/li&gt;&lt;li&gt;Add the Web Part to Page&lt;/li&gt;&lt;li&gt;In your code, create a break point.&lt;/li&gt;&lt;li&gt;Go to “Debug” menu, and choose “Attach to Process”.&lt;/li&gt;&lt;li&gt;Under “Attach to:” section, click on “Select …” button.&lt;/li&gt;&lt;li&gt;Uncheck all options, checking ONLY “Managed (v2.0, v1.1, v1.0) code”.&lt;/li&gt;&lt;li&gt;Check the “Show processes in all sessions” checkbox.&lt;/li&gt;&lt;li&gt;Select all “w3wp.exe” Processes, then click on the “Attach” button.&lt;/li&gt;&lt;li&gt;Run your page that contains the Web Part. You should now hit your break point, and will be able to step through your code.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;This should help speed up your development considerably ifyou are not using this method already.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Thanks,&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Pete Soheil&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-20056392593093140?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/20056392593093140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=20056392593093140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/20056392593093140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/20056392593093140'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2011/03/debugging-sharepoint-2010-web-parts.html' title='Debugging SharePoint 2010 Web Parts from Visual Studio 2010'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-3033544898007136587</id><published>2010-12-03T06:54:00.000-08:00</published><updated>2010-12-03T08:12:53.923-08:00</updated><title type='text'>Hiding Ribbon and Navigation on External Facing SharePoint 2010 Site</title><content type='html'>&lt;br /&gt;Suppose you have a SharePoint 2010 Publishing or External Facing Web Site, which means by definition you will have enabled Anonymous Access to the Site to allow Web visitors to access it. Unless the SharePoint Navigation and Ribbon fit in with your design, sooner or later you will start looking for a way to only show them to logged in or admin users. There are two way to accomplish this (thanks to Doug Ware for his hint):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;The Hard Way:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One way to do this is to create custom login in the Master Page of your SharePoint Site by enabling scripting on it. To do this, you have to first enable scripting on the Master Page.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open the Web.config file of your SharePoint Site in Notepad.&lt;/li&gt;&lt;li&gt;In Web.config file, find the following section:&lt;/li&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;SafeMode MaxControls="200" CallStack="true" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false"&amp;gt;  &lt;br /&gt;     &amp;lt;PageParserPaths&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Add the following XML Node to this section:&lt;/li&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;PageParserPath VirtualPath="/*" IncludesSubFolders="true" CompilationMode="Always" AllowServerSideScript="true" /&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Save and Close the Web.Config file.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Go to Start &amp;gt; Run &amp;gt; Type "cmd" to open Command Prompt.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Type "iisreset" and hit ENTER to reset IIS.&amp;nbsp;&lt;/li&gt;&lt;li&gt;In the SharePoint Master Page, add the following code block around the SharePoint Ribbon or Navigation control you wish to hide:&lt;/li&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;div runat="server" ID="ctlToHide"&amp;gt;  &lt;br /&gt;     &amp;lt;!-- Your Ribbon Code to Hide Goes Here --&amp;gt;  &lt;br /&gt; &amp;lt;/div&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Add The Script to Hide this section:&lt;/li&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;script runat="server"&amp;gt;  &lt;br /&gt; protected void Page_Load(object sender, EventArgs e)  &lt;br /&gt; {  &lt;br /&gt;     if (Context.User.Identity.Name == "domainname\username")   &lt;br /&gt;     {   &lt;br /&gt;         ctlToHide.Visible = true;   &lt;br /&gt;     }   &lt;br /&gt;     else  &lt;br /&gt;     {  &lt;br /&gt;         ctlToHide.Visible = false;  &lt;br /&gt;     }  &lt;br /&gt; }  &lt;br /&gt; &amp;lt;/script&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/ul&gt;&lt;b&gt;&lt;u&gt;The Easy Way:&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Add the following Tags around each section you wish to hide in your SharePoint Master Page:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;Sharepoint:SPSecurityTrimmedControl runat=”server” Permissions=”ManageLists”&amp;gt;  &lt;br /&gt;     &amp;lt;!-- Your Ribbon Code Goes Here --&amp;gt;  &lt;br /&gt; &amp;lt;/SharePoint:SPSecurityTrimmedControl&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Obviously the second route besides being much easier is also a lot more secure then the first route! So don't go scripting in the Master Page if you don't have to!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-3033544898007136587?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/3033544898007136587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=3033544898007136587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3033544898007136587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3033544898007136587'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/12/hiding-ribbon-and-navigation-on.html' title='Hiding Ribbon and Navigation on External Facing SharePoint 2010 Site'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-1216727990107395273</id><published>2010-06-09T13:27:00.000-07:00</published><updated>2010-06-09T13:27:41.405-07:00</updated><title type='text'>The request failed with HTTP status 400: Bad Request CRM 4.0</title><content type='html'>This error in Microsoft Dynamics CRM 4.0 means that the Server name you have specified does not resolve to the IP Address that the Active Directory is pointing to. A good way to check what IP the CRM Website is expecting is to open up IIS Manager, right-click on the "Microsoft Dynamics CRM" Website, choose "Properties". On the "Web Site" tab under "IP Address", it should say "All Unassigned". If it doesn't say All Unassigned, then the IP Address it has specified is not what the Active Directory&amp;nbsp;is resolving the website&amp;nbsp;to. &lt;br /&gt;&lt;br /&gt;A quick workaround can be done as follows as specified by &lt;a href="http://support.microsoft.com/kb/950542"&gt;KB Article 950542&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;1. Click Start, click Run, type regedit, and then click OK.&lt;br /&gt;&lt;br /&gt;2. Locate the following registry subkey: &lt;br /&gt;&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM&lt;br /&gt;&lt;br /&gt;3. Right-click MSCRM, click New, and then click String Value.&lt;br /&gt;&lt;br /&gt;4. In the Name box, type LocalSdkHost.&lt;br /&gt;&lt;br /&gt;5. Right-click LocalSdkHost, and then click Modify. &lt;br /&gt;&lt;br /&gt;6. In the Value box, type the name of the Microsoft Dynamics CRM server or the host header, and then click OK. &lt;br /&gt;&lt;br /&gt;Note Do not specify http:// or the port number.&lt;br /&gt;&lt;br /&gt;7. Locate the LocalSdkPort key at the same location. Verify that the port that is listed matches the port that is being used for the CRM Web site. &lt;br /&gt;&lt;br /&gt;8. If the value of the LocalSdkPort key is incorrect, right-click LocalSdkPort, and then click Modify. Type the correct port number, and then click OK.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-1216727990107395273?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/1216727990107395273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=1216727990107395273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1216727990107395273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1216727990107395273'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/06/request-failed-with-http-status-400-bad.html' title='The request failed with HTTP status 400: Bad Request CRM 4.0'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-8901109687172108430</id><published>2010-04-22T06:32:00.000-07:00</published><updated>2010-04-22T06:32:00.519-07:00</updated><title type='text'>A good Microsoft SQL String Split Function</title><content type='html'>Sooner or later any programmer that deals with SQL database will notice that there is no easy to use Text SPLIT function in Microsoft SQL, and by that I mean a function that gives you both the split text and the position of each and lets you select a specific position's data. &lt;br /&gt;&lt;br /&gt;Here is one such function that makes life much easier for me:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;CREATE FUNCTION [dbo].[fn_SplitText]&lt;br /&gt;(    &lt;br /&gt;    @RowData NVARCHAR(MAX),&lt;br /&gt;    @Delimeter NVARCHAR(MAX)&lt;br /&gt;)&lt;br /&gt;RETURNS @RtnValue TABLE &lt;br /&gt;(&lt;br /&gt;    ID INT IDENTITY(1,1),&lt;br /&gt;    Data NVARCHAR(MAX)&lt;br /&gt;) &lt;br /&gt;AS&lt;br /&gt;BEGIN &lt;br /&gt;    DECLARE @Iterator INT&lt;br /&gt;    SET @Iterator = 1&lt;br /&gt;&lt;br /&gt;    DECLARE @FoundIndex INT&lt;br /&gt;    SET @FoundIndex = CHARINDEX(@Delimeter,@RowData)&lt;br /&gt;&lt;br /&gt;    WHILE (@FoundIndex&gt;0)&lt;br /&gt;    BEGIN&lt;br /&gt;        INSERT INTO @RtnValue (data)&lt;br /&gt;        SELECT &lt;br /&gt;            Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, @FoundIndex - 1)))&lt;br /&gt;&lt;br /&gt;        SET @RowData = SUBSTRING(@RowData,&lt;br /&gt;                @FoundIndex + DATALENGTH(@Delimeter) / 2,&lt;br /&gt;                LEN(@RowData))&lt;br /&gt;&lt;br /&gt;        SET @Iterator = @Iterator + 1&lt;br /&gt;        SET @FoundIndex = CHARINDEX(@Delimeter, @RowData)&lt;br /&gt;    END&lt;br /&gt;    &lt;br /&gt;    INSERT INTO @RtnValue (Data)&lt;br /&gt;    SELECT Data = LTRIM(RTRIM(@RowData))&lt;br /&gt;&lt;br /&gt;    RETURN&lt;br /&gt;END&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The usage of it is pretty simple:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SELECT * FROM fn_SplitText('This|is|a|test','|');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Split function actually returns a temporary table containing the split data, in this case, it will return the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; ID  |  Data&lt;br /&gt;-----------------&lt;br /&gt;  1  | This&lt;br /&gt;  2  | is&lt;br /&gt;  3  | a&lt;br /&gt;  4  | test&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So if I wanted to select the 2nd substring out of that split I would just say:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SELECT Data FROM fn_SplitText('This|is|a|test','|') WHERE ID = 2;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Which would return "is" to me. &lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;www.digioz.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-8901109687172108430?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/8901109687172108430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=8901109687172108430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8901109687172108430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8901109687172108430'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/04/good-microsoft-sql-string-split.html' title='A good Microsoft SQL String Split Function'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-417018665517563159</id><published>2010-04-21T20:48:00.000-07:00</published><updated>2010-04-21T20:48:53.901-07:00</updated><title type='text'>Comparing a Date to the value in a DateTime field Microsoft SQL</title><content type='html'>When it comes to working with Date and Time values in Microsoft SQL Server, sometimes its the simple things that get the best of you. Suppose you have a SQL Table that contains the following columns and record:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;id      | StartDate               | EndDate &lt;br /&gt;-----------------------------------------------------------&lt;br /&gt;1       | 2007-06-14 14:22:32.437 | 2010-04-21 16:37:34.503&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So you write a query similar to the following query expecting to get that record:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SELECT * FROM TableName &lt;br /&gt;WHERE StartDate = '6/14/2007' &lt;br /&gt;AND EndDate = '4/21/2010';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wrong! If your DateTime value has an actual Timestamp other then "00:00:00.000", your query will NOT return any results. This is probably one of the most common DateTime related mistakes programmers make. &lt;br /&gt;&lt;br /&gt;To only compare the DATE portion of the DateTime field value, you could use the following SQL query instead:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SELECT * FROM TableName&lt;br /&gt;WHERE CAST(CONVERT(varchar(8), StartDate, 112) AS datetime) = '6/14/2007' &lt;br /&gt;AND CAST(CONVERT(varchar(8), EndDate, 112) AS datetime) = '4/21/2010';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So please, don't write queries like the first one ever again!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;www.digioz.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-417018665517563159?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/417018665517563159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=417018665517563159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/417018665517563159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/417018665517563159'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/04/comparing-date-to-value-in-datetime.html' title='Comparing a Date to the value in a DateTime field Microsoft SQL'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-3244663057724662356</id><published>2010-04-17T07:41:00.000-07:00</published><updated>2010-04-17T08:01:48.073-07:00</updated><title type='text'>C# equivalent to the VB.NET IsNumeric Function</title><content type='html'>One of the great function VB.NET makes available to developers is the "InNumeric" function. This function returns a boolean value indicating wheather an expression can be evaluated as number or not. If you lookup the definition of it however, you will see that the function supported in C#. &lt;br /&gt;&lt;br /&gt;There are several different ways to code a custom function to do the same in C#. Here is one way:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Text.RegularExpressions;&lt;br /&gt;&lt;br /&gt;public static bool IsNumeric(string psInputString)&lt;br /&gt;{&lt;br /&gt; return Regex.IsMatch(psInputString, "^[0-9]+$");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here is how Microsoft recommends it on &lt;a href="http://support.microsoft.com/kb/329488"&gt;THIS&lt;/a&gt; page:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;static bool IsNumeric(object Expression)&lt;br /&gt;{&lt;br /&gt; bool isNum;&lt;br /&gt; double retNum;&lt;br /&gt; isNum = Double.TryParse(&lt;br /&gt;   Convert.ToString(Expression), &lt;br /&gt;   System.Globalization.NumberStyles.Any, &lt;br /&gt;   System.Globalization.NumberFormatInfo.InvariantInfo, &lt;br /&gt;   out retNum );&lt;br /&gt; return isNum;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Either way you will get the same result.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com"&gt;www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-3244663057724662356?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/3244663057724662356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=3244663057724662356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3244663057724662356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3244663057724662356'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/04/c-equivalent-to-vbnet-isnumeric.html' title='C# equivalent to the VB.NET IsNumeric Function'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-5909770642378395370</id><published>2010-04-16T13:25:00.000-07:00</published><updated>2010-04-16T13:25:49.231-07:00</updated><title type='text'>SourceForge.net: DigiOz .NET Portal: News</title><content type='html'>&lt;a href="https://sourceforge.net/news/?group_id=174421&amp;amp;id=285481"&gt;SourceForge.net: DigiOz .NET Portal: News&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-5909770642378395370?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://sourceforge.net/news/?group_id=174421&amp;id=285481' title='SourceForge.net: DigiOz .NET Portal: News'/><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/5909770642378395370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=5909770642378395370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5909770642378395370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5909770642378395370'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/04/sourceforgenet-digioz-net-portal-news.html' title='SourceForge.net: DigiOz .NET Portal: News'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7359071414949624488</id><published>2010-04-07T20:23:00.000-07:00</published><updated>2010-04-07T20:23:12.064-07:00</updated><title type='text'>Microsoft Visual Studio 2010 for mac OS X</title><content type='html'>Finally there is some Mac related Visual Studio new worth blogging about, or so I thought. Earlier this week I was reading through the Software Developer Times Newspaper, when I came across the following article by "I.B. Phoolen"&amp;nbsp;&amp;nbsp;regarding Micrsosoft Visual Studio 2010 for mac OS X.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="background-color: #cfe2f3;"&gt;Declaring a “bright new day for our friends in Macintosh-Land,” Microsoft CEO Steve Ballmer today unveiled Visual Studio 2010 for Mac OSX, expected to be available this summer. Speaking to a full crowd at the Medenbauer Center, Ballmer reminded the audience that Microsoft is one of the oldest and most competitive ISVs for Apple’s Macintosh platform. The company’s Excel spreadsheet software first appeared for Mac in 1985, he bellowed, two full years before Microsoft released a Windows version. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;“We never stopped loving the Mac,” he shouted, waving an iPhone. “Every day, our Windows 7 dev team is inspired by the great work being done by visionaries in Cupertino.” Standing in front of a giant poster of an Apple iPad tablet computer, Ballmer screamed, “now it’s time to give something back!”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;The centerpiece of Visual Studio for Mac OS X is its native implementation of Apple’s preferred object-oriented programming language, Objective-C, which is used by both Mac OS X and iPhone/iPad developers. According to Ballmer, the new Visual objective-C IDE will also appear in Visual Studio 2010 SP1 for Windows. Applications written in the Smalltalk-inspired language will require only a simple recompile to run on both Mac and Windows 7, he said. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;Playing to the cheering developers at the software launch, Ballmer then showed Visual Basic for Mac OS X, another component of the Visual Studio for Mac OS X suite. “You asked for it, you got it!” he shrieked, before being buried by a hailed of rose petals and hotel keys tossed by ISVs and industry analysts. Ballmer said that the Visual Studio for Mac OS X suite (expected to ship by Apple’s Worldwide Developer Conference in San Francisco, June 8-12) is expected to woo developers from Apple’s Xcode. “I know you love your Xcode,” he roared, “but I promise you’ll love your Visual Studio for Mac even more!”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;On-stage demos at the event included Macintosh integration with Visual Studio Team System; using Visual Basic with Apple’s iPhone SDK to build a voice recognition application for iPhone and iPad; and porting BioShock 2 from Windows to Mac OS X 10.6 “Snow Leopard.” Baller apologized for the tool chain’s lack of support for versions of Mac OS X prior to 10.5 “Leopard,” saying, “We’re only human, okay?”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cfe2f3;"&gt;As he was leaving the stage, Ballmer turned back. “Oh, just one more thing, “ he cried – and then showed off the company’s full .NET Framework 4.0 for Mac OS X, available for free download from the Microsoft website. “We love you, Apple!” he whooped, bringing the event to a triumphant close.&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;After reading this article I was overwhealmed with joy that Visual Studio is finally making its way , until I noticed that the date of the actual article was April 1st, and the name of the Author is "I.B. Phoolen", as in "I am fooling you"! After about an hour of searching I could find nothing to proove any of the above, which pretty much means it is an&amp;nbsp;April fool's joke and a very&amp;nbsp;cruel one at best.&amp;nbsp;Good one guys! You had me going there for about an hour or so. &lt;a href="http://www.digioz.com/forum/images/smilies/icon_biggrin.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" nt="true" src="http://www.digioz.com/forum/images/smilies/icon_biggrin.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Pete Soheil&lt;/div&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7359071414949624488?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7359071414949624488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7359071414949624488' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7359071414949624488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7359071414949624488'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/04/microsoft-visual-studio-2010-for-mac-os.html' title='Microsoft Visual Studio 2010 for mac OS X'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-8137091265334452355</id><published>2010-02-19T09:05:00.000-08:00</published><updated>2010-02-19T09:25:29.071-08:00</updated><title type='text'>No Microsoft Dynamics CRM user exists with the specified domain name and user ID</title><content type='html'>From time to time you may receive this error for one of the following reasons:&lt;br /&gt;&lt;br /&gt;1. You need to add CRM URL to your Trusted Sites:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Go to "Tools &gt; Internet Options &gt; Security Tab"&lt;/li&gt;&lt;li&gt;Select "Trusted Sites" icon then click on "Sites" button and make sure that the CRM URL exists in that list. If not, add it to that list.&lt;/li&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;2. IIS does not authenticate you as the user that you think it should be authenticating you as.&lt;br /&gt;&lt;br /&gt;This one can happen if for example one of your co-workers uses your machine and tries to access the CRM entering their domain login information, then later on their access to CRM is revoked, yet Internet Explorer has already cached their credentials and is trying to use it when you are logged in. The problem is that IIS does not show what Active Directory User it is trying to authenticate you as if you have the option checked to automatically verify your credentials on each visit. The quickest way to fix this is to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do everything in item 1 above.&lt;/li&gt;&lt;li&gt;With "Trusted Sites" icon selected, click on "Custom Level" button.&lt;/li&gt;&lt;li&gt;Scroll all the way down to the "User Authentication" section, then check "Prompt for user name and password", clicking on OK.&lt;/li&gt;&lt;li&gt;Click "OK" again to save settings and exit. &lt;/li&gt;&lt;li&gt;Close Internet Explorer and Re-open, clearing all cache. &lt;/li&gt;&lt;/ul&gt;Now when you visit the CRM URL, you are prompted for your domain login criteria, which should resolve any conflicts.&lt;br /&gt;&lt;br /&gt;3. The Active Directory domain user you are logged in as does not have a CRM Account created  for it.&lt;br /&gt;&lt;br /&gt;Simply log in as the CRM Administrator, go under "Settings &gt; Administration &gt; User" and add the user to CRM.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-8137091265334452355?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/8137091265334452355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=8137091265334452355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8137091265334452355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8137091265334452355'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2010/02/no-microsoft-dynamics-crm-user-exists.html' title='No Microsoft Dynamics CRM user exists with the specified domain name and user ID'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-8305637954676157437</id><published>2009-09-16T05:43:00.000-07:00</published><updated>2009-09-16T06:49:36.555-07:00</updated><title type='text'>Obtaining CRM 4.0 DLL and its Source Code from Database</title><content type='html'>A few days ago I was challenged with the task of retrieving a Microsoft Dynamics CRM 4.0 Plugin DLL and it's Source Code from the CRM Database. Apparently the contractor that created the Plugin DLL in question forgot to check in the Source Code into Source Control, and after the contractor had left the IT people reformatted the PC's Hard Drive and gave it to another user (so there was no way to get the source code any more). To make it worse, since the Plugin DLL was deployed to Database, there was no actual physical DLL file anywhere to be found on the Server.&lt;br /&gt;&lt;br /&gt;Here is how I managed to get not only the DLL in question back, but also its source code:&lt;br /&gt;&lt;br /&gt;1. Read content of DLL from PluginAssemblyBase table, “content” column which was stored in Base64 Format: The way Microsoft CRM 4.0 Plugin Deployment to Database works is to read the Binary content of the Plugin DLL and converts it to Base64 String, storing it in the PluginAssemblyBase Database Table, in the "content" column. So one could simply copy the Base64 String from that column using Microsoft SQL Management or a standard Database record read.&lt;br /&gt;2. Converted the Base64 DLL content to Binary using a converter: There are many ways to do this, but the easiest way is to use an online converter like the one &lt;a href="http://www.motobit.com/util/base64-decoder-encoder.asp"&gt;HERE&lt;/a&gt; to convert the Base64 String to Binary format and save it to file. Make sure to name the resulting DLL file the same as the original DLL was called (you can determine this by reading the Name column of the PluginAssemblyBase table for the record in question).&lt;br /&gt;3. Saved the result of this conversion to a file called NameOfYourDLL.dll: The converter from part 2 allows you to save the resulting binary output to file.&lt;br /&gt;4. Decompiled the resulting dll using a .NET Decompiler: I used &lt;a href="http://www.red-gate.com/products/reflector/"&gt;Redgate's .NET Reflector &lt;/a&gt;to decompile the resulting DLL and get the source code.&lt;br /&gt;5. Obtained the source code and created a new Project in Visual Studio: You just have to expand each class and copy and past each class file to a new physical file in VS.&lt;br /&gt;&lt;br /&gt;I hope this information comes in handy to someone else besides me.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-8305637954676157437?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/8305637954676157437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=8305637954676157437' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8305637954676157437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8305637954676157437'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/09/obtaining-crm-40-dll-and-its-source.html' title='Obtaining CRM 4.0 DLL and its Source Code from Database'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-1983272403572249112</id><published>2009-08-07T12:54:00.000-07:00</published><updated>2009-08-07T14:44:18.349-07:00</updated><title type='text'>A close look at uCertify M70-315 Prep Course</title><content type='html'>Microsoft has gone above and beyond to make sure that the Web Development and Programming Environment that its Developer base use is as flexible, robust and easy to use and troubleshoot as possible. That is exactly why having a Microsoft Certification goes a long way with Employers. Let’s face it, in these tough economic times we cannot afford to overlook anything that would give us an edge over the next guy who is trying to grab the same job as you.&lt;br /&gt;&lt;br /&gt;That’s where certification training resources like uCertify come in. If you are like most of us, you probably don’t have $2000 to $3000 dollars to pay for a Microsoft Certification Training Class. For a few hundred dollars you can essentially accomplish the same thing and in a fraction of the time.&lt;br /&gt;&lt;br /&gt;Being a web developer, I have been thinking about taking the “M70-315 for Web Applications with C# .NET”, and uCertify has a prep course on exactly that topic (along with a couple of hundred other certification preps which I am not going to go into detail for. Which is why I downloaded and tried out this Prep Kit to see how much I know already and what I need to brush up on for the exam.&lt;br /&gt;&lt;br /&gt;The thing that I loved about the Prep Application was how easy to use and common sense the interface was. Let’s face it, none of us would want to learn a whole new complicated application just to prepare for certification, which I am willing to bet is exactly what the uCertify people had in mind when they created this Prep Application. The Application is divided into two main sections: “Study and Learn” and “Practice Test”.&lt;br /&gt;&lt;br /&gt;The “Study and Learn” section is a simple flash card type interface with a list of highlighted and important topics presented to the user. While going through them, it helped me remember a lot of the detailed troubleshooting information that I had used at some point in the past but had forgotten about since. It makes for a great review of existing knowledge for programmers. What it does not do however is to teach someone how to program from scratch! And no one should really expect that from a Prep Course, since the assumption is that you have been programming for a while now and you are trying to get ready for the exam.&lt;br /&gt;&lt;br /&gt;The “Practice Test” Section of it is a set of multiple choice tests that target specific test related topics you should know about before the exam. What I liked about this section the most was the fact that it has a Learning mode, where it will let you take a test and once you have put in your answer it will explain to you what you got wrong. The most impressive part of the Learn Mode was the amount of detailed explanation that is given on questions that you get wrong. It basically walks you through the whole thought process of coming up with the right answer, not just give you the answer, and that has helped me come up with a troubleshooting strategy that can be applied to any website related issue, not just the ones in the practice tests.&lt;br /&gt;&lt;br /&gt;Overall I find this Prep Course to be a truly impressive Package and would recommend it to anyone preparing to take a Certification Exam. And for reading this blog, I am happy to share a discount coupon code with you. The discount code which entitles you to a 10% discount is "UPG033". You can download the Prep Kit from &lt;a href="http://www.ucertify.com/download/70-315.html"&gt;http://www.ucertify.com/download/70-315.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy Testing!&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-1983272403572249112?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/1983272403572249112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=1983272403572249112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1983272403572249112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1983272403572249112'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/08/close-look-at-ucertify-m70-315-prep.html' title='A close look at uCertify M70-315 Prep Course'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-5110810934745127667</id><published>2009-08-03T09:15:00.000-07:00</published><updated>2009-08-03T09:53:09.411-07:00</updated><title type='text'>Easy way to Serialize and Deserialize Object to String XML</title><content type='html'>This is probably one of the most comonly asked questions for developers who just start off working with SOAP, Webservices, or cross platform communication through XML. The easiest way to convert an object to string XML and back is to use two functions similar to the ones bellow:&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 659px; DISPLAY: block; HEIGHT: 410px; CURSOR: hand" border="0" alt="" src="http://www.digioz.com/blog/images/SerializeDeserializeFunctions.gif" /&gt;Here is a sample usage of the above two functions:&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 629px; DISPLAY: block; HEIGHT: 250px; CURSOR: hand" border="0" alt="" src="http://www.digioz.com/blog/images/SerializeDeserializeFunctionsUsage.gif" height="192" /&gt;&lt;/p&gt;&lt;p&gt;I hope it comes in handy for someone. Just don't forget to add error handling to the usage code, in case your XML string is not complete or corrupt. &lt;/p&gt;&lt;p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-5110810934745127667?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/5110810934745127667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=5110810934745127667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5110810934745127667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5110810934745127667'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/08/easy-way-to-serialize-and-deserialize.html' title='Easy way to Serialize and Deserialize Object to String XML'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-3062066231236690132</id><published>2009-07-16T20:01:00.000-07:00</published><updated>2009-07-16T20:21:10.426-07:00</updated><title type='text'>Removing CVS or SVN Repository from SourceForge.net</title><content type='html'>SourceForge.net is by far the most popular Open Source Programming Site out on the web. They have a lot of great Project Management features on that site and all for FREE!&lt;br /&gt;&lt;br /&gt;A question was asked from me by one of our Open Source Developers on how to remove a CVS or SVN repository from SourceForge, so this is my attempt to both answer that question and write something useful down for the rest of the SourceForge Developers out there with the same problem.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Download Putty.exe from this link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe"&gt;http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Run Putty, and enter the following information under each specified tab:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Session Tab:&lt;/strong&gt; For "Host Name", type "shell.sourceforge.net" and check the "SSH" radio button.&lt;br /&gt;&lt;strong&gt;Connection &gt; Data:&lt;/strong&gt; Under "Auto-login username" textbox enter "user,projectname", where "user" is your SourceForge.net registered username and "projectname" is the Unix Project name (without space) that SourceForge gave you when they approved your project.&lt;br /&gt;&lt;strong&gt;Connection &gt; SSH:&lt;/strong&gt; Enter "create" in the "Remote command" textbox.&lt;br /&gt;&lt;br /&gt;Step 3: Once you have all of that in place, click on the "Open" button to connect to SourceForge.&lt;br /&gt;&lt;br /&gt;Step 4: You will be prompted to enter your password. Enter it to continue.&lt;br /&gt;&lt;br /&gt;Step 5: Once on the Shell Prompt, enter "adminrepo --checkout cvs" to cache a copy of your repository (clone it). This may take a few minutes to do depending on the size of your repository.&lt;br /&gt;&lt;br /&gt;Step 6: Remove each repository you want to delete using the following command:&lt;br /&gt;&lt;br /&gt;rm -rf /cvsroot/projectname/RepositoryToRemove&lt;br /&gt;&lt;br /&gt;Here "RepositoryToRemove" is the name of the CVS or SVN repository you wish to delete. If you want to delete ALL repositories, you can replace "RepositoryToRemove" with a "*".&lt;br /&gt;&lt;br /&gt;Note: If you need to create any new repositories at this point, you could use the "cvs -d /cvsroot/projectname/RepositoryToCreate command to create it.&lt;br /&gt;&lt;br /&gt;Step 7: Type "adminrepo --save" to save your changes and get rid of the cached version of the repositories you were working on.&lt;br /&gt;&lt;br /&gt;That's it!  I hope you found this blog entry useful. I know of at least one person on my Open Source Team that will!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-3062066231236690132?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/3062066231236690132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=3062066231236690132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3062066231236690132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3062066231236690132'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/07/removing-cvs-or-svn-repository-from.html' title='Removing CVS or SVN Repository from SourceForge.net'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-1766278524356114420</id><published>2009-03-31T22:29:00.000-07:00</published><updated>2009-03-31T22:35:11.007-07:00</updated><title type='text'>YouTube Apache Server Glitch!</title><content type='html'>First Google and now YouTube. Makes one wonder what our friends at Google are up to these days!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Came across this glitch on YouTube on 04/01/09 at 12:30 AM. If it is an April Fools Joke they certainly got my attention! Good one guys!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319591971490557810" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 228px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_LpI2jvI5gPU/SdL8trK273I/AAAAAAAAAEk/ctRfmtK2Sow/s400/YouTube_Error.gif" border="0" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-1766278524356114420?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/1766278524356114420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=1766278524356114420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1766278524356114420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1766278524356114420'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/03/youtube-apache-server-glitch.html' title='YouTube Apache Server Glitch!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LpI2jvI5gPU/SdL8trK273I/AAAAAAAAAEk/ctRfmtK2Sow/s72-c/YouTube_Error.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-3810616175034830168</id><published>2009-01-31T07:19:00.000-08:00</published><updated>2009-01-31T07:30:23.248-08:00</updated><title type='text'>Glitch in Google Malware detection system?</title><content type='html'>It is sometimes easy to forget that despite the fact that we live in the Information Age, even Fortune 500 companies like Google can have significant glitches in their system.&lt;br /&gt;&lt;br /&gt;I came across this glitch this morning while doing a search on Google. I was very surprised when every single result of every single search I did was being labled as Malware!!!&lt;br /&gt;&lt;br /&gt;The whole thing of course only lasted 5 minutes, but its a reminder that not even Fortune 500 companies like Google are immune to glitches or perhaps hacking attempts to their system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_LpI2jvI5gPU/SYRstKTJHCI/AAAAAAAAAEM/9wZdPzi6SpI/s1600-h/Google_Glitch.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5297478584809102370" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 374px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://4.bp.blogspot.com/_LpI2jvI5gPU/SYRstKTJHCI/AAAAAAAAAEM/9wZdPzi6SpI/s400/Google_Glitch.gif" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-3810616175034830168?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/3810616175034830168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=3810616175034830168' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3810616175034830168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/3810616175034830168'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2009/01/glitch-in-google-malware-detection.html' title='Glitch in Google Malware detection system?'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LpI2jvI5gPU/SYRstKTJHCI/AAAAAAAAAEM/9wZdPzi6SpI/s72-c/Google_Glitch.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-5232987684514951192</id><published>2008-11-07T08:49:00.000-08:00</published><updated>2008-11-07T09:07:21.322-08:00</updated><title type='text'>Visual Studio System.OutOfMemory Exception</title><content type='html'>I first came across this error while working on 20+ files in Visual Studio 2005 (all checked out from Visual Source Safe 2005).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Error:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The "ResolveManifestFiles" task failed unexpectedly.&lt;br /&gt;System.OutOfMemoryException: Insufficient memory to continue the execution of the program.&lt;br /&gt;at Microsoft.Build.Tasks.Deployment.ManifestUtilities.NativeMethods.GetAssemblyIdentifyFromFile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Screenshot:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://digioz.com/images/screenshots/Out_Of_Memory_Exception_VS_2005.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 638px; CURSOR: hand; HEIGHT: 223px" alt="" src="http://digioz.com/images/screenshots/Out_Of_Memory_Exception_VS_2005.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_LpI2jvI5gPU/SRRy6Hr_BpI/AAAAAAAAACs/1UElA7kUGu4/s1600-h/Out_Of_Memory_Exception_VS_2005.gif"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;1. Do you have enough memory on your system? In my case I had 2GB of memory which is more then enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;2. Reboot Your machine. This sometimes resolves the issue. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;3. Reset the Visual Studio setting, check out How to Reset Your Settings at: &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms247075(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms247075(vs.80).aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;4. Have you applied the latest service pack? If not, I suggest you to apply the service pack. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;5. If you reboot the operating system to safe mode, do we have the same problem? This can help to isolate whether any other applications are interfering with Visual Studio. In addition to safe mode, you can also try “clean boot”. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;6. If you create a new user account, do we have the problem? This can help to isolate user profile corruption related causes. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;7. If you disable Add-ns (e.g. “Tools” “Add-in Manager”) and run “devenv.exe /safemode”, do you still have the problem? This can eliminate the possibility that third party Add-ins are causing problems. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;8. If you create a new project, do we have the problem? Sometimes corrupted project settings can cause problems. These are project specific. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;9. Break the large project into smaller ones.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;10. Use the /3GB option, so the user mode code can use 3GB address space. With the added 1GB address space, the frequency of the problem can be greatly reduced or even fixed. However, option 1 is still strongly recommended. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Here is how:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;I. Backup the boot.ini file. Then, put the /3GB switch in your boot.ini. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;For more information on the /3GB option, please check the following article: Memory Support and Windows Operating Systems:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx"&gt;http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;II. Make DEVENV large address aware:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;a. Open up a VS 2005 command prompt &lt;/div&gt;&lt;div&gt;b. Change directory to the Microsoft Visual Studio 8\Common7\IDE directory. &lt;/div&gt;&lt;div&gt;c. Backup devenv.exe file.&lt;/div&gt;&lt;div&gt;d. Type and execute the following command line: editbin /LARGEADDRESSAWARE devenv.exe&lt;br /&gt;Reboot Windows and check if the problem persists. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;That should do it!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Pete Soheil&lt;/div&gt;&lt;div&gt;DigiOz Multimedia&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-5232987684514951192?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/5232987684514951192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=5232987684514951192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5232987684514951192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/5232987684514951192'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/11/visual-studio-systemoutofmemory.html' title='Visual Studio System.OutOfMemory Exception'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7280224997542422704</id><published>2008-08-21T13:17:00.000-07:00</published><updated>2008-08-21T13:54:27.402-07:00</updated><title type='text'>The not so nullable .NET Date Data Type!</title><content type='html'>Can a variable of type "Date" ever be null or nothing in VB.NET? Suppose you have a code that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5237068646077425794" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_LpI2jvI5gPU/SK3OL7nH6II/AAAAAAAAACE/k9E9atJrCzU/s320/Date_Variable_1.gif" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;What you will notice in the above code is that even if you set the variable to "Nothing" for a variable of type "Date", when you put a break point and look inside the variable, it shows the value #12:00:00 AM#! You may feel cheated at this point and throw your hands up, shouting "What gives?" Don't give up quite yet though, because your value of nothing IS actually in there. Try modifying the code to the following now:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5237070901821640402" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 319px; CURSOR: hand; HEIGHT: 95px; TEXT-ALIGN: center" height="118" alt="" src="http://1.bp.blogspot.com/_LpI2jvI5gPU/SK3QPO6dDtI/AAAAAAAAACM/foXKjAYCBLU/s320/Date_Variable_2.gif" width="356" border="0" /&gt;&lt;/p&gt;&lt;p&gt;Run the code, and you will get a message prompt indicating that the variable does in fact contain "Nothing"! &lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5237071529109954450" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_LpI2jvI5gPU/SK3QzvvpH5I/AAAAAAAAACU/qEz0UzB8i24/s320/Date_Variable_3.gif" border="0" /&gt;&lt;/p&gt;&lt;p&gt;That's because for a variable of type "Date" in .NET, #12:00:00 AM# is infact "Nothing"! If you really have your heart set on having nothing in the Date variable, you can try this instead:&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5237073543969989410" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_LpI2jvI5gPU/SK3SpBrtYyI/AAAAAAAAACc/_4WZBhJVQSQ/s320/Date_Variable_4.gif" border="0" /&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Obvious to some people, not so obvious for others. Lesson learned.&lt;/p&gt;&lt;p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7280224997542422704?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7280224997542422704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7280224997542422704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7280224997542422704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7280224997542422704'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/08/not-so-nullable-net-date-data-type.html' title='The not so nullable .NET Date Data Type!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LpI2jvI5gPU/SK3OL7nH6II/AAAAAAAAACE/k9E9atJrCzU/s72-c/Date_Variable_1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-4814101898267123884</id><published>2008-06-24T10:31:00.000-07:00</published><updated>2008-06-24T11:09:18.154-07:00</updated><title type='text'>MSBuild Extras (MSBee) - Who should use it?</title><content type='html'>For those of us who are not yet familiar with this product, MSBuild Extras Toolkit for .NET 1.1 (MSBee for short) is an addition to the Visual Studio 2005 MSBuild compile engine that allows developers to compile .NET 1.1 applications from within Visual Studio 2005. Normally, Visual Studio 2005 is only able to produce .NET 2.0 assembly (3.0 as well if you install the add-on). MSBee is however not fit to be used as the means to generate a multi project enterprise level solution in both 1.1 and 2.0 Framework. Here are some general limitations of this tool:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.codeplex.com/MSBee"&gt;MSBee&lt;/a&gt; is a command line utility: MSBee can only be used from the command line, NOT from within Visual Studio 2005, unless you write a Visual Studio Macro to automate it from within the VS Development environment. But even then it will still remain a command line utility with all the limitations of such type utilities.&lt;br /&gt;&lt;br /&gt;2. No Support for Partial Classes: As part of the process to use MSBee you have to convert the VS 2003 project to a VS 2005 project using automated converters. During this process, any web references in the VS 2003 application are converted to use the VS 2005 format of web references, which uses Partial Classes. Any code in Visual Studio that uses Partial Classes will generate an error when run through MSBee. In addition any NEW Windows Form created in Visual Studio 2005 will use Partial Classes and Generics, neither of which are supported in .NET 1.1.&lt;br /&gt;&lt;br /&gt;3. MSBee is not ideal for multi-project solutions: MSBee can only compile one project at a time. This means that if you have a solution that has 50 sub-projects in it, you will have to compile them one by one!&lt;br /&gt;&lt;br /&gt;4. No support for any bugs, questions or issues: The MSBee project discussion page which can be found &lt;a href="http://www.codeplex.com/MSBee/Thread/List.aspx"&gt;HERE&lt;/a&gt; seems very much dead! You may post a question on their forum and not get a reply back to it EVER! I personally have also tried posting questions on several very active forums such as MSDN MSBuild forum with no response what so ever! Usually this means that the technology is pretty much dead!&lt;br /&gt;&lt;br /&gt;5. MSBee does NOT produce .NET 1.1 CAB Files: So if you use CAB files to distribute your DLL with your application you are out of luck!&lt;br /&gt;&lt;br /&gt;6. No way to step through the MSBee compiled code: When you generate .NET 1.1 assembly using MSBee, if you encounter Errors and Warnings, there is no way for you to step through the code using Visual Studio 2005! This makes debugging complex errors close to impossible.&lt;br /&gt;&lt;br /&gt;So based on the above issues and the 2 week long testing that I performed analyzing this utility, I would recommend that developers should only use MSBee on either a few individual libraries in your VS 2005 solution that are not yet ready for your conversion during a transition phase OR a very simple Windows Form application that doesn't have many sub-projects and does not require constant changing. The technology however is not reliable enough for a Complex Enterprise Level Solution.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-4814101898267123884?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/4814101898267123884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=4814101898267123884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4814101898267123884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4814101898267123884'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/06/msbuild-extras-msbee-who-should-use-it.html' title='MSBuild Extras (MSBee) - Who should use it?'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7149147611190929069</id><published>2008-06-01T20:01:00.000-07:00</published><updated>2008-06-24T11:10:21.286-07:00</updated><title type='text'>Supporting Multiple Versions of the Framework with one application</title><content type='html'>Supporting different versions of the .NET Framework has been a much talked about issue for me for as long as the Framework has been around. Especially beginning with the .NET 2.0 Framework, with all the code breaking changes that went along with it. Code breaking changes come in two flavors:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa570327.aspx"&gt;Design-Time breaking changes&lt;/a&gt;: These are changes that would only effect you, if you for example have a 1.0 or 1.1 application, and you convert and try to run the application in Visual Studio 2005, with .NET 2.0. If you don't convert or re-compile your lower framework edition application, these changes are not an issue. &lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa497239.aspx"&gt;Runtime breaking changes&lt;/a&gt;: These are the breaking changes that can impact your application in a big way, if you are planning to support multiple versions of the framework with one application. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;So what does that mean in plain english you may ask. The idea is the following: Lets say you have an Enterprise Level Application written in .NET 1.0 or 1.1, with which you are currently supporting people running Windows 2000 and XP. Considering that Windows XP is nearing its End of Life (you can no longer buy new machines with Windows XP installed on them very soon), you are probably thinking about making your application compatible with Windows Vista right about now. Your two options are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Program and Support multiple versions of your application for different versions of .NET Framework. &lt;/li&gt;&lt;li&gt;Have only ONE version of your application that targets all 3 versions of the above 3 Frameworks editions. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Up to a few month ago, if someone would have told me that option #2 existed I would have laughed at them, but it is TRUE! Here is how the whole thing plays out. &lt;/p&gt;&lt;p&gt;Do a test conversion of your application's conversion to the higher version of the framework. What this will give you is a FULL list of warnings and errors that would break your application. ALL the code breaking changes can then be fixed in the lower version of the framework! In other words by doing a Pre-Qualification test and fixing the errors in the lower version of the framework, you will prevent those errors from ever happending in the first place. Go back and fix all the warnings and errors that would otherwise break your application. Make sure to fix them in the lowest version of the framework you want to support. &lt;/p&gt;&lt;p&gt;Once the code breaking changes are fixed, all you have to do is to add the following to the "startup" section of your application's "config" file:&lt;/p&gt;&lt;p&gt;&amp;lt;supportedruntime version="v2.0.50727"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;supportedruntime version="v1.1.4322"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;supportedruntime version="v1.0.3705"/&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;&lt;supportedruntime version="v2.0.50727"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;&lt;supportedruntime version="v1.1.4322"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;&lt;supportedruntime version="v1.0.3705"&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;supportedruntime version="v2.0.50727"&gt;That's it! Lets say now that you run your application on a Vista Machine which doesn't have .NET 1.0 and 1.1 installed on it by default. Your application will Automatically choose the higher version of the Framework and run using that version of the Framework. Assuming that you have already taken care of all the code breaking changes, you can now support 3 different versions of the Framework at the same time with only 1 Version of your application!&lt;br /&gt;&lt;br /&gt;If you have any comments or questions in this regard, feel free to contact me. I would love to get some feedback on this issue, or any other programming related issues you come across.&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7149147611190929069?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7149147611190929069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7149147611190929069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7149147611190929069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7149147611190929069'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/06/supporting-multiple-versions-of.html' title='Supporting Multiple Versions of the Framework with one application'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7026755347928538992</id><published>2008-05-15T12:12:00.000-07:00</published><updated>2008-05-15T12:45:30.453-07:00</updated><title type='text'>VS .NET Code executing differently on different machines!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Not all .NET code are created equal?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Wait a minute, I thought the whole point of having a programming framework was to allow code to execute the same way and with ease regardless of the hardware! When I first got a bug report which basically indicated that the same program written in the same version of the .NET Framework executed differently (and produced numerous bugs) my first reaction was "IMPOSSIBLE!". But upon further testing and inspection I confirmed this issue or glitch as I like to call it.&lt;br /&gt;&lt;br /&gt;The problem is not exactly that the same routine produces different results, but that due to a set of events firing in a specific order, the outcome of your code may be different on different machines.&lt;br /&gt;&lt;br /&gt;Consider the following case. Suppose you have a .NET 1.0 application, that was later upgraded to .NET 1.1 (Visual Studio 2003). Some possible client machine configuration:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Having .NET 1.1 ONLY on a machine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is probably the ideal case for a .NET 1.1 Application. All built in events such as "Change" and "Validate" will fire as needed and everyone will be happy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Having .NET 1.1 AND 2.0 on a machine side by side. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In some instances, depending on if the client machine has both .NET 1.1 and 2.0 installed, built in form events "SPECIALLY" Validation routines were found to fire when there was no reason for them to fire (i.e. no data was changed to cause a Validation routine to fire, but a Validation fired on several text boxes and combo boxes while changing tabs in a tab control unrelated to either of the two!&lt;br /&gt;&lt;br /&gt;The closest thing to an answer that I was able to find to this issue was that even though your application was written to use .NET 1.1, the .NET CLR still chooses the CLR of the higher version of .NET for some Windows Form related events. It just so happens that the developers who wrote this application also had both .NET 1.1 and 2.0 installed on their machine, as well as the QA staff that QA Tested the application. When the application was deployed to the field, several user machines which were Thin-Client machines were not able to run both .NET 1.1 and 2.0 side by side (due to hardware limitations), which resulted in the above set of bugs.&lt;br /&gt;&lt;br /&gt;So watch out for this one people, because it is VERY hard fix bugs like this! I would love to hear from other people who have run into this issue, so if you have anything to add to this, please let me know!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7026755347928538992?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7026755347928538992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7026755347928538992' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7026755347928538992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7026755347928538992'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/05/vs-net-code-executing-differently-on.html' title='VS .NET Code executing differently on different machines!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7902359720544905565</id><published>2008-03-18T17:43:00.000-07:00</published><updated>2008-04-25T09:27:14.711-07:00</updated><title type='text'>Upgrading from Visual Studio 2003 .NET 1.1 to Visual Studio 2005 .NET 2.0 Project</title><content type='html'>No matter how great your Application works with .NET 1.0 or 1.1, sooner or later people around you are going to start talking about the many advantages of converting it to a 2.0 Project. Not just because the grass is always greener on the other side, but because it is a known fact that the .NET 2.0 Development and Runtime Environment are a lot more stable then 1.0 or 1.1. In addition, Windows Vista does not by default ship with the .NET 1.0 or 1.1 Framework, and although it is possible to run .NET 1.1 on Vista it is NOT recommended to do so (which usually means you can expect plenty of bugs if you do use 1.1).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The actual conversion process from a Visual Studio 2003 (.NET 1.1) Project to a Visual Studio 2005 (.NET 2.0) Project is in fact an automated process. That still however does NOT mean that you won't have any errors and warnings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So what are some of the Errors and Warnings you are likely to encounter during this conversion process? Bellow is a short list of some of the more common ones and a suggested way to solve the problem. This list is a list of common errors along with a suggested solution that “should” work in most cases. Please note that each occurrence of the warning or error needs to be evaluated on a case by case basis to make sure that it does not change the overall flow, meaning or functionality of the application:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Option Strict On disallows operands of type Object for operator ‘=’&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;Select Case loComboBox.SelectedItem&lt;br /&gt;Case "Value 1"&lt;br /&gt;' Code Here&lt;br /&gt;Case "Value 2"&lt;br /&gt;' Code Here&lt;br /&gt;...&lt;br /&gt;End Select&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Corrected:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Select Case CType(loComboBox.SelectedItem)&lt;br /&gt;Case "Value 1"&lt;br /&gt;' Code Here&lt;br /&gt;Case "Value 2"&lt;br /&gt;' Code Here&lt;br /&gt;...&lt;br /&gt;End Select&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Variable ‘VariableName’ is used before it has been assigned a value&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim loVariable As Object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C&lt;strong&gt;orrected:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim loVariable As Object = Nothing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Variable ‘VariableName’ is passed by reference before it has been assigned a value&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#3366ff;"&gt;Dim lsVariable As String&lt;br /&gt;Me.Add(New User(lsVariable))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Corrected:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim lsVariable As String = Nothing&lt;br /&gt;Me.Add(New User(lsVariable))&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;4. Unused local variable: ‘VariableName’&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;In most cases if the variable is actually not used anywhere it can be deleted. If public and inside of object, it will need to be initiated to “Nothing”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5. Unreachable code detected&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;War This warning simply means that you have written a code segment which can not ever be reached. For example:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public Function MyFunction (ByVal lsParameter As String) As String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Dim lsString as String = lsParameter&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Return lsString&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;' Do some more work here that doesn't get executed ever&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Return lsString2&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Corrected:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public Function MyFunction (ByVal lsParameter As String) As String&lt;br /&gt;Dim lsString as String = lsParameter&lt;br /&gt;Return lsString&lt;br /&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6. Type of Parameter ‘ListViewName’ is not CLS-compliant&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Mark Parameter as CLS Non-Compliant using “&lt;clscompliant&gt; _”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;7. Type of Member ‘MemberName’ is not CLS-compliant&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Mark Member as CLS Non-Compliant. using “&lt;clscompliant&gt; _”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;8. Name ‘VariableName’ is not CLS-compliant&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Mark Variable as CLS Non-Compliant using “&lt;clscompliant&gt; _”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;9. Return type of function ‘FunctionName’ is not CLS-compliant&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Mark Function as CLS Non-Compliant using “&lt;clscompliant&gt; _”.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;10. Variable declaration without an ‘As’ clause; type of Object assumed.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Private LandingLockObject = New Object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Corrected:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Private LandingLockObject As Object = New Object&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;11. Function ‘FunctionName’ does not return a value on all code paths&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public Function SpecialKey(ByVal keydata As Keys) As String Implements iTerminalEmulator.SpecialKey&lt;br /&gt;Dim lsReturn As String&lt;br /&gt;&lt;br /&gt;Select Case keydata&lt;br /&gt;Case Keys.Left&lt;br /&gt;lsReturn = Chr(8)&lt;br /&gt;Case Keys.Down&lt;br /&gt;lsReturn = Chr(10)&lt;br /&gt;Case Keys.Back&lt;br /&gt;lsReturn = Chr(8)&lt;br /&gt;Case Keys.Escape&lt;br /&gt;lsReturn = Chr(27)&lt;br /&gt;Case Keys.Tab&lt;br /&gt;lsReturn = Chr(9)&lt;br /&gt;Case Else&lt;br /&gt;lsReturn = ""&lt;br /&gt;End Select&lt;br /&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Corrected:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Public Function SpecialKey(ByVal keydata As Keys) As String Implements iTerminalEmulator.SpecialKey&lt;br /&gt;Dim lsReturn As String&lt;br /&gt;&lt;br /&gt;Select Case keydata&lt;br /&gt;Case Keys.Left&lt;br /&gt;lsReturn = Chr(8)&lt;br /&gt;Case Keys.Down&lt;br /&gt;lsReturn = Chr(10)&lt;br /&gt;Case Keys.Back&lt;br /&gt;lsReturn = Chr(8)&lt;br /&gt;Case Keys.Escape&lt;br /&gt;lsReturn = Chr(27)&lt;br /&gt;Case Keys.Tab&lt;br /&gt;lsReturn = Chr(9)&lt;br /&gt;Case Else&lt;br /&gt;lsReturn = ""&lt;br /&gt;End Select&lt;br /&gt;Return lsReturn&lt;br /&gt;End Function&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;12. Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Happens when either a Shared member in a class is not referenced through the class name, or two programming elements have the same name (for example you have a function and a variable both of which have the same name). To solve, either use the name of class or structure that defines the Shared Member to access it, or look through the code and either rename the variable or the function to something different.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7902359720544905565?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7902359720544905565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7902359720544905565' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7902359720544905565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7902359720544905565'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/03/upgrading-from-visual-studio-2003-net.html' title='Upgrading from Visual Studio 2003 .NET 1.1 to Visual Studio 2005 .NET 2.0 Project'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-4296168230665797260</id><published>2008-01-06T15:47:00.000-08:00</published><updated>2008-01-06T17:36:45.306-08:00</updated><title type='text'>Second Life: A Virtual World for Real Science!</title><content type='html'>For those of you who have never heard of "&lt;a href="http://www.secondlife.com/"&gt;Second Life&lt;/a&gt;", it is an online 3D Virtual Environment that has been built entirely by its users using a set of built in utilities and basic 3-Dimensional Shapes and modifying their size and texture. At first glance the game reminded me a bit of another 3D Game called "Sims". But soon I realized that this one is a lot more then just a game, its a virtual paradise for Scientists, Engineers, Programmers, 3D Animators as well as the average user that knows nothing about any of the above skills all at the same time.&lt;br /&gt;&lt;br /&gt;The beauty of Second Life is that it can be as simple or as complex to users as they want it to be. If the user is simply trying to use Second Life to socialize with other users, they can do that and never have to touch a program or create a single graphic object by simply using what others have already created. On the other hand advanced users can use a combination of 3D Modeling and Programming, along with a set of Second Life Physical properties such as Gravity and Wind to build and test real life structures and create a visually presentable version of their design concepts, which can then immediately be experienced by other users! Here is an example of the types of structure that are possible in Second Life:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_LpI2jvI5gPU/R4F-Pwkqo_I/AAAAAAAAAB8/YGRX7fkxEQk/s1600-h/barcamp_second_life.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5152538257890386930" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_LpI2jvI5gPU/R4F-Pwkqo_I/AAAAAAAAAB8/YGRX7fkxEQk/s320/barcamp_second_life.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a programmer who has been on the World Wide Web from the beginning, I see Second Life type technologies as the future of the Internet. Imagine an Internet where you can touch, feel and see things in 3 dimensions, and where you can design actual store fronts to have visitors "Walk" through the door and pick up products and experience it first hand before buying!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-4296168230665797260?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/4296168230665797260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=4296168230665797260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4296168230665797260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4296168230665797260'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2008/01/second-life-virtual-world-for-real.html' title='Second Life: A Virtual World for Real Science!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_LpI2jvI5gPU/R4F-Pwkqo_I/AAAAAAAAAB8/YGRX7fkxEQk/s72-c/barcamp_second_life.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-4622404040058409716</id><published>2007-12-08T10:12:00.000-08:00</published><updated>2010-09-10T20:36:49.739-07:00</updated><title type='text'>Running C# .NET Applications On Fedora 8 Linux</title><content type='html'>One of the main challenges and the reason most corporations choose to target a windows operating system for their custom applications is that developing custom linux applications is not something that most entry level developers know how to do. To acomplish this they would have to rely on some of the most unreliable groups of programmers to control in the business: The Linux GUI or Java GUI Developers, both of which are hard to find, and even harder to manage. Some have even been known to walk off of jobs just because they weren't given enough of a say on how their master pieces should run and function!&lt;br /&gt;&lt;br /&gt;The .NET Framework is changing all of that through the use of the Mono Project. The Mono Framework, is a Framework that is essentially a carbon copy of all the libraries in the original .NET Framework, compiled for other platforms like Linux, Mac OS X, Solaris and even Nokia 770 and 800 Devices! This puts the .NET Framework a step ahead of other frameworks like Java, because of the fact that it turns your standard C# developer (very easy to please group) to do the work that Java type developers used to do. Needless to say that this phenomenon is speading like wildfire through more and more coprorations, because now you can develop applications on your standard Windows .NET Development environment, and have it run on Linux, which comes free! To make things even more convinient, you can even write Webservices and other types of .NET Applications for Linux!&lt;br /&gt;&lt;br /&gt;It shouldn't come as a big surprise therefore that Fedora 8 Linux distribution (Redhat) comes with the Mono framework pre-installed fresh out of the box. I have also noticed a surge in the number of open source C# linux projects on open source community sites like SourceForge.net that take advantage of the Mono framework to write fairly complex linux applications in record time, and take advantage of the CLR type debugging that the framework has to offer to find bugs and fix them even faster.&lt;br /&gt;&lt;br /&gt;Most developers at one point or another have thought about installing a linux OS on a Virtual Machine like "Microsoft Virtual PC 2007", which can be downloaded for free &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=04D26402-3199-48A3-AFA2-2DC0B40A73B6&amp;amp;displaylang=en"&gt;HERE&lt;/a&gt; simply because that way they wouldn't have to take up a whole PC for testing on a Linux OS, and at the same time this allows them to try out several different flavors (distributions) of linux on the same machine. Most of you however are discouraged when you notice that neither your Mouse, Nor your Display (either one or both) functions, which eventually forces you to delete the whole virtual PC and forget about linux yet once more, cursing Microsoft for not making their Programs a bit more competitor friendly! I am here however to tell you that it IS POSSIBLE to run a Linux OS on a Virtual Machine (with a few tweaks to the grub booting agent).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;THE OPERATING SYSTEM - Fedora 8&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;For my experiment with the Mono Framework, I choose Fedora 8, since I have worked with other Redhat products in the past, and find it to be one of the most active Linux distributions out there. I probably would have considered Open SuSE 10.3 instead, if they had the mono framework preinstalled on it like Fedora 8 does (call me lazy, but that's a good hour or two that I don't have to keep messing with the OS to get mono working correctly, which I can spend on other thing like figuring out how to run the OS on Virtual PC and work).&lt;br /&gt;&lt;br /&gt;So go ahead and grab the ISO image for Fedora 8 from &lt;a href="http://download.fedoraproject.org/pub/fedora/linux/releases/8/Fedora/i386/iso/Fedora-8-i386-DVD.iso"&gt;HERE&lt;/a&gt;. This is the DVD ISO image, which you have to burn on a DVD to install Fedora 8. Other download options can be found &lt;a href="http://fedoraproject.org/get-fedora"&gt;HERE&lt;/a&gt;. Be prepared to take a nice long 3-4 hour coffee break while it is downloading, just don't overdue it with the coffee, because then you got to take a bathroom break every 5 minutes while trying to do the work, and that makes it hard to focus on the task at hand. :)&lt;br /&gt;&lt;br /&gt;While you are waiting for the Fedora image to download, go ahead and grab a copy of Microsoft Virtual PC 2007 for Free (special thanks to our good friend Billy Gates for that) from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=04D26402-3199-48A3-AFA2-2DC0B40A73B6&amp;amp;displaylang=en"&gt;HERE&lt;/a&gt;. I assume that everyone knows how to do a simple install of this, so I am not going to walk you through that part. I ran my experiment on a Windows XP SP 2, but Virtual PC does also install on Windows Vista (even though you get a warning that it is not a supported OS, but it still runs). Run Virtual PC, and you should see this screen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/R1rrJNArVLI/AAAAAAAAABU/CT1ke1sQJZo/s1600-h/Virtual_PC.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5141680467940693170" src="http://bp3.blogger.com/_LpI2jvI5gPU/R1rrJNArVLI/AAAAAAAAABU/CT1ke1sQJZo/s320/Virtual_PC.jpg" style="cursor: hand;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on "New" to create a new virtual PC. Hit "Next" to go to the next screen. Choose "Create a Virtual Machine" and hit "Next". On the next screen, enter "Fedora 8" for description and go to the next screen. Notice that it automatically selects OS of "Other" for you. Accept it and hit "Next". Check "Adjust the Ram" and enter 512 for your RAM. Select "A New Virtual Hard Disk", go to the next screen and select the default path and hard drive size and click "Finish" to complete.&lt;br /&gt;&lt;br /&gt;Hopefully your Fedora 8 download is done at this point. Burn the ISO image to a DVD with your favorite DVD burning software and pop it in your drive. You should have a new icon in your Virtual PC Console called "Fedora 8" at this point. Select it and click on "Start" to start the install process. You may have to reset the virtual machine once to get thei Fedora 8 installer to work right. Go to "Action &amp;gt; Reset" to reboot the Virtual Machine.&lt;br /&gt;&lt;br /&gt;The actual Fedora 8 installation is sadly not a very straight forward process, because you will have to tweak it to get the Mouse and Display to work right. I am not going to go through every detail of the install process, but to get the Display and Mouse to work correctly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On Install: Hit the &lt;tab&gt;button and add the following to the boot line:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #000099;"&gt;vmlinuz initrd=initrd.img vesa i8042.noloop&lt;/span&gt;&lt;/pre&gt;After Install: Stop reboot at the grup by hitting the ESC key or Spacebar. Press "e" to edit the boot line, and add the "i8042.noloop" to the second line. Hit "Enter" key followed by pressing the "b" key to boot.&lt;/tab&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To Fix Mouse Problem for good: After logging in, go to Applications &amp;gt; System Tools &amp;gt; Terminal, and enter the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #000099;"&gt;su&lt;br /&gt;nano /boot/grub/menu.lst&lt;/span&gt;&lt;/pre&gt;Go down to the line that starts with "Kernel" and add "i8042.noloop" to the end of that line. Press Ctrl+O to write out, hit "Enter" followed by a Ctrl+X to exit out. Reboot and you should be good to go. &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Running Standard .NET Applications&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Lets first start by logging in as your regular user. I have created two test applications using C#, which can be downloaded from my website. The Command Line Test Application can be downloaded &lt;a href="http://digioz.com/scripts/HelloWorldCS.exe"&gt;HERE&lt;/a&gt; and the GUI TEST Application from &lt;a href="http://digioz.com/scripts/HelloWorldGUICS.exe"&gt;HERE&lt;/a&gt;. Both of those are simple "Hello World!" type applications written in C#. One outputs it to the Command Prompt and the other pops up a GUI messagebox for it, to proove the concept.&lt;br /&gt;&lt;br /&gt;If you are a hardcore windows application developer, the first thing you will do is to double click on the executables once you have them downloaded on your Fedora Desktop. If you did that, you would see the following message:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/R1u_79ArVMI/AAAAAAAAABc/MEAX6OuUgfs/s1600-h/Fedora_Desktop_1.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5141914436284142786" src="http://bp3.blogger.com/_LpI2jvI5gPU/R1u_79ArVMI/AAAAAAAAABc/MEAX6OuUgfs/s320/Fedora_Desktop_1.jpg" style="cursor: hand;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You are NOT in Windows any more, so snap out of it! You can't just go around double clicking on a windows application on Linux! What you have to do instead is to call mono and have it launch your program for you instead. So lets do that real quick. Go to "Applications &amp;gt; System Tools &amp;gt; Terminal" and open a new Terminal window. Next, navigate to the folder you downloaded the "exe" files to (in my case its "/home/Pedram/Documents") and type "mono HelloWorldCS.exe". You will get the output "Hello World!" back, showing you that everything is working OK. Congratulations! You have just run your first .NET Application on Linux! Here is how your screen should look like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_LpI2jvI5gPU/R1vCatArVNI/AAAAAAAAABk/YWjOzqFeQQE/s1600-h/Fedora_Desktop_2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5141917163588375762" src="http://bp2.blogger.com/_LpI2jvI5gPU/R1vCatArVNI/AAAAAAAAABk/YWjOzqFeQQE/s320/Fedora_Desktop_2.jpg" style="cursor: hand;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Getting our GUI Application to run is a bit more complicated then this. Don't get me wrong, the process is exactly the same. But there are some file permission issues with it that I myself have yet to figure out. So lets do the same for our GUI Application. Type "mono HelloWorldGUICS.exe" in your Terminal Window. Here is what you expect to see:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/R1vD39ArVOI/AAAAAAAAABs/_h7DvNWzIrg/s1600-h/Hello_World_GUI_Fedora_8.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5141918765611177186" src="http://bp3.blogger.com/_LpI2jvI5gPU/R1vD39ArVOI/AAAAAAAAABs/_h7DvNWzIrg/s320/Hello_World_GUI_Fedora_8.jpg" style="cursor: hand;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But instead, the first time you run it, you will see the following error:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/R1vFn9ArVPI/AAAAAAAAAB0/7kxEcb_Hd-I/s1600-h/Mono_GUI_App_Error_1.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5141920689756525810" src="http://bp3.blogger.com/_LpI2jvI5gPU/R1vFn9ArVPI/AAAAAAAAAB0/7kxEcb_Hd-I/s320/Mono_GUI_App_Error_1.jpg" style="cursor: hand;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That's because the first time you run the GUI "exe", mono tries to recompile it to a Linux compatible application before runnning it, but does not have permission to several critical GUI related libraries! Log out as your regular user, log back in as "root" user and try the same thing. This time you should get the correct message pop up.&lt;br /&gt;&lt;br /&gt;If you now go back and log in as your original user, you will notice that you can now run this application as your regular user as well! That's because the GUI Application has already been compiled by the root user, and Mono grabs that compiled version when you try to run the Application under a regular user.&lt;br /&gt;&lt;br /&gt;At this point you are probably ready to shout for joy, jump up and down and start coding all kinds of weird .NET GUI Applications for Linux. But with Fedora 8 being a newly release Operating System, and having the advanced security system on it that kind of behaves like Vista Security, there will be all kinds of error messages that will pop up here and there that will puzzle the heck out of you. If you do come across some weird error message that you would like to share with me or get my opinion on, email me at &lt;a href="mailto:webmaster@digioz.com"&gt;webmaster@digioz.com&lt;/a&gt; to talk about it. Best of luck with Mono!&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;Update 09/10/2010 - It has been quite a while since I wrote this blog entry. Fedora has had quite a few releases since this blog was written (they are now up to Fedora 13, where as in this blog I tested this on Fedora 8). Today I tested this same .NET Application, both command line and GUI on Fedora 13. Everything worked as before, with the only exception that for some reason Mono is no longer included with Fedora. You can however download it from this link and install the RPM to do your testing:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;a href="http://rpm.pbone.net/index.php3/stat/4/idpl/14046412/dir/fedora_13/com/mono-core-2.6.1-2.fc13.i686.rpm.html"&gt;http://rpm.pbone.net/index.php3/stat/4/idpl/14046412/dir/fedora_13/com/mono-core-2.6.1-2.fc13.i686.rpm.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-4622404040058409716?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/4622404040058409716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=4622404040058409716' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4622404040058409716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4622404040058409716'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/12/running-c-net-applications-on-fedora-8.html' title='Running C# .NET Applications On Fedora 8 Linux'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_LpI2jvI5gPU/R1rrJNArVLI/AAAAAAAAABU/CT1ke1sQJZo/s72-c/Virtual_PC.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-7514291820090221591</id><published>2007-10-05T08:42:00.000-07:00</published><updated>2007-10-05T09:07:42.504-07:00</updated><title type='text'>Eureka! Finally, a POS for .NET Compatible Credit Card Reader</title><content type='html'>After much searching on the web, calling some friends and asking them about it and banging my head against the wall a few times, I finally came across two Credit Card Reader devices that are both "POS for .NET" compatible: The Ingenico i3070 and i6550. Ironically enough the manufacturer does not advertise or even specify anywhere in the device specs that they are POS compatible (at least not as of the time of writing of this blog entry).&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;      i3070           i6550&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_LpI2jvI5gPU/RwZd87Ft0eI/AAAAAAAAABE/uxPcdkLSIVs/s1600-h/i3070.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5117881327788347874" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_LpI2jvI5gPU/RwZd87Ft0eI/AAAAAAAAABE/uxPcdkLSIVs/s320/i3070.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/RwZeMrFt0fI/AAAAAAAAABM/sx9kP2r5iAY/s1600-h/i6550.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5117881598371287538" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_LpI2jvI5gPU/RwZeMrFt0fI/AAAAAAAAABM/sx9kP2r5iAY/s320/i6550.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The datasheet for i3070 can be viewed &lt;a href="http://www.ingenico.com/INGENICO_GALLERY_CONTENT/Documents/corporate/products/PINPad/datasheet-i3070-uk.pdf"&gt;HERE &lt;/a&gt;and for i6550 &lt;a href="http://www.ingenico.com/INGENICO_GALLERY_CONTENT/Documents/corporate/products/PINPad/datasheet-i6550.pdf"&gt;HERE &lt;/a&gt;. A point of interest to me was the fact that there is no way to tell the device model or even determine if it is connected and functional or not, until you try to "claim" the device (at which time the device returns a hardware signature which contains the model name and OPOS version). Of course the above conclusion was the result of some 20+ email communication back and forth with Ingenico and several phone calls.&lt;br /&gt;&lt;br /&gt;Another issue which came up was due to the difference in display screen size, since the i3070 has a much smaller screen then the i6550. My goal was to support both model Credit Card Readers in the .NET Application I was writing, which I was able to do easily using POS for .NET. The font size for the display text however, is something I have not yet been able to change (and there doesn't seem to be an obvious setting to set it anywhere in POS for .NET library. More to come!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-7514291820090221591?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/7514291820090221591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=7514291820090221591' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7514291820090221591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/7514291820090221591'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/10/eureka-finally-pos-for-net-compatible.html' title='Eureka! Finally, a POS for .NET Compatible Credit Card Reader'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_LpI2jvI5gPU/RwZd87Ft0eI/AAAAAAAAABE/uxPcdkLSIVs/s72-c/i3070.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-1344840364118304153</id><published>2007-08-15T11:59:00.000-07:00</published><updated>2007-08-16T08:59:56.732-07:00</updated><title type='text'>Developing Windows Services using Visual Studio .NET Explained - Part 2</title><content type='html'>&lt;strong&gt;Creating Sample Service&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Bellow are the steps required to create the sample .NET Service used throughout the remainder of this article:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Startup Visual Studio, and select the "Visual Basic" node under "Project Types". Under Templates, select "Windows Service" and name the project "MyWinService". &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Under Solution Explorer, select the file name "Service1.vb", and change it to "MyWinService.vb" under Properties section.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open "MyWinService.vb" in design mode. Right-Click on the design area and choose "Add Installers". This will place two components called "ServiceProcessInstaller1" and "ServiceInstaller1" onto the design area. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select "ServiceInstaller1", change its name to "MyWinServiceInstaller". Also change the ServiceName from "Service1" to "MyWinService". &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Select "ServiceProcessInstaller1", and change its name to "MyWinServiceProcessInstaller". &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;The Code&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;By default, two Subroutines called "OnStart" and "OnStop" are created when you create a Windows Service. Here is what needs to be placed in each section of our Windows Service to get the sample service up and running:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Protected Overrides Sub OnStart(ByVal args() As String)&lt;br /&gt;EventLog.WriteEntry("MyService Started")&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Protected Overrides Sub OnStop()&lt;br /&gt;EventLog.WriteEntry("MyService Stopped")&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Protected Overrides Sub OnPause()&lt;br /&gt;EventLog.WriteEntry("MyService Paused")&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Protected Overrides Sub OnContinue()&lt;br /&gt;EventLog.WriteEntry("MyService Resumed")&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Protected Overrides Sub OnCustomCommand(ByVal command As Integer)&lt;br /&gt;If command = 200 Then&lt;br /&gt;EventLog.WriteEntry("Custom Command 200 invoked")&lt;br /&gt;ElseIf command = 210 Then&lt;br /&gt;EventLog.WriteEntry("Custom Command 210 invoked")&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To build the service, simply click on "Build &gt; Build MyWinService". This will create an executable file either in ".\bin\Release\" or ".bin\Debug" depending on if you compile it in Debug or Release mode.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Installing Windows Service&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;There are two ways to install a windows service:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;Using "InstallUtil.exe" for the correct .NET Framework Version. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;By Creating a "Setup and Deployment" project for your service. &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;When developing the windows service, it is a lot easier to use the Install Utility to install and uninstall your windows service. You do however have to keep track of the version of this utility corresponding to your development framework. For Visual Studio 2005, the .NET Framework 2.0 version of this utility will need to be used. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;If you have several versions of the Visual Studio installed on the same machine, and are actively developing using all of them, you may have the following 2 versions of this tool. Please note that depending on the subversion of the framework you have installed the actual version folder name may be different:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\InstallUtil.exe&lt;/p&gt;&lt;p&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe&lt;/p&gt;&lt;p&gt;Here are the steps to follow in order to use this utility and install your service: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Start command prompt by go "Start &gt; Run", typing "cmd" and pressing the "OK" button.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Navigate to the .NET Framework directory above that corresponds to your version of Visual Studio that you are using to develop the Windows Service (VS 2003 use 1.1, VS 2005 use 2.0). In my case that would be "&lt;span style="color:#3333ff;"&gt;c:&lt;/span&gt;" on command line followed by "&lt;span style="color:#3333ff;"&gt;cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&lt;/span&gt;". &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Invoke the Install Utility by typing &lt;span style="color:#3333ff;"&gt;InstallUtil "c:\[PATH TO YOUR SERVICE EXE]\MyWinService.exe"&lt;/span&gt; to register the windows service. Your screen should look something like this:&lt;/li&gt;&lt;/ul&gt;&lt;p align="center"&gt;&lt;a href="http://bp2.blogger.com/_LpI2jvI5gPU/RsRszVWjV3I/AAAAAAAAAAk/Oud8Z6Zv3Ys/s1600-h/081607_b1_i1.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5099320307251107698" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_LpI2jvI5gPU/RsRszVWjV3I/AAAAAAAAAAk/Oud8Z6Zv3Ys/s320/081607_b1_i1.gif" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You will be prompted to enter a username and password for the service that looks like this. The username that you enter here can be a domain user, entered in the form "domain\username". Enter both your username and password and hit "OK" to run the utility:&lt;/li&gt;&lt;/ul&gt;&lt;p align="center"&gt;&lt;a href="http://bp1.blogger.com/_LpI2jvI5gPU/RsRuDFWjV4I/AAAAAAAAAAs/v276HL7w5lc/s1600-h/081607_b1_i2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5099321677345675138" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_LpI2jvI5gPU/RsRuDFWjV4I/AAAAAAAAAAs/v276HL7w5lc/s320/081607_b1_i2.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Once the Utility is finished, you should see a screen output similar to the following:&lt;/li&gt;&lt;/ul&gt;&lt;p align="center"&gt;&lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/RsRvXlWjV5I/AAAAAAAAAA0/ru1ORU39frc/s1600-h/081607_b1_i3.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5099323129044621202" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_LpI2jvI5gPU/RsRvXlWjV5I/AAAAAAAAAA0/ru1ORU39frc/s320/081607_b1_i3.gif" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;The last step to running the service is to start it from the Service Control. To do this, navigate to "START &gt; Control Panel &gt; Administrative Tools &gt; Services" and start the Service Controller Interface. Scroll down until you see the name "MyWinService". Select that service, Right-Click on it and choose "Properties".&lt;br /&gt;&lt;br /&gt;The two important Tabs that we care about are the "General" and "Log On" tabs. On the General Tab, you will see a combo box called "Startup type", with the options "Manual", "Automatic" and "Disabled". Manual option means that the service will not start when windows starts up, while Automatic means that the service DOES start up every time windows starts. Click on the Log On tab. Here you can change the user, under which the service runs. You should have the user you entered in the Install Utility showing on this screen at this point. If you would rather run the service under the local system user, you can select the "Local System Account" radio button. Click "Apply" to accept your changes, then click back on the General Tab. Start the service by clicking on the "Start" button on this tab (alternatively you can start the service directly from the Service Controller by right clicking on the name of it and choosing "Start" from the context menu provided).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Event Log Entries&lt;/strong&gt;&lt;br /&gt;&lt;p&gt;By starting our custom made .NET Service, a new event log entry is made under the Application Log. To view the events of this log, go to "START &gt; Control Panel &gt; Administrative Tools &gt; Event Viewer" and select the "Application" log section on the left menu of the Event Viewer. &lt;/p&gt;This concludes Part 2 of this article. More to come in Part 3.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-1344840364118304153?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/1344840364118304153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=1344840364118304153' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1344840364118304153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1344840364118304153'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/developing-windows-services-using_15.html' title='Developing Windows Services using Visual Studio .NET Explained - Part 2'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_LpI2jvI5gPU/RsRszVWjV3I/AAAAAAAAAAk/Oud8Z6Zv3Ys/s72-c/081607_b1_i1.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-8101286802440036200</id><published>2007-08-15T08:50:00.000-07:00</published><updated>2007-08-15T09:45:14.453-07:00</updated><title type='text'>Developing Windows Services using Visual Studio .NET Explained - Part 1</title><content type='html'>&lt;strong&gt;Overview&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;One of the most difficult task for a entry to mid-level .NET programmer is debugging a .NET Windows Service while it is live. Even if you do have a development server that you can use, debugging existing code may seem a mysterious task at first. I remember a few years back when I was researching this topic on the web, no one gives you a straight and simple answer about this topic. So here is my attempt at simplifying this topic a bit.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Windows Service Architecture&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Service Application:&lt;/strong&gt; This type application is basically the actual Windows .NET Service that runs under Services. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Controller Application:&lt;/strong&gt; This type of application enables you to control the behavior of an existing application, start, stop, pause and continue a service. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Control Manager: &lt;/strong&gt;This is a utility that comes with Windows that enables you to control all services that are installed on a computer. It can be found at "Control Panel &gt; Administrative Tools &gt; Services".&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Namespaces&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Windows Service: &lt;/strong&gt;System.ServiceProcess&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Installer Namespaces: &lt;/strong&gt;System.ServiceProcess.ServiceInstaller and ServiceProcessInstaller&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Controller: &lt;/strong&gt;System.ServiceProcess.ServiceController&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Registry Information&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The registry location that contains a list of all services running on a Windows Machine is:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is how a typical registry entry looks when a .NET Service is installed:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_LpI2jvI5gPU/RsMpYM4wdcI/AAAAAAAAAAc/SZ0rV-FEEkk/s1600-h/081507_b1_i1.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5098964698866415042" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_LpI2jvI5gPU/RsMpYM4wdcI/AAAAAAAAAAc/SZ0rV-FEEkk/s320/081507_b1_i1.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The most notable one is the "ImagePath" entry, which contains the path to the executable that runs the service. This value can be change to point to different versions of the service executable for testing purposes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Important Notes&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Services HAVE TO be installed before running them the executable, in order to use them. You can NOT simply press RUN in Visual Studio and run them that way, or double click on the executable and expect to interact with them!&lt;/li&gt;&lt;li&gt;You can NOT debug Windows Services using F5, F10 or F11 stepping through code method. In order to be able to do that, the service has to be installed, started under Windows Service Controller, and its process HAS to be attached to its source code in Visual Studio. &lt;/li&gt;&lt;li&gt;Any Message Boxes, Dialog Boxes, or Windows Forms opened or used by a Windows Service are HIDDEN from the user, unless you check the checkbox under Service Properties that says "Interact with Desktop", in which case you will see them all!&lt;/li&gt;&lt;li&gt;Error Messages that occur in a Windows Service are logged in the Machine's "Event Log".&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Methods Available&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The following is a list of Methods that can / have to be overriden in order to run the service successfully or run a Service Controller Application:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Methods of Service Base Class (to Override)&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;OnStart()&lt;/li&gt;&lt;li&gt;OnPause()&lt;/li&gt;&lt;li&gt;OnStop()&lt;/li&gt;&lt;li&gt;OnContinue()&lt;/li&gt;&lt;li&gt;OnShutDown()&lt;/li&gt;&lt;li&gt;OnCustomCommand()&lt;/li&gt;&lt;li&gt;OnPowerEvent()&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Methods of Service Controller Class&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Close()&lt;/li&gt;&lt;li&gt;Continue()&lt;/li&gt;&lt;li&gt;ExecuteCommand()&lt;/li&gt;&lt;li&gt;Pause()&lt;/li&gt;&lt;li&gt;Refresh()&lt;/li&gt;&lt;li&gt;Start()&lt;/li&gt;&lt;li&gt;Stop()&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;More on this topic to come in Part 2. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-8101286802440036200?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/8101286802440036200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=8101286802440036200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8101286802440036200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/8101286802440036200'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/developing-windows-services-using.html' title='Developing Windows Services using Visual Studio .NET Explained - Part 1'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_LpI2jvI5gPU/RsMpYM4wdcI/AAAAAAAAAAc/SZ0rV-FEEkk/s72-c/081507_b1_i1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-1403153613148052899</id><published>2007-08-07T11:17:00.000-07:00</published><updated>2007-08-07T11:41:27.137-07:00</updated><title type='text'>SelectedIndexChanged event not firing for ListView in .NET 1.1</title><content type='html'>With .NET 1.1 / Visual Studio 2003 having been out for a good 4 years and already service packed by Microsoft once, its not every day that you come across a bug that really messes things up for a developer. This one however is definately one of those bugs that throws a developer off track and puzzles the heck out of them.&lt;br /&gt;&lt;br /&gt;For example, lets say we have a ComboBox called ComboBox1 and a ListView called ListView1, both of which contain a range of items 1 through 20 on their list of items. Also, suppose you have the "MultiSelect" property of the ListView set to "False". Now lets say we want to select the same item on the combo box, everytime an item is selected in the ListView. Our&lt;br /&gt;SelectedIndexChanged Event may look something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;color:#000099;"&gt;&lt;em&gt;Dim lvItem As New ListViewItem&lt;br /&gt;lvItem = ListView1.SelectedItems.Item(0)&lt;br /&gt;ComboBox1.SelectedItem = lvItem.SubItems(0).Text&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Which would be a valid way to acomplish this task. If you however run the above code, you will see the following error message:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in system.windows.forms.dll&lt;br /&gt;Additional information: Specified argument was out of the range of valid values.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;/span&gt;&lt;br /&gt;If you put a break on the last line of the code and step through the code, you will notice that the "SelectedIndexChanged" event fires not once but TWICE! The reason for this is that .NET 1.1 does NOT clear the Selected Item in the collection after the event fires the first time, but it really should! So a simple way to fix this error would be to change your code to the following instead (to force the Selected Item to clear after the event is fired):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:85%;color:#000099;"&gt;lvItem = ListView1.SelectedItems.Item(0)&lt;br /&gt;ComboBox1.SelectedItem = lvItem.SubItems(0).Text&lt;br /&gt;ListView1.SelectedItems.Clear()&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Another way to accomplish the same thing (without clearing the list) would be to do the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#000099;"&gt;&lt;em&gt;If ListView1.SelectedItems.Count &gt; 0 Then&lt;br /&gt;        Dim lvItem As New ListViewItem&lt;br /&gt;        lvItem = ListView1.SelectedItems.Item(0)&lt;br /&gt;        ComboBox1.SelectedItem = lvItem.SubItems(0).Text&lt;br /&gt;End If&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This bug HAS been fixed in .NET 2.0 or higher, and is only true for .NET 1.0 or 1.1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-1403153613148052899?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/1403153613148052899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=1403153613148052899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1403153613148052899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/1403153613148052899'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/selectedindexchanged-event-not-firing.html' title='SelectedIndexChanged event not firing for ListView in .NET 1.1'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-6630504196601541608</id><published>2007-08-03T09:09:00.000-07:00</published><updated>2007-08-03T22:20:39.648-07:00</updated><title type='text'>The on-going quest to find an MSR with a Native .NET compatible driver!</title><content type='html'>One would think that in the .NET day and age, finding an MSR Credit Card reader which uses a Native .NET driver to operate would be a trivial task. That is not the case as far as I can see after several weeks of research. What I mean by a Native .NET driver of course is a self explaining .NET driver that does not require an ActiveX OCX or ActiveX DLL registration on the machine it is going to be deployed on.&lt;br /&gt;&lt;br /&gt;I was given a task of integrating an Ingenico eN-Crypt 2100 with an existing .NET Application, which used a Strong Name Key for the assembly. Some problems that we encountered were:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;InterOp / Ax incompatibility with Strong Name Key assemblies: It turns out when you turn a .NET Assembly into a strong name assembly, even though InterOp will still convert the OPOS ActiveX OCX for you, you won't be able to simple drag and drop the OPOS MSR components onto an Application Form. So the ActiveX component will have to be converted to InterOp + Ax component using the strong name converter provided by Visual Studio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OPOS OCX requires registration on deployment machine: One of the beauties of the .NET Technology is the fact that none of the Native .NET DLLs require registration on the target machine. If you have one such application, and want to keep it that way, having to register an OCX on the target machine is NOT an option. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Re-imaging / downloading drivers into the device not possible: As relating to the Ingenico eN-Crypt 2100, I blame poor design on the Manufacturer's part for this issue. For some reason unless you are willing to spend a whole day messing around with the device to try and re-image / reset the driver onto it, the device simply refuses to work on a standard Windows 2000 or Windows XP Workstation once it has already been imaged once. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Of course getting the manufacturer's support line to admit the above faults/issues took some 50+ emails and several conversations over the phone. &lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/RrQJ9c4wdbI/AAAAAAAAAAU/aMHI2soyy7E/s1600-h/icon_biggrin.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5094708029793793458" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_LpI2jvI5gPU/RrQJ9c4wdbI/AAAAAAAAAAU/aMHI2soyy7E/s320/icon_biggrin.gif" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;strong&gt;Enter Microsoft Point Of Service for .NET (POS for .NET)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The whole reason Microsoft released this .NET library was to allow developers to deal with issues like the issues above. Yet for some reason not a single MSR Manufacturer supports this library to date (8/4/07). NOT EVEN ONE!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have never heard of this library before, you can grab a copy of it at the following URL:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Actual Driver: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=6025B728-EC06-48F9-BC80-C38B2A27A242&amp;displaylang=en"&gt;Microsoft POS for .NET 1.1&lt;/a&gt;&lt;br /&gt;Developer SDK: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=B04C4D8B-88AD-4F6D-AC0D-14490241CDB4&amp;amp;displaylang=en"&gt;POS for .NET 1.1 SDK &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The developer SDK actually contains sample applications in both C# and VB.NET for developers to run. But please, if anyone ever does find an MSR Manufacturer that supports this .NET Library, do let me know. &lt;a href="http://bp3.blogger.com/_LpI2jvI5gPU/RrQJ9c4wdbI/AAAAAAAAAAU/aMHI2soyy7E/s1600-h/icon_biggrin.gif"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-6630504196601541608?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/6630504196601541608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=6630504196601541608' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/6630504196601541608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/6630504196601541608'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/on-going-quest-to-find-msr-with-native.html' title='The on-going quest to find an MSR with a Native .NET compatible driver!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_LpI2jvI5gPU/RrQJ9c4wdbI/AAAAAAAAAAU/aMHI2soyy7E/s72-c/icon_biggrin.gif' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-4476724489505025894</id><published>2007-08-02T14:00:00.000-07:00</published><updated>2007-08-02T14:22:57.444-07:00</updated><title type='text'>The debugger is not properly installed.  Run setup to install or repair the debugger.</title><content type='html'>While trying to attach a Windows .NET Service running on a remote server to its source code on my developer machine in order to debug the service, I encountered the following Error:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Error:&lt;/strong&gt; "The debugger is not properly installed. Run setup to install or repair the debugger."&lt;br /&gt;&lt;br /&gt;As for the cause of the problem, I think it started happening since I installed the Beta 1 version of Visual Studio 2008 (Code Name Orcas), so that was my first guess as to what triggered the problem. After researching the matter through several search engines I came across the following solutions for fixing this problem:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution 1:&lt;/strong&gt; Run the Visual Studio .NET Add / Remove feature from "Control Panel &gt; Add or Remove Programs", by selecting the correct version of Visual Studio and clicking on "Change/Repair" button. In my case this solution did not fix the problem.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution 2:&lt;/strong&gt; Reinstall .NET Framework debugging services.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open command prompt&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Type "cd /d %windir%\Microsoft.NET\Framework\&lt;your&gt;"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;regsvr32.exe mscordbi.dll&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://bp0.blogger.com/_LpI2jvI5gPU/RrJHaM4wdaI/AAAAAAAAAAM/_PYBKiT1ycA/s1600-h/080207_b1_img1.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5094212643970905506" style="CURSOR: hand" alt="" src="http://bp0.blogger.com/_LpI2jvI5gPU/RrJHaM4wdaI/AAAAAAAAAAM/_PYBKiT1ycA/s320/080207_b1_img1.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Unfortunately, this solution did not fix my problem either.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Solution 3:&lt;/strong&gt; Manually register mdm.exe.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open command prompt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Type "%CommonProgramFiles%\Microsoft Shared\VS7Debug\mdm.exe" /regserver&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This solution did not work for me either. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Final Solution:&lt;/strong&gt; The problem seems to be in the path to the remote machine. The debugger doesn't seem to be able to access the network computer using the path specified. in the process attachment screen. In my case, the problem simply turned out to be due to the fact that I was trying to attach a process on a machine which was on a different domain, which did not allow access permission using our domain logon! &lt;/p&gt;&lt;p&gt;So the solution is to either add the remote server you want to attach a process from to the same domain as what you are on, or add your development pc to the other domain to be able to debug the remote server. &lt;/p&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-4476724489505025894?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/4476724489505025894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=4476724489505025894' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4476724489505025894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/4476724489505025894'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/debugger-is-not-properly-installed-run.html' title='The debugger is not properly installed.  Run setup to install or repair the debugger.'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_LpI2jvI5gPU/RrJHaM4wdaI/AAAAAAAAAAM/_PYBKiT1ycA/s72-c/080207_b1_img1.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2513751741660765205.post-9131592590741665323</id><published>2007-08-02T11:15:00.000-07:00</published><updated>2007-08-02T14:30:02.932-07:00</updated><title type='text'>Welcome to DigiOz Programming Blog!</title><content type='html'>Welcome! This is the official start of the DigiOz Programming Blog. I will try to share some of my findings related to every day programming experience both here at Blogger and on the DigiOz Multimedia website through the Blogger-Google API. So stay tuned!&lt;br /&gt;&lt;br /&gt;Pete Soheil&lt;br /&gt;DigiOz Multimedia&lt;br /&gt;&lt;a href="http://www.digioz.com/"&gt;http://www.digioz.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2513751741660765205-9131592590741665323?l=digioz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://digioz.blogspot.com/feeds/9131592590741665323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2513751741660765205&amp;postID=9131592590741665323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/9131592590741665323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2513751741660765205/posts/default/9131592590741665323'/><link rel='alternate' type='text/html' href='http://digioz.blogspot.com/2007/08/welcome-to-digioz-programming-blog.html' title='Welcome to DigiOz Programming Blog!'/><author><name>DigiOz Multimedia</name><uri>http://www.blogger.com/profile/02516884039586828298</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='14' src='http://2.bp.blogspot.com/_LpI2jvI5gPU/TL5Xkd6AExI/AAAAAAAAAHA/VjdiHatckAQ/S220/DigiOz_Logo_New.jpg'/></author><thr:total>0</thr:total></entry></feed>
