Inno Setup中[Registry]段使用多个Check函数编译报错咨询
Inno Setup [Registry]段使用多个Check函数的正确方法
你的代码编译报错的核心原因是:Inno Setup的Check参数要求传入布尔表达式,不能直接用空格分隔多个检查函数,必须通过逻辑运算符(and/or)组合条件,同时自定义函数调用要符合语法规范。
下面提供两种可行的解决方案:
方案1:直接用逻辑运算符组合条件
直接在Check参数里用and连接自定义函数IsNewInstall()和内置变量IsWin64(注意自定义函数调用需加括号),修改后的代码如下:
Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "ReuseCong"; ValueData: "{code:ReuseCongregation}"; \ Flags: uninsdeletevalue; Check: IsNewInstall() and IsWin64 Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "Duplicate"; ValueData: "{code:Duplicate}"; \ Flags: uninsdeletevalue; Check: IsNewInstall() and IsWin64 Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "Language"; ValueData: "{code:DatabaseLanguage}"; \ Flags: uninsdeletevalue; Check: IsNewInstall() and IsWin64
方案2:封装新的组合检查函数
如果后续需要添加更多检查条件,或者希望代码更易维护,可以在[Code]段新增一个组合函数,把多个检查逻辑封装进去:
首先在[Code]段添加:
function IsNewInstallAndWin64(): Boolean; begin Result := IsNewInstall() and IsWin64; end;
然后修改[Registry]段的Check参数,直接调用这个新函数:
Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "ReuseCong"; ValueData: "{code:ReuseCongregation}"; \ Flags: uninsdeletevalue; Check: IsNewInstallAndWin64 Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "Duplicate"; ValueData: "{code:Duplicate}"; \ Flags: uninsdeletevalue; Check: IsNewInstallAndWin64 Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \ ValueType: dword; ValueName: "Language"; ValueData: "{code:DatabaseLanguage}"; \ Flags: uninsdeletevalue; Check: IsNewInstallAndWin64
两种方案都能解决编译报错问题,可根据实际需求选择:方案1更简洁,适合少量条件;方案2扩展性更强,适合多条件或复用场景。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

