2015-01-08 17 views
5

Devo controllare, se esiste un valore di registro. Come lo posso fare?NSIS - verificare se il valore della chiave del Registro di sistema esiste

Il mio primo approccio:

ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" 
     ${IF} $0 == "" 
       MESSAGEBOX MB_OK "NUL exists" 
     ${ELSE} 
       WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" "" 
     ${ENDIF} 

Ma questo funziona anche quando il valore non esiste. Immagino, perché "non esiste" e le stringhe vuote vengono gestite allo stesso modo.

Con Registry.nsh ho fatto in questo modo:

${registry::Read} "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" $var1 $var2 

     ${IF} $var2 == "REG_SZ" 

Ma ottengo un errore, perché il Pop $ {_ STRING} nel registry.nsh non funziona.

Aiuto e suggerimenti benvenuto!

risposta

9

Si dovrebbe verificare il flag di errore dopo aver letto:

ClearErrors 
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" 
${If} ${Errors} 
    MessageBox MB_OK "Value not found" 
${Else} 
    ${IF} $0 == "" 
       MESSAGEBOX MB_OK "NUL exists and it's empty" 
     ${ELSE} 
       WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" "" 
     ${ENDIF} 
${EndIf} 

Inoltre, si può essere interessati a EnumRegValue prima di provare a leggerlo.

+0

Grazie! Ha funzionato perfettamente! – user3629892