I need to check, if a registry value exists. How can I do that?
My first approach:
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}
But this also works, when the value doesn’t exist. I guess, because "doesn’t exist" and empty string are handled the same way.
With Registry.nsh I did it like this:
${registry::Read} "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports" "NUL:" $var1 $var2
${IF} $var2 == "REG_SZ"
But I get an error, because the Pop ${_STRING} in the registry.nsh doesn’t work.
Help and suggestions welcome!
You should check the error flag after reading:
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}
Also, you may be interested in EnumRegValue before trying to read it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With