在我的软件中使用 Inno Setup 语言选择

问题描述 投票:0回答:1

总结:

我的目标是避免两次询问用户的首选语言:在安装程序中和在应用程序中,当用户将软件安装到普通用户的配置文件时。

我知道当用户为当前用户安装应用程序时如何使用安装程序中选择的语言。我的问题是,当用户为所有用户安装应用程序并且语言选择存储在注册表根目录中时,我应该如何继续。 我创建了支持多种 UI 语言的软件。当用户更改应用程序中的语言时,我会在应用程序退出时将其保存在注册表(

HKLM
root)中。当应用程序启动时,它从注册表中读回语言。看来,这部分是微不足道的。


在我的 Inno Setup 脚本中,我让用户选择安装程序语言,然后将此选择保存到已安装应用程序使用的同一注册表分支(以避免强制用户选择语言两次:在安装程序中,然后在应用程序中)。仍然没有什么复杂的。

当我向用户添加将应用程序安装到通用配置文件(即所有用户)的能力时,一切都变得更加复杂。

问题在于,当用户选择“所有用户”时,

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
  1. ?如果是,那么应用程序必须在管理员权限下启动,对吗?

    或者,我也可以复制注册表部分并将语言存储在 
    HKCU

    根目录中,无论配置文件选择如何。但是在设置脚本中混合配置文件似乎是一种不好的做法?这仅对当前用户有帮助...
  2. 可能是我把它弄得太复杂了,还有更简单的方法吗?实现我的目标的常见做法是什么(如果存在这种做法)?

  3. 可能,这个问题比 Inno Setup 和注册表相关更广泛,但我找不到如何正确对其进行分类。任何有关分类的帮助都将不胜感激。


可能是我把它弄得太复杂了,还有更简单的方法吗?实现我的目标的常见做法是什么(如果存在这种做法)?

registry inno-setup inno-setup-v6
1个回答
0
投票
是的,我相信你把这个问题过于复杂化了。您需要做的就是更改
您自己的应用程序启动时的逻辑。

首先,在注册表的用户区域中查找所选语言。

如果该注册表值不存在,则从 HKCU

读取安装程序选择的值并默认为该值。
  1. 这不是 Inno Setup 的问题。
  2. 在这种情况下,我的软件是否应该始终首先从 
  3. HKLM
根读取语言,如果找不到,则切换到

HKLM

?如果是,那么应用程序必须在
Admin

权限下启动,对吗?


不需要需要管理员权限才能从HKCU

读取

。您需要有 Amin 权限才能向 HKLM 写入


您没有说明您的编码环境是什么或您的应用程序的任何内容,但我使用 
HKLM

来简化从
CSettingsStore

等读取注册表数据..


© www.soinside.com 2019 - 2024. All rights reserved.