2011-07-15 38 views
0

我需要在註冊表根的變量傳遞給循環來收集所有已安裝的Python版本(版本不同,可以爲所有用戶安裝或當前用戶),但下面的簡化代碼段不會編譯:如何在NSIS中的註冊表根上編寫循環?


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)

有什麼辦法來遍歷註冊表根源是什麼?

回答

0

不幸的是,他們必須硬編碼,你不能使用一個變量。

您可以:

  • 使用registry plugin
  • 使用SHCTX
  • 寫某種幫手宏,或只是複製你的代碼

已經有一個ticket on the request tracker關於這個..

+0

非常感謝!我以包裝該命令到一個宏結束,但會看到註冊表插件。第二個建議的解決方案對我來說並不好,因爲它只會根據用戶環境檢查一個註冊表樹。 – jollyroger

+1

@jollyroger:你可以在循環中使用SHCTX,使用「all」和「current」來獲得HKLM和HKCU – Anders