我正在阅读有关{strong> Inno Setup v6 中的新增功能的文档here。引用:
添加了新的
[Registry]
部分Root
值HKA
。在管理安装模式下等于HKLM
,在其他情况下等于HKCU
。也得到了 还支持{reg:...}
常量和HKA32
/HKA64
。注意:HKA
(例如HKCU
)仅应用于与 漫游配置文件。不再建议使用
[Registry]
部分Root
的值HKCR
,将HKA
参数设置为Subkey
的情况下使用"Software\Classes"
代替。
我有以下4个注册表项:
; AJT v19.0.0 Download Help Documentation
; This registry key value is used by the Help Ribbon Panel.
; We set the preference registry value "DownloadHelpDocumentation"
; to 1 if the "downloadhelp" task was selected.
Root: "HKLM"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "1"; \
Flags: uninsdeletevalue; \
Tasks: downloadhelp;
Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "1"; \
Flags: uninsdeletevalue; \
Check: IsWin64; \
Tasks: downloadhelp;
; We set the preference registry value "DownloadHelpDocumentation"
; to 0 if the "downloadhelp" task was NOT selected.
Root: "HKLM"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "0"; \
Flags: uninsdeletevalue; \
Tasks: not downloadhelp;
Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "0"; \
Flags: uninsdeletevalue; \
Check: IsWin64; \
Tasks: not downloadhelp;
我想知道是否可以将脚本简化为上面的两个注册表项,或者是否可以通过编程方式确定ValueData
呢?
有两件事发生:
HKLM
或HLM64
ValueData
或1
但引用的文章指的是HKA-> HKLM或HKCU。所以这不是同一回事。我承认我不太了解使用HKLM还是HKLM64的区别。
我在脚本中需要四个条目吗?
我看到了类似的question,其中涵盖了部分问题。我现在将其减少为两个条目:
0
; AJT v19.0.0 Download Help Documentation
; This registry key value is used by the Help Ribbon Panel.
; We set the preference registry value "DownloadHelpDocumentation"
; - to 1 if the "downloadhelp" task was selected.
; - to 0 if the "downloadhelp" task was NOT selected.
Root: "HKLM"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "{code:DownloadHelpDocumentation_ValueData}"; \
Flags: uninsdeletevalue
Root: "HKLM64"; Subkey: "Software\Community Talks\Public Talks\Preferences"; \
ValueType: dword; \
ValueName: "DownloadHelpDocumentation"; \
ValueData: "{code:DownloadHelpDocumentation_ValueData}"; \
Flags: uninsdeletevalue; \
Check: IsWin64
添加了{code:...}
位。ValueData
等位。
Task: downloadhelp
看here,它指出:
不带后缀的根密钥值(例如
// Converts a Boolean to a String function BoolToStr(bValue: boolean): string; begin if(bValue = true) then result := '1' else result := '0'; end; // AJT v19.0.0 Returns the selected task state function DownloadHelpDocumentation_ValueData(Param: string): string; begin result := BoolToStr(WizardIsTaskSelected('downloadhelp')); end;
)等效于带后缀32的值(例如HKLM
),除非安装在{{3}中运行},在这种情况下,它等于后缀为64的值(例如HKLM32
)。
就我而言,我没有在脚本中使用64-bit install mode。这是因为我的脚本同时安装了32位和64位。
这就是为什么我感到困惑。从我的角度来看,用户将在以下三种环境之一中运行我的软件:
我理解这意味着注册表将完全是HKLM。
我理解这意味着注册表将是HKLM ... \ WOW6432Node。
我理解这意味着注册表将完全是HKLM。
因此,我认为我必须先输入两个条目,这样才能涵盖两个位版本位置。