The two properties can be useful in this case, the idea depends on checking the registry.
Note that I extracted this code from the open source project SharePoint Solution Installer and made minor modifications.
To check for WSS we check the key:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0]
and the value "SharePoint" must be "Installed"
To check for MOSS we check the key:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0]
"BuildVersion"="12.0.4518.1016"
and check that the version is 12
Here is the code:
     public static bool IsWSSInstalled
     {
         get
         {
             string name = @"SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0";
             try
             {
                 RegistryKey key = Registry.LocalMachine.OpenSubKey(name);
                 if (key != null)
                 {
                     object val = key.GetValue("SharePoint");
                     if (val != null && val.Equals("Installed"))
                     {
                         return true;
                     }
                 }
                 return false;
             }
             catch (SecurityException ex)
             {
                 throw new Exception("Access deined. Could not read the Windows Registry key '" + name + "'", ex);
             }
         }
     }
     public static bool IsMOSSInstalled
     {
         get
         {
             string name = @"SOFTWARE\Microsoft\Office Server\12.0";
             try
             {
                 RegistryKey key = Registry.LocalMachine.OpenSubKey(name);
                 if (key != null)
                 {
                     string versionStr = key.GetValue("BuildVersion") as string;
                     if (versionStr != null)
                     {
                         Version buildVersion = new Version(versionStr);
                         if (buildVersion.Major == 12)
                         {
                             return true;
                         }
                     }
                 }
                 return false;
             }
             catch (SecurityException ex)
             {
                 throw new Exception("Access deined. Could not read the Windows Registry key '" + name + "'", ex);
             }
         }
     }
 and at the top of your class:
using Microsoft.Win32;
using System.Security;
 
 
3 comments:
Thanks Heshim. This is very useful.
One quick caveat to the IsMOSSInstalled code is that "Microsoft Project Server" also adds the same "SOFTWARE\Microsoft\Office Server\12.0" key. So you may get a "false positive" for MOSS if you have "Microsoft Project Server" installed on a WSS machine.
-Chris
Thanks Chris for this valuable information, this needs a workaround for sure!!
I mean this solution for only WSS and MOSS 32 bit on windows 32 bit.
Is this still true for WSS/MOSS 64 bit on windows server 2008 ?
Thanks
Post a Comment