Как написать петлю над корнями реестра в NSIS? - PullRequest
0 голосов
/ 15 июля 2011

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


Var PYTHON_VERSION
Var REGISTRY_ROOTS
Var REGISTRY_ROOT

Function getPythonVersions
    StrCpy $REGISTRY_ROOTS "HKLM HKCU"
    StrCpy $1 1
loop:
    ${WordFind} "$REGISTRY_ROOTS" " " "E+$1" $REGISTRY_ROOT
    StrCmp $REGISTRY_ROOT "2" done

    EnumRegKey $PYTHON_VERSION $REGISTRY_ROOT "Software\Python\PythonCore" 0
    MessageBox MB_OK "$PYTHON_VERSION"

    IntOp $1 $1 + 1
    goto loop
done:
FunctionEnd

Я получаю следующую ошибку:

Usage: EnumRegKey $(user_var: output) rootkey subkey index root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD|SHCTX)

Есть ли способ перебрать корни реестра?

1 Ответ

0 голосов
/ 16 июля 2011

К сожалению, они должны быть жестко закодированы, вы не можете использовать переменную.

Вы можете:

  • Используйте плагин реестра
  • Использовать SHCTX
  • Напишите какой-нибудь вспомогательный макрос или просто продублируйте ваш код

В трекере запросов уже есть билет об этом ...

...