tags:

views:

44

answers:

1

I am maintaining an application which currently checks to see whether MS Access 2007 is installed. It does this by verifying that a registry key exists.

public bool IsAccess2007Installed()
{
    RegistryKey rootKey = Registry.ClassesRoot.OpenSubKey(@"Access.Application.12\shell\open\command", false);

    return rootKey != null;
}

How would I go about verifying whether MS Access 2010 is installed? Or better yet, how would I verify that MS Access 2007 or later is installed?

It is assumed that the user has administrator privileges.

+1  A: 

You can check this key for a value (eg. Access.Application.12) instead. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Access.Application\CurVer

So your line of code would be:

RegistryKey rootKey = Registry.ClassesRoot.OpenSubKey(@"Access.Application\CurVer", false);

if (rootKey == null) return false;

string value = rootKey.GetValue("").ToString();
int verNum = int.Parse(value.subString(value.indexOf("Access.Application.")));
if (value.StartsWith("Access.Application.") && verNum >= 12)
{ return true; }
Russell
Wouldn't this change depending on the which version was last run on the machine? e.g. If I have both MS Access 2003 and 2007, the current version could be set to 2003 even though I have 2007 installed.
Evil Pigeon
Thanks Russel. I have implemented this in 2 steps, first checking if 2007 is installed and then checking the current version. This will work most of the time, the exception being where 2010 is installed alongside other versions. For anyone else looking for a similar solution, you'll want to use string value = rootKey.GetValue("").ToString(); to get the key's default value.
Evil Pigeon
@Evil Pigeon, thanks for the fix, I will update my answer. :)
Russell