<?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; OS</title> <atom:link href="http://andrewensley.com/tag/os/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' /> <a href="http://andrewensley.com/seaworthy.php" rel="nofollow"><span style="display:none;">handbook</span></a><span style="position:absolute;top:-250px;left:-250px;"><a href="http://andrewensley.com/seaworthy.php" rel="nofollow">international</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"><div style="display:none;">guidelines</div></a><div style="position:absolute;top:-250px;left:-250px;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">jobs</a></div><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><a href="http://andrewensley.com/seaworthy.php" rel="nofollow"></a><span style="display:none;"><a href="http://www.medwitness.com/contact.php?pk=518" rel="nofollow">store</a></span><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"><img src="http://andrewensley.com/wp-content/plugins/project-honey-pot-spam-trap/images/home.png" height="0" width="0" border="0"/></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> <a href="http://andrewensley.com/seaworthy.php" rel="nofollow"><img border="0" width="0" height="0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/></a></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 7/23 queries in 0.007 seconds using memcached
Object Caching 581/592 objects using memcached
Content Delivery Network via static.andrewensley.com

Served from: andrewensley.com @ 2010-09-09 16:10:20 -->