1; Cf. http://nsis.sourceforge.net/File_Association 2; I commented out the 'edit' association which is confusing 3 4!define registerExtension "!insertmacro registerExtension" 5!define unregisterExtension "!insertmacro unregisterExtension" 6 7!macro registerExtension executable extension description 8 Push "${executable}" ; "full path to my.exe" 9 Push "${extension}" ; ".mkv" 10 Push "${description}" ; "MKV File" 11 Call registerExtension 12!macroend 13 14; back up old value of .opt 15Function registerExtension 16!define Index "Line${__LINE__}" 17 pop $R0 ; ext name 18 pop $R1 19 pop $R2 20 push $1 21 push $0 22 ReadRegStr $1 HKCR $R1 "" 23 StrCmp $1 "" "${Index}-NoBackup" 24 StrCmp $1 "OptionsFile" "${Index}-NoBackup" 25 WriteRegStr HKCR $R1 "backup_val" $1 26"${Index}-NoBackup:" 27 WriteRegStr HKCR $R1 "" $R0 28 ReadRegStr $0 HKCR $R0 "" 29 StrCmp $0 "" 0 "${Index}-Skip" 30 WriteRegStr HKCR $R0 "" $R0 31 WriteRegStr HKCR "$R0\shell" "" "open" 32 WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" 33"${Index}-Skip:" 34 WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' 35; WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" 36; WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' 37 pop $0 38 pop $1 39!undef Index 40FunctionEnd 41 42!macro unregisterExtension extension description 43 Push "${extension}" ; ".mkv" 44 Push "${description}" ; "MKV File" 45 Call un.unregisterExtension 46!macroend 47 48Function un.unregisterExtension 49 pop $R1 ; description 50 pop $R0 ; extension 51!define Index "Line${__LINE__}" 52 ReadRegStr $1 HKCR $R0 "" 53 StrCmp $1 $R1 0 "${Index}-NoOwn" ; only do this if we own it 54 ReadRegStr $1 HKCR $R0 "backup_val" 55 StrCmp $1 "" 0 "${Index}-Restore" ; if backup="" then delete the whole key 56 DeleteRegKey HKCR $R0 57 Goto "${Index}-NoOwn" 58"${Index}-Restore:" 59 WriteRegStr HKCR $R0 "" $1 60 DeleteRegValue HKCR $R0 "backup_val" 61 DeleteRegKey HKCR $R1 ;Delete key with association name settings 62"${Index}-NoOwn:" 63!undef Index 64FunctionEnd 65