diff --git a/win_installer.nsi b/win_installer.nsi index fee00cb..28c83d4 100644 --- a/win_installer.nsi +++ b/win_installer.nsi @@ -1,3 +1,78 @@ +/****************************************************************************** + WORKAROUND - FixShortcut + This snippet was developed to address an issue with Windows + x64 incorectly redirecting the shortcuts icon from $PROGRAMFILES32 + to $PROGRAMFILES64. + + See Forum post: http://forums.winamp.com/newreply.php?do=postreply&t=327806 + + Example: + CreateShortcut "$SMPROGRAMS\My App\My App.lnk" "$INSTDIR\My App.exe" "" "$INSTDIR\My App.exe" + ${lnkX64IconFix} "$SMPROGRAMS\My App\My App.lnk" + + Original Code by Anders - http://forums.winamp.com/member.php?u=70852 +******************************************************************************/ +!ifndef ___lnkX64IconFix___ + !verbose push + !verbose 0 + + !include "LogicLib.nsh" + !include "x64.nsh" + + !define ___lnkX64IconFix___ + !define lnkX64IconFix `!insertmacro _lnkX64IconFix` + !macro _lnkX64IconFix _lnkPath + !verbose push + !verbose 0 + ${If} ${RunningX64} + DetailPrint "WORKAROUND: 64bit OS Detected, Attempting to apply lnkX64IconFix" + Push "${_lnkPath}" + Call lnkX64IconFix + ${EndIf} + !verbose pop + !macroend + + Function lnkX64IconFix ; _lnkPath + Exch $5 + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + System::Call 'OLE32::CoCreateInstance(g "{00021401-0000-0000-c000-000000000046}",i 0,i 1,g "{000214ee-0000-0000-c000-000000000046}",*i.r1)i' + ${If} $1 <> 0 + System::Call '$1->0(g "{0000010b-0000-0000-C000-000000000046}",*i.r2)' + ${If} $2 <> 0 + System::Call '$2->5(w r5,i 2)i.r0' + ${If} $0 = 0 + System::Call '$1->0(g "{45e2b4ae-b1c3-11d0-b92f-00a0c90312e1}",*i.r3)i.r0' + ${If} $3 <> 0 + System::Call '$3->5(i 0xA0000007)i.r0' + System::Call '$3->6(*i.r4)i.r0' + ${If} $0 = 0 + IntOp $4 $4 & 0xffffBFFF + System::Call '$3->7(ir4)i.r0' + ${If} $0 = 0 + System::Call '$2->6(i0,i0)' + DetailPrint "WORKAROUND: lnkX64IconFix Applied successfully" + ${EndIf} + ${EndIf} + System::Call $3->2() + ${EndIf} + ${EndIf} + System::Call $2->2() + ${EndIf} + System::Call $1->2() + ${EndIf} + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + FunctionEnd + !verbose pop +!endif + ; Script generated by the HM NIS Edit Script Wizard. ; HM NIS Edit Wizard helper defines @@ -45,7 +120,7 @@ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "dist\Ivolution_${PRODUCT_VERSION}.exe" -InstallDir "$PROGRAMFILES\Ivolution" +InstallDir "$PROGRAMFILES32\Ivolution" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show @@ -61,7 +136,10 @@ Section "IvolutionSection" SEC01 File "dist\Ivolutioner.exe" CreateDirectory "$SMPROGRAMS\Ivolution" CreateShortCut "$SMPROGRAMS\Ivolution\Ivolution.lnk" "$INSTDIR\Ivolutioner.exe" "" "$INSTDIR\data\media\vitruve.ico" + ${lnkX64IconFix} "$SMPROGRAMS\Ivolution\Ivolution.lnk" CreateShortCut "$DESKTOP\Ivolution.lnk" "$INSTDIR\Ivolutioner.exe" "" "$INSTDIR\data\media\vitruve.ico" + ${lnkX64IconFix} "$DESKTOP\Ivolution.lnk" + SetOutPath "$INSTDIR\data\haarcascades" SetOverwrite try File "dist\data\haarcascades\haarcascade_eye.xml" @@ -1130,15 +1208,16 @@ Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\Ivolution\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "$INSTDIR\data\media\vitruve.ico" + ${lnkX64IconFix} "$SMPROGRAMS\Ivolution\Website.lnk" CreateShortCut "$SMPROGRAMS\Ivolution\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\w9xpopen.exe" + WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Ivolutioner.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\w9xpopen.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Ivolutioner.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" @@ -2170,7 +2249,8 @@ Section Uninstall Delete "$SMPROGRAMS\Ivolution\Website.lnk" Delete "$SMPROGRAMS\Ivolution\Ivolution.lnk" Delete "$DESKTOP\Ivolution.lnk" - RMDir "$SMPROGRAMS\Ivolution" + RMDir /r "$APPDATA\Ivolution" + RMDir /r "$SMPROGRAMS\Ivolution" RMDir "$SMPROGRAMS\Ivolution" RMDir "$INSTDIR\tcl\tk8.5\ttk"