Quote:

That's what the CASE 1 is for.




No, I meant what did operez want to do if it wasn't in the list

This is what I came up with:

; Create "acceptable" array
$asAcceptable="/R C:\Program Files\MyApp\XLFILES\BPSMA32.XLL"
,"/R C:\Program Files\MyApp\XLFILES\BH_EXT.XLA"
,"/R C:\Program Files\MyApp\XLFILES\BPSMA32.XLL"

; Parallel "present" array of same size
Dim $aiPresent[Ubound($asAcceptable)]

$sKeyName="HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\microsoft excel"

$iValueIndex=0
$sValueName=EnumValue($sKeyName,$iValueIndex)
While @ERROR=0
$sKeyValue=ReadValue($sKeyName,$sValueName)
$iIndex=ascan($asAcceptable,$sKeyValue)
If (1+$iIndex)
; Content of value is in acceptable list
$iIndex=ascan($asAcceptable,$sKeyValue)
If $aiPresent[$iIndex]
"Duplicate entry '"+$sKeyValue+"' found at "+$sKeyName+", "+$sValueName+@CRLF
$rc=DelValue($sKeyName,$sValueName)
; Deleted value, so must back up index for enum.
$iValueIndex=$iValueIndex-1
Else
$aiPresent[$iIndex]=1
EndIf
Else
; Not in acceptable array - ignored.
EndIf
$iValueIndex=$iValueIndex+1
$sValueName=EnumValue($sKeyName,$iValueIndex)
Loop

; Write missing keys
For $iIndex = 0 To Ubound($asAcceptable)
If Not $aiPresent[$iIndex]
"Writing '"+$asAcceptable[$iIndex]+"' to 'OPEN"+($iIndex+1)+"'" ?
$rc=WriteValue($sKeyName,"OPEN"+($iIndex+1),$asAcceptable[$iIndex],'REG_SZ')
EndIf
Next