如何在一个周期内从注册表项中读取
问题描述:
我正在制作一个安装程序,可以将功能添加到以前安装的程序中,这是一种附加组件。如何在一个周期内从注册表项中读取
必须出现的程序根据发布添加注册表项。
我想读取此密钥,并检查待安装的附件是否与当前版本的程序兼容以允许它安装,否则我想显示通知消息,通知没有兼容版本存在。
我的代码到现在为止是:
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 ....
我要来检查一个循环中的一堆兼容版本,我该如何实现这一目标?
答
如果我理解正确,您想检查一些兼容的已安装版本,并且只有在安装了兼容版本后才能继续执行?
你有不同的选择,如果目标版本的数量不高,速度最快的是检查了一系列预先定义的版本,像这样:
警告这不是一个完美的解决方案,只是工作和简单的代码,被警告,请看:
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数组进行比较。
- 更好的解决方案,恕我直言,将读取已安装的版本,解析它(或将其存储在主要,次要,发布的不同领域),然后执行一种范围检查。什么是有效检查取决于您和您的兼容性模式施加的限制。
我不知道我是否理解,随意添加西班牙语评论(看起来像你会说西班牙语),我会编辑帖子以提高可读性。 **西班牙语** @Carlitros,no estoy seguro de entender lo quequeréslograr。请注意,你可以在编辑器中输入你想要的信息。 – jachguate 2011-03-24 23:46:28
@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
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