Можно ли уменьшить количество записей реестра в этом скрипте? - PullRequest
1 голос
/ 04 июня 2019

Я читаю документацию здесь о том, что нового в Inno Setup v6 . Цитировать:

  • Добавлен новый [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 можно определить программным путем.

Есть две вещи:

  1. HKLM или HLM64
  2. ValueData из 1 или 0

Но цитируемая статья относится к HKA -> HKLM или HKCU. Так что это не одно и то же. Признаюсь, я не совсем понимаю разницу между использованием HKLM или HKLM64.

Мне нужно четыре записи в скрипте?


Обновление

Я видел этот похожий вопрос , который охватывает часть проблемы. Теперь я уменьшил его до двух записей:

; 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 и т. Д. Биты.
  • Я добавил:

// 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;

Обновление

Глядя здесь В нем говорится:

Значение корневого ключа без суффикса (например, HKLM) эквивалентно значению с суффиксом 32 (например, HKLM32), если только установка не выполняется в 64-битном режиме установки , в этом случае оно эквивалентно значению с суффиксом 64 (например, HKLM64).

В моем случае я не использовал ArchitecturesInstallIn64BitMode в своем скрипте. Это связано с тем, что мой сценарий устанавливается как для 32-разрядных, так и для 64-разрядных.

Вот почему я запутался. С моей точки зрения, пользователь будет запускать мое программное обеспечение в одной из трех сред:

  1. Запуск 32-битного приложения в 32-битной Windows

Я понимаю, это означает, что реестр будет просто HKLM.

  1. Запуск 32-битного приложения в 64-битной Windows

Я понимаю, это означает, что реестр будет HKLM ... \ WOW6432Node.

  1. Запуск 64-битного приложения в 64-битной Windows

Я понимаю, это означает, что реестр будет просто HKLM.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...