2010-08-09 116 views
2

我正在维护一个当前检查MS Access 2007是否已安装的应用程序。它通过验证是否存在注册表项来执行此操作。检查MS Access 2010是否安装

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

    return rootKey != null; 
} 

我将如何去核实MS Access 2010是否安装?或者更好的是,我将如何验证安装了MS Access 2007或更高版本?

假设用户具有管理员权限。

+0

我已按照罗素的回答实施的解决方案。如果任何人都可以为我提供不依赖于CurVer的解决方案,我将发布代码。 – 2010-08-09 08:03:09

+1

这可能是有趣的:http://stackoverflow.com/questions/2020181/find-version-of-access – Fionnuala 2010-08-09 08:05:17

+0

感谢Remou。我注意到其中一个答案中有一个Access版本13的检查。据谷歌称,微软因迷信原因已经跳过了13版本。 – 2010-08-09 08:32:38

回答

1

您可以检查该键的值(例如Access.Application.12)。 HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes下\ Access.Application \ CURVER

所以,你的代码行是:

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; } 
+0

根据上次在机器上运行的版本,这不会发生什么变化吗?例如如果我同时拥有MS Access 2003和2007,即使安装了2007,也可以将当前版本设置为2003。 – 2010-08-09 07:26:32

+0

谢谢罗素。我已经实施了这两个步骤,首先检查是否安装了2007年,然后检查当前版本。这在大多数情况下都能正常工作,例外情况是2010年与其他版本一起安装。 对于其他正在寻找类似解决方案的人,您需要使用string value = rootKey.GetValue(“”)。ToString();获取密钥的默认值。 – 2010-08-09 07:59:54

+0

@魔鬼鸽子,谢谢你的解决,我会更新我的答案。 :) – Russell 2010-08-09 08:08:19