2010-08-09 115 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