2015-01-08 2 views
5

レジストリ値が存在するかどうかを確認する必要があります。どうやってやるの?NSIS - レジストリキーの値が存在するかどうか確認してください

私の最初のアプローチ:

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} 

しかし、値が存在しない場合、これはまた、動作します。私は、 "存在しない"と空の文字列が同じ方法で処理されるためだと思います。 Registry.nshで

私はこのようにそれをやった:

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

     ${IF} $var2 == "REG_SZ" 

しかしregistry.nshでポップ$ {_ STRING}が動作しないので、私は、エラーを取得します。

ヘルプと提案をよろしく!

答えて

9

あなたは、読み取り後にエラーフラグをチェックする必要があります:

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} 

また、あなたがそれを読み取ろうとする前にEnumRegValueに興味があるかもしれません。

+0

ありがとうございます!それは完璧に働いた! – user3629892

関連する問題