总结:
我的目标是避免两次询问用户的首选语言:在安装程序中和在应用程序中,当用户将软件安装到普通用户的配置文件时。
我知道当用户为当前用户安装应用程序时如何使用安装程序中选择的语言。我的问题是,当用户为所有用户安装应用程序并且语言选择存储在注册表根目录中时,我应该如何继续。 我创建了支持多种 UI 语言的软件。当用户更改应用程序中的语言时,我会在应用程序退出时将其保存在注册表(
HKLM
root)中。当应用程序启动时,它从注册表中读回语言。看来,这部分是微不足道的。
当我向用户添加将应用程序安装到通用配置文件(即所有用户)的能力时,一切都变得更加复杂。
问题在于,当用户选择“所有用户”时,
HKCU
映射到
HKA
根,但应用程序处理HKLM
根,因此它在那里找不到任何内容。以下是我的 Inno Setup 脚本的要点:
HKCU
所以,我的问题是:在这种情况下,我的软件是否应该始终首先从
[Setup]
PrivilegesRequiredOverridesAllowed=dialog ;to let users to choose the target user profile, is it correct?
...
[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: de; MessagesFile: "compiler:Languages\German.isl"
Name: fr; MessagesFile: "compiler:Languages\French.isl"
Name: it; MessagesFile: "compiler:Languages\Italian.isl"
...
[Registry]
Root: HKA; Subkey: "Software\{#MyAppName}\Settings"; ValueType: string; ValueName: "Language"; ValueData: "en"; Languages: en
Root: HKA; Subkey: "Software\{#MyAppName}\Settings"; ValueType: string; ValueName: "Language"; ValueData: "de"; Languages: de
Root: HKA; Subkey: "Software\{#MyAppName}\Settings"; ValueType: string; ValueName: "Language"; ValueData: "fr"; Languages: fr
Root: HKA; Subkey: "Software\{#MyAppName}\Settings"; ValueType: string; ValueName: "Language"; ValueData: "it"; Languages: it
...
HKLM
或者,我也可以复制注册表部分并将语言存储在
HKCU
根目录中,无论配置文件选择如何。但是在设置脚本中混合配置文件似乎是一种不好的做法?这仅对当前用户有帮助...可能是我把它弄得太复杂了,还有更简单的方法吗?实现我的目标的常见做法是什么(如果存在这种做法)?
可能,这个问题比 Inno Setup 和注册表相关更广泛,但我找不到如何正确对其进行分类。任何有关分类的帮助都将不胜感激。
可能是我把它弄得太复杂了,还有更简单的方法吗?实现我的目标的常见做法是什么(如果存在这种做法)?
您自己的应用程序启动时的逻辑。首先,在注册表的用户区域中查找所选语言。
如果该注册表值不存在,则从 HKCU
HKLM
HKLM
Admin读取权限下启动,对吗?
您不需要需要管理员权限才能从HKCU
中
。您需要有 Amin 权限才能向 HKLM
写入。
HKLM
来简化从 CSettingsStore