如何在一个周期内从注册表项中读取

如何在一个周期内从注册表项中读取

问题描述:

我正在制作一个安装程序,可以将功能添加到以前安装的程序中,这是一种附加组件。如何在一个周期内从注册表项中读取

必须出现的程序根据发布添加注册表项。

我想读取此密钥,并检查待安装的附件是否与当前版本的程序兼容以允许它安装,否则我想显示通知消息,通知没有兼容版本存在。

我的代码到现在为止是:

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 *。 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

如果我理解正确,您想检查一些兼容的已安装版本,并且只有在安装了兼容版本后才能继续执行?

你有不同的选择,如果目标版本的数量不高,速度最快的是检查了一系列预先定义的版本,像这样:

警告这不是一个完美的解决方案,只是工作和简单的代码,被警告,请看:

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数组进行比较。
  • 更好的解决方案,恕我直言,将读取已安装的版本,解析它(或将其存储在主要,次要,发布的不同领域),然后执行一种范围检查。什么是有效检查取决于您和您的兼容性模式施加的限制。