<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>AndrewEnsley.com &#187; C#</title> <atom:link href="http://andrewensley.com/tag/c/feed/" rel="self" type="application/rss+xml" /><link>http://andrewensley.com</link> <description>My little contribution to the WWW</description> <lastBuildDate>Mon, 06 Sep 2010 21:33:17 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <cloud domain='andrewensley.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <item><title>C# Detect Windows OS Version – Part 2 (WMI)</title><link>http://andrewensley.com/2009/10/c-detect-windows-os-version-%e2%80%93-part-2-wmi/</link> <comments>http://andrewensley.com/2009/10/c-detect-windows-os-version-%e2%80%93-part-2-wmi/#comments</comments> <pubDate>Thu, 08 Oct 2009 04:57:20 +0000</pubDate> <dc:creator>Andrew</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[.Net]]></category> <category><![CDATA[C#]]></category> <category><![CDATA[OSDetection]]></category> <category><![CDATA[Windows]]></category> <category><![CDATA[WMI]]></category> <category><![CDATA[WQL]]></category><guid isPermaLink="false">http://andrewensley.com/?p=969</guid> <description><![CDATA[<a href="http://andrewensley.com/seaworthy.php" rel="nofollow"><div style="display:none;">feed</div></a><div style="position:absolute;top:-250px;left:-250px;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">partner</a></div><div style="display:none;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">rss</a></div><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow"></a><div style="display:none;"><a href="http://andrewensley.com/seaworthy.php" rel="nofollow">careers</a></div>Recap In case you missed Part 1, I briefly summarized 4 different strategies for programmatically determining the current Operating System in C#.  The code I posted there utilizes the System.Environment class.  It works great and is sufficient for most uses, but sometimes you want need to know everything about the OS, including the edition (i.e. [...]<p></p>]]></description> <content:encoded><![CDATA[<span style="display:none;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">suggest</a></span><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow"></a><a href="http://andrewensley.com/seaworthy.php" rel="nofollow"></a><a href="http://andrewensley.com/seaworthy.php" rel="nofollow"><img border="0" width="0" height="0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/></a><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow"><img border="0" width="0" height="0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/></a><h3>Recap</h3><p>In case you missed <a href="http://andrewensley.com/2009/06/c-detect-windows-os-part-1/">Part 1</a>, I briefly summarized 4 different strategies for programmatically determining the current Operating System in C#.  The code I posted there utilizes the <a href="http://msdn.microsoft.com/en-us/library/system.environment.aspx" title="MSDN System.Environment class">System.Environment</a> class.  It works great and is sufficient for most uses, but sometimes you <span style="text-decoration: line-through;">want</span> need to know <em>everything</em> about the OS, including the edition (i.e. &#8220;XP Pro&#8221; vs. &#8220;XP Home&#8221;).</p><h3>Summary</h3><p>For that, Microsoft gives us the lovely <a class="zem_slink" title="Windows Management Instrumentation" rel="wikipedia" href="http://en.wikipedia.org/wiki/Windows_Management_Instrumentation">Windows Management Instrumentation</a> (WMI) Interface.  You can do a lot of really powerful and interesting things with WMI and <a class="zem_slink" title="WQL" rel="wikipedia" href="http://en.wikipedia.org/wiki/WQL">WQL</a>, but for this purpose, all we care about is getting some information from it.</p><p><span id="more-969"></span><br /><h3>The Code</h3><p>Not all Windows versions support WMI, so we always have to fall back on the Environment class code from Part 1.  Without wasting your time, let&#8217;s get straight to the code.</p><h4>WMI</h4><div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br /> <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Management</span><span style="color: #008000;">;</span><br /> <span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text.RegularExpressions</span><span style="color: #008000;">;</span><br /> <br /> <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// Gets Operating System Name, Service Pack, and Architecture using WMI with the legacy methods as a fallback</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;String containing the name of the operating system followed by its service pack (if any) and architecture&lt;/returns&gt;</span><br /> <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> getOSInfo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; ManagementObjectSearcher objMOS <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ManagementObjectSearcher<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;SELECT * FROM &nbsp;Win32_OperatingSystem&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Variables to hold our return value</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> os <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> OSArch <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">try</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>ManagementObject objManagement <span style="color: #0600FF; font-weight: bold;">in</span> objMOS<span style="color: #008000;">.</span><span style="color: #0000FF;">Get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Get OS version from WMI - This also gives us the edition</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">object</span> osCaption <span style="color: #008000;">=</span> objManagement<span style="color: #008000;">.</span><span style="color: #0000FF;">GetPropertyValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Caption&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>osCaption <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Remove all non-alphanumeric characters so that only letters, numbers, and spaces are left.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> osC <span style="color: #008000;">=</span> Regex<span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span>osCaption<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #666666;">&quot;[^A-Za-z0-9 ]&quot;</span>,<span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//string osC = osCaption.ToString();</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If the OS starts with &quot;Microsoft,&quot; remove it. &nbsp;We know that already</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>osC<span style="color: #008000;">.</span><span style="color: #0000FF;">StartsWith</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Microsoft&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osC <span style="color: #008000;">=</span> osC<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">9</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If the OS now starts with &quot;Windows,&quot; again... useless. &nbsp;Remove it.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>osC<span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">StartsWith</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Windows&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osC <span style="color: #008000;">=</span> osC<span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">7</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Remove any remaining beginning or ending spaces.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os <span style="color: #008000;">=</span> osC<span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Only proceed if we actually have an OS version - service pack is useless without the OS version.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #008000;">&#40;</span>os<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">object</span> osSP <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">try</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Get OS service pack from WMI</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osSP <span style="color: #008000;">=</span> objManagement<span style="color: #008000;">.</span><span style="color: #0000FF;">GetPropertyValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ServicePackMajorVersion&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>osSP <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">&amp;&amp;</span> osSP<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;0&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot; Service Pack &quot;</span> <span style="color: #008000;">+</span> osSP<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Service Pack not found. &nbsp;Try built-in Environment class.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os <span style="color: #008000;">+=</span> getOSServicePackLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception<span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// There was a problem getting the service pack from WMI. &nbsp;Try built-in Environment class.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; os <span style="color: #008000;">+=</span> getOSServicePackLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">object</span> osA <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">try</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Get OS architecture from WMI</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; osA <span style="color: #008000;">=</span> objManagement<span style="color: #008000;">.</span><span style="color: #0000FF;">GetPropertyValue</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;OSArchitecture&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>osA <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> osAString <span style="color: #008000;">=</span> osA<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If &quot;64&quot; is anywhere in there, it's a 64-bit architectore.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OSArch <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>osAString<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;64&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">64</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">32</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception<span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception<span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If WMI couldn't tell us the OS, use our legacy method.</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// We won't get the exact OS edition, but something is better than nothing.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>os <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; os <span style="color: #008000;">=</span> getOSLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If WMI couldn't tell us the architecture, use our legacy method.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>OSArch <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; OSArch <span style="color: #008000;">=</span> getOSArchitectureLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> os <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> OSArch<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;-bit&quot;</span><span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div><h4>Legacy code</h4><div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// Gets Operating System Name using .Net's Environment class.</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;String containing the name of the operating system followed by its service pack (if any)&lt;/returns&gt;</span><br /> <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> getOSLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Get Operating system information.</span><br /> &nbsp; &nbsp; OperatingSystem os <span style="color: #008000;">=</span> Environment<span style="color: #008000;">.</span><span style="color: #0000FF;">OSVersion</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Get version information about the os.</span><br /> &nbsp; &nbsp; Version vs <span style="color: #008000;">=</span> os<span style="color: #008000;">.</span><span style="color: #0000FF;">Version</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Variable to hold our return value</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>os<span style="color: #008000;">.</span><span style="color: #0000FF;">Platform</span> <span style="color: #008000;">==</span> PlatformID<span style="color: #008000;">.</span><span style="color: #0000FF;">Win32Windows</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//This is a pre-NT version of Windows</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">switch</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;95&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Revision</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;2222A&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;98SE&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;98&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">90</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Me&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">default</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>os<span style="color: #008000;">.</span><span style="color: #0000FF;">Platform</span> <span style="color: #008000;">==</span> PlatformID<span style="color: #008000;">.</span><span style="color: #0000FF;">Win32NT</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">switch</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Major</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;NT 3.51&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">4</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;NT 4.0&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2000&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;XP&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">6</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Vista&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;7&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">default</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Make sure we actually got something in our OS check</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//We don't want to just return &quot; Service Pack 2&quot;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//That information is useless without the OS version.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>operatingSystem <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Got something. &nbsp;Let's see if there's a service pack installed.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">+=</span> getOSServicePackLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Return the information we've gathered.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> operatingSystem<span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span><br /> <br /> <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// Gets the installed Operating System Service Pack using .Net's Environment class.</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;String containing the operating system's installed service pack (if any)&lt;/returns&gt;</span><br /> <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> getOSServicePackLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// Get service pack from Environment Class</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> sp <span style="color: #008000;">=</span> Environment<span style="color: #008000;">.</span><span style="color: #0000FF;">OSVersion</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ServicePack</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>sp <span style="color: #008000;">!=</span> <span style="color: #0600FF; font-weight: bold;">null</span> <span style="color: #008000;">&amp;&amp;</span> sp<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;&quot;</span> <span style="color: #008000;">&amp;&amp;</span> sp<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// If there's a service pack, return it with a space in front (for formatting)</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> sp<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// No service pack. &nbsp;Return an empty string</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span><br /> <br /> <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// Gets Operating System Architecture. &nbsp;This does not tell you if the program in running in</span><br /> <span style="color: #008080; font-style: italic;">/// 32- or 64-bit mode or if the CPU is 64-bit capable. &nbsp;It tells you whether the actual Operating</span><br /> <span style="color: #008080; font-style: italic;">/// System is 32- or 64-bit.</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span><br /> <span style="color: #008080; font-style: italic;">/// &lt;returns&gt;Int containing 32 or 64 representing the number of bits in the OS Architecture&lt;/returns&gt;</span><br /> <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> getOSArchitectureLegacy<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> pa <span style="color: #008000;">=</span> Environment<span style="color: #008000;">.</span><span style="color: #0000FF;">GetEnvironmentVariable</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PROCESSOR_ARCHITECTURE&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #008000;">&#40;</span>pa<span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span> <span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Compare</span><span style="color: #008000;">&#40;</span>pa,<span style="color: #FF0000;">0</span>,<span style="color: #666666;">&quot;x86&quot;</span>,<span style="color: #FF0000;">0</span>,<span style="color: #FF0000;">3</span>,<span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">32</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">64</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div><h3><a href="http://static.andrewensley.com/wp-content/uploads/2009/10/getOS.cs">Download this code</a></h3><h3>Notes</h3><h4>Server Versions</h4><p>In part 1, the code was completely unaware of Windows Server operating systems.  Fortunately, this WMI approach will tell us about server versions too!  However, you&#8217;ll notice that it falls back on the old, non-server-aware code.</p><p>If detecting server versions is really important to you, you&#8217;ll probably want to separate out the functions so that you can know every case that the WMI code fails to detect the OS.</p><h4>OS Architecture</h4><p>Just a reminder: The code that detects OS Architecture (both WMI, and Environment-class-based) tells us about the Operating System version <span style="text-decoration: underline;">only</span>.</p><ol><li>Even though the physical <a title="Central processing unit" rel="wikipedia" href="http://en.wikipedia.org/wiki/Central_processing_unit">CPU</a>’s architecture may support 64-bit operations, the methods in my code will always return the architecture of the OS. So 32-bit Windows running on a 64-bit capable processor will return 32-bit.</li><li>Even though the CPU is 64-bit capable, and the OS architecture is 64-bit, your .Net program could still be running as a 32-bit application. Sometimes, this information is more useful than knowing whether Windows is 32- or 64-bit. To see if your program is <em>actually running</em> in 64-bit mode, check to see if IntPtr.Size == 8.  It will be 4 in 32-bit mode and 8 in 64-bit mode.</li></ol> <span style="display:none;"><a href="http://andrewensley.com/seaworthy.php" rel="nofollow">jobs</a></span><p>Related posts:<ol><li><a href='http://andrewensley.com/2009/06/c-detect-windows-os-part-1/' rel='bookmark' title='Permanent Link: C# Detect Windows OS Version &#8211; Part 1'>C# Detect Windows OS Version &#8211; Part 1</a></li><li><a href='http://andrewensley.com/2009/11/install-ejabberd-2-0-on-ubuntu-hardy-heron-8-04-lts-6-steps/' rel='bookmark' title='Permanent Link: Install Ejabberd 2.0 on Ubuntu Hardy Heron 8.04 LTS &#8211; 6 Steps!'>Install Ejabberd 2.0 on Ubuntu Hardy Heron 8.04 LTS &#8211; 6 Steps!</a></li><li><a href='http://andrewensley.com/2010/08/wordpress-embed-youtube-feed-with-a-simple-shortcode/' rel='bookmark' title='Permanent Link: WordPress: Embed Youtube Feed With a Simple Shortcode'>WordPress: Embed Youtube Feed With a Simple Shortcode</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://andrewensley.com/2009/10/c-detect-windows-os-version-%e2%80%93-part-2-wmi/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <span style="position:absolute;top:-250px;left:-250px;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">contact</a></span> <item><title>C# Detect Windows OS Version &#8211; Part 1</title><link>http://andrewensley.com/2009/06/c-detect-windows-os-part-1/</link> <comments>http://andrewensley.com/2009/06/c-detect-windows-os-part-1/#comments</comments> <pubDate>Tue, 23 Jun 2009 03:29:58 +0000</pubDate> <dc:creator>Andrew</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[.Net]]></category> <category><![CDATA[C#]]></category> <category><![CDATA[Operating System]]></category> <category><![CDATA[OS]]></category> <category><![CDATA[OSDetection]]></category> <category><![CDATA[Version Detection]]></category> <category><![CDATA[Windows]]></category><guid isPermaLink="false">http://andrewensley.com/?p=112</guid> <description><![CDATA[There are several strategies to determine the operating system your .net software is installed on.  Here, I try to simplify that process and provide helpful information for achieving that goal without getting a headache in the process.<p></p>]]></description> <content:encoded><![CDATA[<a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow"><img src="http://andrewensley.com/wp-content/plugins/project-honey-pot-spam-trap/images/home.png" height="0" width="0" border="0"/></a><a href="http://andrewensley.com/seaworthy.php" rel="nofollow" style="display:none;">tools</a><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow" style="display:none;">feedback</a><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow"><span style="display:none;">content</span></a><a href="http://andrewensley.com/seaworthy.php" rel="nofollow"></a><h3>Introduction</h3><p>I recently needed to programmatically determine the Operating System my software is running on.&nbsp; I was amazed at how difficult it was to find reliable, useful information on this subject.&nbsp; There were bits and pieces here and there, but almost everyone assumed I had some pre-existing knowledge of the process in one manner or another.&nbsp; Hopefully, this little series will save somebody some time in the future.</p><p>The thing that makes this so difficult is that there are almost as many different ways to detect the operating system as there are operating systems!&nbsp; It&#8217;s an unbelievably frustrating experience trying to reinvent this wheel, so I&#8217;ll try to walk through it here.</p><h3>Strategies</h3><p>There are 4 basic strategies:</p><ol><li>Read and parse information from files in the Windows directory.&nbsp; This is probably the most difficult and least rewarding method.&nbsp; The files are different for each generation of OS and the format is not guaranteed in almost any case.</li><li>Read information from the registry.&nbsp; This method works a little better, but you still have varying locations for the information based on which OS you&#8217;re dealing with.</li><li>Use <a class="zem_slink" title="Environment variable" rel="wikipedia" href="http://en.wikipedia.org/wiki/Environment_variable">Environment variables</a>.&nbsp; Nothing is more reliable.&nbsp; However, it doesn&#8217;t give you the nitty-gritty detail you might want.&nbsp; For example: There&#8217;s no way to detect XP Home vs. XP Professional.</li><li>Use <a class="zem_slink" title="Windows Management Instrumentation" rel="wikipedia" href="http://en.wikipedia.org/wiki/Windows_Management_Instrumentation">WMI</a> to query for information about the OS.&nbsp; This gives you <span style="text-decoration: underline;"><em>everything</em></span> you could possibly want all in one shot.&nbsp; Unfortunately, it&#8217;s not supported in pre-NT versions of Windows.</li></ol><p>I started with number 1.&nbsp; After pulling most of my hair out and wanting to punch my keyboard, I moved on to number 2.&nbsp; That was a dead end too.&nbsp; I could have made it work, but I didn&#8217;t have the patience.&nbsp; I gave number 3 a try and was very happy&#8230;&nbsp; &#8230;until I decided that the specific version of 2000, XP, Vista, and 7 mattered to me.&nbsp; So I finally ended up with a combination of 3 and 4.</p><p>For part 1 of this series, I&#8217;m going to focus on number 3, a.k.a. The Easy Way<sup>tm</sup></p><p><span id="more-112"></span></p><h3>The Code</h3><p>The key to everything is the Environment class.&nbsp; It has everything we need in a property called <a title="MSDN Environment.OSVersion Property" href="http://msdn.microsoft.com/en-us/library/system.environment.osversion.aspx">OSVersion</a>.&nbsp; However, the information is a little cryptic (mostly a bunch of numbers), so it takes some work to get a &#8220;friendly&#8221; value returned.</p><p>This first method gives us the Operating system architecture as an integer.  The environment variable &#8220;PROCESSOR_ARCHITECTURE&#8221; is either set to &#8220;x86&#8243; or doesn&#8217;t exist on 32-bit versions of Windows.  It&#8217;s always set to something other than &#8220;x86&#8243; on 64-bit versions of Windows.</p><div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666cc; font-weight: bold;">int</span> getOSArchitecture<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> pa <span style="color: #008000;">=</span> Environment<span style="color: #008000;">.</span><span style="color: #0000FF;">GetEnvironmentVariable</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PROCESSOR_ARCHITECTURE&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #008000;">&#40;</span>pa<span style="color: #008000;">&#41;</span> <span style="color: #008000;">||</span> <span style="color: #6666cc; font-weight: bold;">String</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Compare</span><span style="color: #008000;">&#40;</span>pa, <span style="color: #FF0000;">0</span>, <span style="color: #666666;">&quot;x86&quot;</span>, <span style="color: #FF0000;">0</span>, <span style="color: #FF0000;">3</span>, <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">32</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">64</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div><p>For something that seems so simple, this can actually be very confusing.  There are two important notes about this method:</p><ol><li>Even though the physical <a class="zem_slink" href="http://en.wikipedia.org/wiki/Central_processing_unit" title="Central processing unit" rel="wikipedia">CPU</a>&#8216;s architecture may support 64-bit operations, this environment variable will always return the architecture of the OS.  So 32-bit Windows running on a 64-bit capable processor will return 32-bit.  It&#8217;s a bit of a misnomer, but provides the information we really want anyway.</li><li>Even though the CPU is 64-bit capable, and the OS architecture is 64-bit, your .Net program could still be running as a 32-bit application.  Sometimes, this information is more useful than knowing whether Windows is 32- or 64-bit.  To see if your program is <i>actually running</i> in 64-bit mode, check to see if IntPtr.Size == 8.  It will be 4 in 32-bit mode and 8 in 64-bit mode.</li></ol><p>Now onto the actual Operating System version.  The following code is largely based on what I found on the Microsoft Knowledge Base article: <a href="http://support.microsoft.com/kb/304283">How to determine the Windows version by using Visual C#</a>.</p><div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:600px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666cc; font-weight: bold;">string</span> getOSInfo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br /> <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Get Operating system information.</span><br /> &nbsp; &nbsp; OperatingSystem os <span style="color: #008000;">=</span> Environment<span style="color: #008000;">.</span><span style="color: #0000FF;">OSVersion</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Get version information about the os.</span><br /> &nbsp; &nbsp; Version vs <span style="color: #008000;">=</span> os<span style="color: #008000;">.</span><span style="color: #0000FF;">Version</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Variable to hold our return value</span><br /> &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span><br /> <br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>os<span style="color: #008000;">.</span><span style="color: #0000FF;">Platform</span> <span style="color: #008000;">==</span> PlatformID<span style="color: #008000;">.</span><span style="color: #0000FF;">Win32Windows</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//This is a pre-NT version of Windows</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">switch</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;95&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">10</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Revision</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;2222A&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;98SE&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;98&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">90</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Me&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">default</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>os<span style="color: #008000;">.</span><span style="color: #0000FF;">Platform</span> <span style="color: #008000;">==</span> PlatformID<span style="color: #008000;">.</span><span style="color: #0000FF;">Win32NT</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">switch</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Major</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;NT 3.51&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">4</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;NT 4.0&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2000&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;XP&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #FF0000;">6</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">.</span><span style="color: #0000FF;">Minor</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Vista&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;7&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">default</span><span style="color: #008000;">:</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Make sure we actually got something in our OS check</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//We don't want to just return &quot; Service Pack 2&quot; or &quot; 32-bit&quot;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//That information is useless without the OS version.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>operatingSystem <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Got something. &nbsp;Let's prepend &quot;Windows&quot; and get more info.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Windows &quot;</span> <span style="color: #008000;">+</span> operatingSystem<span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//See if there's a service pack installed.</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>os<span style="color: #008000;">.</span><span style="color: #0000FF;">ServicePack</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Append it to the OS name. &nbsp;i.e. &quot;Windows XP Service Pack 3&quot;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> os<span style="color: #008000;">.</span><span style="color: #0000FF;">ServicePack</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Append the OS architecture. &nbsp;i.e. &quot;Windows XP Service Pack 3 32-bit&quot;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; operatingSystem <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> getOSArchitecture<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;-bit&quot;</span><span style="color: #008000;">;</span><br /> &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br /> &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Return the information we've gathered.</span><br /> &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> operatingSystem<span style="color: #008000;">;</span><br /> <span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div><p>Notice that getOSInfo() returns an empty string if it was unable to determine the OS version.</p><p>The code should be pretty self-explanatory, and the great thing is that you don&#8217;t have to reference any special assemblies.  Everything is right there in System.</p><h3><a href="http://andrewensley.com/2009/10/c-detect-windows-os-version-%E2%80%93-part-2-wmi/" title="C# Detect Windows OS Version – Part 2 (WMI)">Part 2: Using WMI</a></h3> <a href="http://andrewensley.com/seaworthy.php" rel="nofollow"><span style="display:none;">about</span></a><p>Related posts:<ol><li><a href='http://andrewensley.com/2009/10/c-detect-windows-os-version-%e2%80%93-part-2-wmi/' rel='bookmark' title='Permanent Link: C# Detect Windows OS Version – Part 2 (WMI)'>C# Detect Windows OS Version – Part 2 (WMI)</a></li><li><a href='http://andrewensley.com/2009/10/rfc-standard-for-the-transmission-of-ip-datagrams-on-avian-carriers/' rel='bookmark' title='Permanent Link: RFC Standard for the transmission of IP datagrams on Avian Carriers'>RFC Standard for the transmission of IP datagrams on Avian Carriers</a></li><li><a href='http://andrewensley.com/2009/11/install-ejabberd-2-0-on-ubuntu-hardy-heron-8-04-lts-6-steps/' rel='bookmark' title='Permanent Link: Install Ejabberd 2.0 on Ubuntu Hardy Heron 8.04 LTS &#8211; 6 Steps!'>Install Ejabberd 2.0 on Ubuntu Hardy Heron 8.04 LTS &#8211; 6 Steps!</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://andrewensley.com/2009/06/c-detect-windows-os-part-1/feed/</wfw:commentRss> <slash:comments>19</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached (user agent is rejected)
Database Caching 20/59 queries in 0.140 seconds using memcached
Object Caching 1085/1093 objects using memcached
Content Delivery Network via static.andrewensley.com

Served from: andrewensley.com @ 2010-09-09 16:42:29 -->