The NSIS script below removes some HKCU\SOFTWARE\Classes sub entries, but not the entries listed below,
Not Removed Associations:
HKCU\SOFTWARE\Classes\.cbp
HKCU\SOFTWARE\Classes\.cc
HKCU\SOFTWARE\Classes\.tcc
HKCU\SOFTWARE\Classes\.workspace
HKCU\SOFTWARE\Classes\CodeBlocks.cpp
HKCU\SOFTWARE\Classes\CodeBlocks.hpp
HKCU\SOFTWARE\Classes\CodeBlocks.tpp
NSIS Script snippet that includes NSIS special build logging: # Start Unregister CodeBlocks associated files - see FileAssocation.cpp
# or check out the registry "Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\CodeBlocks.*" entries.
${If} ${RunningX64}
LogText "SetRegView 64"
SetRegView 64
StrCpy $0 0 ; Registry key index
; Length of "CodeBlocks" = 10
enumunkey64:
EnumRegKey $1 HKCU "SOFTWARE\Classes" $0
;LogText "Read HKCU\SOFTWARE\Classes\$1"
IntOp $0 $0 + 1
StrCmp $1 "" done64
StrCpy $2 $1 10 0
; LogText "Read 0 = $0 , 1 = $1 , 2 = $2"
StrCmp $2 "CodeBlocks" 0 enumunkey64
StrLen $3 $1
IntOp $3 $3 - 10 ; Includes .
StrCpy $4 $1 $3 10 ; Includes .
LogText "L2755 1 = $1 , 2 = $2 , 3 = $3 , 4 = $4"
StrCmp $4 "" enumunkey64
ReadRegStr $5 HKCU "SOFTWARE\Classes\$4" ""
LogText "L2758 1 = $1 , 2 = $2 , 5 = $5"
StrCmp $5 $1 0 DelCodeBlocksEntry64 ; If no file extension classes found then goto DelCodeBlocksEntry
StrCmp $5 $2 0 DelCodeBlocksEntry64 ; If file extension classes is not for codeblocks entry goto DelCodeBlocksEntry
LogText "TBA L2761 Found : 'SOFTWARE\Classes\$1'"
LogText "ReadRegStr 'SOFTWARE\Classes\$4' returned $5"
LogText "DeleteRegValue HKCU 'SOFTWARE\Classes\$4' ''"
DeleteRegValue HKCU "SOFTWARE\Classes\$4" "" ; Delete default as it is codeblocks
LogText "DeleteRegKey /IfEmpty HKCU 'SOFTWARE\Classes\$4'"
DeleteRegKey /IfEmpty HKCU "SOFTWARE\Classes\$4"
DelCodeBlocksEntry64:
DeleteRegKey HKCU "SOFTWARE\Classes\$1"
Goto enumunkey64
done64:
# Finish Unregister CodeBlocks associated files - see FileAssocation.cpp
SetRegView 32
LogText "SetRegView 32"
${EndIf}
StrCpy $0 0 ; Registry key index
; Length of "CodeBlocks" = 10
enumunkey:
EnumRegKey $1 HKCU "SOFTWARE\Classes" $0
;LogText "Read HKCU\SOFTWARE\Classes\$1"
IntOp $0 $0 + 1
StrCmp $1 "" done
StrCpy $2 $1 10 0
;LogText "Read 0 = $0 , 1 = $1 , 2 = $2"
StrCmp $2 "CodeBlocks" 0 enumunkey
StrLen $3 $1
IntOp $3 $3 - 10 ; Includes .
StrCpy $4 $1 $3 10 ; Includes .
LogText "L2791 1 = $1 , 2 = $2 , 3 = $3 , 4 = $4"
StrCmp $4 "" enumunkey
ReadRegStr $5 HKCU "SOFTWARE\Classes\$4" ""
LogText "L2794 1 = $1 , 2 = $2 , 5 = $5"
StrCmp $5 $1 0 DelCodeBlocksEntry ; If no file extension classes found then goto DelCodeBlocksEntry
StrCmp $5 $2 0 DelCodeBlocksEntry ; If file extension classes is not for codeblocks entry goto DelCodeBlocksEntry
LogText "TBA L2797 Found : 'SOFTWARE\Classes\$1'"
LogText "ReadRegStr 'SOFTWARE\Classes\$4' returned $5"
LogText "DeleteRegValue HKCU 'SOFTWARE\Classes\$4' ''"
DeleteRegValue HKCU "SOFTWARE\Classes\$4" "" ; Delete default as it is codeblocks
LogText "DeleteRegKey HKCU 'SOFTWARE\Classes\$4'"
DeleteRegKey HKCU "SOFTWARE\Classes\$4"
DelCodeBlocksEntry:
DeleteRegKey HKCU "SOFTWARE\Classes\$1"
Goto enumunkey
I have used the MS Process Monitor to see if there is any differences between the HKCU\SOFTWARE\Classes\CodeBlocks.tpp and HKCU\SOFTWARE\Classes\CodeBlocks.cbp access when running Code::Block for the first time when I associate CB with the C/C++ files and I could not see any differences, but I must have missed something as the CodeBlocks.cbp is removed and the CodeBlocks.tpp is not....