2015-01-08 24 views
5

Muszę sprawdzić, czy istnieje wartość rejestru. Jak mogę to zrobić?NSIS - sprawdź, czy istnieje wartość klucza rejestru

Moje pierwsze podejście:

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} 

Ale to działa również, gdy wartość nie istnieje. Zgaduję, ponieważ "nie istnieje" i pusty ciąg są obsługiwane w ten sam sposób.

Z Registry.nsh zrobiłem to tak:

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

     ${IF} $var2 == "REG_SZ" 

Ale pojawia się błąd, ponieważ Pop $ _ {STRING} w registry.nsh nie działa.

Pomoc i sugestie mile widziane!

Odpowiedz

9

Należy sprawdzić flagę błędu po czytaniu:

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} 

Ponadto, może być zainteresowany w EnumRegValue przed starając się go odczytać.

+0

Dzięki! To działało idealnie! – user3629892

Powiązane problemy