2011-03-24 93 views
1

我正在製作一個安裝程序,可以將功能添加到以前安裝的程序中,這是一種附加組件。如何在一個週期內從註冊表項中讀取

必須出現的程序根據發佈添加註冊表項。

我想讀取此密鑰,並檢查待安裝的附件是否與當前版本的程序兼容以允許它安裝,否則我想顯示通知消息,通知沒有兼容版本存在。

我的代碼到現在爲止是:

Result: = RegKeyExists (HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Program\5.0.0'); 
    if Result = False Then 
     MsgBox ('Error: NOT program is installed', mbInformation, MB_OK); 
    if Result = True Then  
     .....` 

版本編號是這樣5.0.0,5.0.1,5.0.2,5.0.3 ....

我要來檢查一個循環中的一堆兼容版本,我該如何實現這一目標?

+0

我不知道我是否理解,隨意添加西班牙語評論(看起來像你會說西班牙語),我會編輯帖子以提高可讀性。 **西班牙語** @Carlitros,no estoy seguro de entender lo quequeréslograr。請注意,你可以在編輯器中輸入你想要的信息。 – jachguate 2011-03-24 23:46:28

+0

@jachguate:Muchas gracias por tu respuesta y por la confianza ... De hechosíes lasoluciónque necesitaba。 Supuse queemplearía矩陣,pero沒有sabíacómo實現。 Gracias por la ayuda ... Espero y no te moleste seguirauxiliándomeen otras cuestiones。 – Carlitros 2011-03-25 02:45:35

+0

bienvenido a StackOverflow。 Si la respuesta tesirvió,podes marcarla como _aceptada_ que es la forma usual de indicarcuálrespuesta la la indicada yademásotorga algunos puntos dereputaciónaquiéla laescribió。 Nopodrásvotar por ella hasta quetengás15 dereputación。 Un saludo :) – jachguate 2011-03-25 02:53:40

回答

1

如果我理解正確,您想檢查一些兼容的已安裝版本,並且只有在安裝了兼容版本後才能繼續執行?

你有不同的選擇,如果目標版本的數量不高,速度最快的是檢查了一系列預先定義的版本,像這樣:

警告這不是一個完美的解決方案,只是工作和簡單的代碼,被警告,請看:

const 
    MaxCompatibleVersions = 4; 

function CompatibleVersionPresent: Boolean; 
var 
    I: Integer; 
    CompatibleVersions: array[1..4] of string; 
begin 
    CompatibleVersions[1] := '5.0.0'; 
    CompatibleVersions[2] := '5.0.1'; 
    CompatibleVersions[3] := '5.0.2'; 
    CompatibleVersions[4] := '5.1.0'; 
    Result := False; 
    for I := 1 to MaxCompatibleVersions do 
    begin 
    Result := Result or RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Program\' + CompatibleVersions[I]); 
    if Result then 
     Break; 
    end; 
    if not Result then 
    MsgBox('Error, a compatible version of the program is not present, the plugin cannot be installed', mbError, MB_OK); 
end; 

procedure InitializeWizard(); 
begin 
    if not CompatibleVersionPresent then 
    Abort; 
end; 

提高,這是是一個鍛鍊了讀者,一些提示:

  • 不要作爲安裝程序腳本的一部分存儲在兼容性列表中,請包含具有兼容版本列表的文本文件。您可以在運行時將文件解壓縮到臨時位置,然後對該文件執行檢查。
  • 只讀取一次安裝的版本,並與從文件加載的預定義的字符串或StringList數組進行比較。
  • 更好的解決方案,恕我直言,將讀取已安裝的版本,解析它(或將其存儲在主要,次要,發佈的不同領域),然後執行一種範圍檢查。什麼是有效檢查取決於您和您的兼容性模式施加的限制。