Уважаемый,
kotkovets, почитал вашу статью про макрос. Вот, что написано:
целесообразно создавать структуру ассоциаций файлов либо в ветке реестра HKEY_LOCAL_MACHINE\Software\Classes, либо в HKEY_CURRENT_USER\Software\Classes, причем последняя имеет приоритет, и при построении представления HKEY_CLASSES_ROOT будет иметь приоритет над HKEY_LOCAL_MACHINE.
При этом, приходилось, читать в литературе, что внесение записей непосредственно в HKEY_CLASSES_ROOT приоритетно над обоими ветками..
В связи с этим возник вопрос : не лишено ли смысла вносить записи одновременно в HKLM и в HKCR, если привести макрос к такому виду (упрощенно) ?
Код:

!macro RegisterExtension extenstion
StrCpy $ClassName "KMPlayer.${extenstion}"
WriteRegStr HKCR ".${extenstion}" "" "$ClassName"
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName"
DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName"
;;
WriteRegStr HKCR "$ClassName\CLSID" "" "{9EB4C4CB-74C2-4BE9-AA5D-8249F16020AD}"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\CLSID" "" "{9EB4C4CB-74C2-4BE9-AA5D-8249F16020AD}"
;
WriteRegStr HKCR "$ClassName\shell" "" "play"
WriteRegStr HKCR "$ClassName\shell\play" "" "Воспроизвести в KMP"
WriteRegStr HKCR "$ClassName\shell\play\command" "" "$PlayCommand"
WriteRegStr HKCR "$ClassName\shell\play\DropTarget" "Clsid" "{9EB4C4CB-74C2-4BE9-AA5D-8249F16020AD}"
;
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell" "" "play"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\play" "" "Воспроизвести в KMP"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\play\command" "" "$PlayCommand"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\play\DropTarget" "Clsid" "{9EB4C4CB-74C2-4BE9-AA5D-8249F16020AD}"
!macroend
Я проверил на реальной установке - работает, и ассоциации удаляются макросом де-регистрации через HKCR. Но, вот правильно это или нет, мучают сомнения.