2015-06-19 46 views
2

我需要在每次通過inno安裝程序開始我的應用程序安裝時檢查sql server版本。 但作爲SQL創建服務器版本特定條目(如MySQL服務器5.1),如註冊表項,所以我不得不放棄喜歡在註冊表中找到MySQL的通用路徑,因爲它在註冊表中創建版本特定條目作爲密鑰

HKLM \ SOFTWARE \ Wow6432Node \ MySQL AB公司\ MySQL服務器的路徑5.1

檢查版本。
但是當我安裝具有5.1以外版本的sql server時,它檢查上面的路徑,它找不到。所以雖然已經安裝,但安裝仍然開始。所以我要像

HKLM \ SOFTWARE \ Wow6432Node \ MySQL AB公司\ MySQL服務器

它不是特定版本的一些通用的路徑。這樣我可以輕鬆地retreive從MySQL鍵的值,並檢查it.My代碼是

function fCheckMySQLInstall():boolean; 
    var 
    mysqlVersion : string; 
begin 
    bIsMyQLInstalled := False; 
    if RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\MySQL AB\MySQL Server 5.1', 'Version', mysqlVersion) = true then 
    if CompareStr(mysqlVersion,'5.1') >= 0 then 
     bIsMyQLInstalled := True; 

    Result := bIsMyQLInstalled; 
end; 

的路徑是/ MySQL服務器5.1這是不正確的。應該是通用的所有版本,以便我可以檢查其他版本。歡迎解決方案。

+0

m安裝MySQL服務器 –

+0

讓我來幫你更新你的問題。這裏最重要的是什麼;您的總體任務是查找已安裝的MySQL服務器的(最新)版本號。那是對的嗎 ? – TLama

+0

謝謝你...是的。我想檢查系統中安裝的最新版本。 http://dev.mysql.com/doc/mysql-windows-excerpt/5.1/en/mysql-install-wizard-changes.html這裏是鏈接,它顯示的條目總是特定於版本的註冊表 –

回答

0

我所做的是。從註冊表中獲取mySQL服務器的所有版本(關於如何查看下面的代碼!)。解壓縮所有版本後,比較要安裝的MySQL版本和解壓縮版本,並決定是否安裝。詳細解釋在mycode中給出。

if RegGetSubkeyNames(HKLM, URL, mysqlVersion) then 
    begin 
    counter := 0; 
    specificVersion := ''; 
    for mysqlVersionIteration := 0 to GetArrayLength(mysqlVersion)-1 do begin 
     specificVersion := mysqlVersion[mysqlVersionIteration]; 
    res := copy(specificVersion,1,12); 
    if(res = 'MySQL Server')then 
     if RegQueryStringValue(HKLM, URL+'\'+specificVersion, 'Version', Version) = true then 
     begin 
      SetArrayLength(extractedVersion, counter + 1); 
      extractedVersion[counter] := Version; 
      counter := counter + 1; 
     end;  
    end; 
    for CompareVersionCount:= 0 to GetArrayLength(extractedVersion) - 1 do begin 
     alreadyVersionExists:= copy(extractedVersion[CompareVersionCount],1,3); 
     if CompareStr(alreadyVersionExists,'{#MySQLVersion}') >= 0 then 
     bIsMyQLInstalled := True; 
    end; 
    end; 
  1. 這裏URL是在Win32中的情況下
  2. 迭代在Win64平臺和 'SOFTWARE \ MySQL AB公司' 的情況下, 「SOFTWARE \ Wow6432Node \ MySQL AB公司」 通過所有的子項。
  3. 提取前12個字母,因爲可能有其他子鍵。
  4. 如果提取的字母是MySQL,那麼密鑰必須有mySQL版本。
  5. 提取該特定密鑰的版本。
  6. 將所有版本已存在於extractVersion數組中的系統中。
  7. 最後遍歷extractVersion數組並將其與要安裝的mySQL版本進行比較,並決定是否安裝。

通過這種方法,我的安裝程序做了我應該做的事情。

1

因此,基本上你必須使用RegEnumKey(ex)枚舉'SOFTWARE \ Wow6432Node \ MySQL AB \'下的密鑰,並自己對「MySQL Server Vx.y」進行匹配,並從中確定最高版本。

Delphi/FreePascal註冊表單元提供了按照這種方式枚舉鍵的功能,在Inno Setup中您可以使用RegGetSubkeyNames函數。

+0

是的,我也一樣。通過使用RegGetSubkeyNames感謝Marco van de voort –

+0

你可以評價我的que :-p –