Использовать выбор языка Inno Setup в моем программном обеспечении

КРАТКОЕ СОДЕРЖАНИЕ:

Моя цель — избежать двойного запроса предпочтительного языка пользователя: в установщике и в приложении, когда пользователь устанавливает программное обеспечение в профиль общего пользователя.

Я знаю, как использовать выбор языка в установщике, когда пользователь устанавливает приложение для текущего пользователя. Мой вопрос в том, как мне действовать, если пользователь устанавливает приложение для всех пользователей, а выбор языка хранится в корне реестра HKLM.


Я создал программное обеспечение с поддержкой нескольких языков пользовательского интерфейса. Когда пользователь меняет язык в приложении, я сохраняю его в реестре (HKCU root) при выходе из приложения. Когда приложение запускается, оно считывает язык обратно из реестра. Кажется, эта часть тривиальна.

В моем сценарии установки Inno я разрешаю пользователям выбирать язык установщика, а затем сохраняю этот выбор в той же ветке реестра, которая используется установленным приложением (чтобы не заставлять пользователя выбирать язык дважды: в установщике, а затем в приложение). Пока еще ничего сложного.

Когда я добавил пользователям возможность устанавливать приложение в общий профиль (т. е. «Все пользователи»), все стало намного сложнее.

Проблема в том, что HKA сопоставляется с корнем HKLM, когда пользователь выбирает «Все пользователи», но приложение работает с корнем HKCU, поэтому ничего там не находит.

Вот основные моменты из моего сценария установки Inno:

[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
...

Итак, мои вопросы:

  1. В таких условиях должно ли мое программное обеспечение всегда сначала читать язык из корня HKLM, а если не найден, переключаться на HKCU? Если да, то приложение нужно запускать от имени администратора, верно?

  2. В качестве альтернативы я мог бы продублировать часть реестра и сохранить язык в корне HKCU независимо от выбора профиля. А смешивать профили в скрипте настройки, кажется, плохая практика? И это помогает только текущему пользователю...

  3. Может быть, я слишком усложняю задачу и существуют более простые способы? Какова общепринятая практика достижения моей цели (если такая практика существует)?


Вероятно, вопрос шире, чем просто установка Inno и реестр, но я не смог найти, как правильно его классифицировать. Любая помощь с категоризацией приветствуется.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может быть, я слишком усложняю задачу и существуют более простые способы? Какова общепринятая практика достижения моей цели (если такая практика существует)?

Да, я считаю, что вы слишком усложняете этот вопрос. Все, что вам нужно сделать, это изменить логику вашего собственного приложения при его запуске.

  1. Сначала найдите в пользовательской области реестра выбранный язык.
  2. Если это значение реестра не существует, прочитайте выбранное установщиком значение из HKLM и установите его по умолчанию.

Это не вопрос установки Inno.

В таких условиях должно ли мое программное обеспечение всегда сначала читать язык из корня HKLM, а если не найден, переключаться на HKCU? Если да, то приложение нужно запускать от имени администратора, верно?

Для чтения HKLM вам не нужны права администратора. Чтобы написать HKLM, вам нужны права Амина.


Вы не говорите, какая у вас среда кодирования или что-то еще для вашего приложения, но я использую CSettingsStore, чтобы упростить чтение данных реестра из HKLM и т. д..

Чтение реестра не проблема. Меня просто интересовал концептуальный подход, когда некоторые настройки приложения смешиваются между HKCU и HKLM. Спасибо, ваш ответ пролил свет на этот вопрос.

Petro K 14.04.2024 16:05

Другие вопросы по теме