2012-01-24 67 views
1

我想写入基于OS的注册表。我在地方OS检测功能,并发现你可以在注册表部分的检查功能,所以尝试以下操作:根据条件写入注册表

Root: HKLM; SubKey: Software\Microsoft\Windows; ValueType: dword; ValueName: Test; ValueData: 1; Flags: createvalueifdoesntexist; Check: IsWindows7 

但它没有工作,这意味着当我安装Win7上和WinXP,它在两种情况下都将价值写入注册表。

这里是检测OS代码:

function IsWindows7(): Boolean; 
var 
    Version: TWindowsVersion; 
begin 
    GetWindowsVersionEx(Version); 

    // Windows 7 version is 6.1 (workstation) 
    if (Version.Major = 6) and 
    (Version.Minor = 1) and 
    (Version.ProductType = VER_NT_WORKSTATION) 
    then 
    Result := True 
    else 
    Result := False; 
end; 

任何意见/建议吗?

+0

尝试向我们展示您的'IsWindows7'检查函数的代码。为什么不使用标准的'MinVersion'和'OnlyBelowVersion'参数? – Deanna

+0

感谢您的回复!我可以使用标准参数很好,但我仍然需要在某处测试它,然后根据测试写入注册表。我要问的是,上面给出的线是否正确? –

+0

是的。第一个意见是正确的,问题应该来自IsWindows7,所以你应该添加此功能的问题。通过一个纯粹的哈撒,你测试Win7(6而不是7)的正确的主vesrion号码? – az01

回答

2

请参考下面我为您解决:

[Registry] 

Root: HKLM; SubKey: {code:IsWindows7}; ValueType: dword; ValueName: Test; ValueData: 1; Flags: createvalueifdoesntexist; Check: IsWindows7 

[Code] 

function IsWindows7(S: String) : string; 
var 
    Version: TWindowsVersion; 
begin 

GetWindowsVersionEx(Version); 

    // Windows 7 version is 6.1 (workstation) 
    if (Version.Major = 6) and 
    (Version.Minor = 1) and 
    (Version.ProductType = VER_NT_WORKSTATION) 
    then 
    Result := '<registry path for win 7>' 
else 
    Result := '<registry path for other win os >'; 

end; 

编码愉快!