;Created by OwD : 12.02.2003. Last modified :14.03.2003. !define MUI_PRODUCT "DSV MS" !define MUI_VERSION "1.0" !define MUI_ICON "setup5.ico" !define MUI_UNICON "setup5.ico" CRCCheck On InstType "Full (w/ Source and Help)" ShowInstDetails show ShowUninstDetails show SetOverwrite on SetDateSave on !include "${NSISDIR}\Contrib\Modern UI\System.nsh" OutFile "DSV MS v1.0 Installer.exe" InstallDir "C:\DSVMS" InstallDirRegKey HKLM "SOFTWARE\DSV MS" "" !define MUI_WELCOMEPAGE !define MUI_LICENSEPAGE !define MUI_COMPONENTSPAGE !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_DIRECTORYPAGE !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE ;!define MUI_FINISHPAGE_RUN_NOTCHECKED "$INSTDIR\DSVMS.EXE" ;!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED "$INSTDIR\Help\index.html" !define MUI_ABORTWARNING !define MUI_UNINSTALLER !define MUI_UNCONFIRMPAGE !define MUI_UNFINISHHEADER !define MUI_SPECIALBITMAP "modern-wizard.bmp" !define MUI_HEADERBITMAP "modern-header.bmp" !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Romanian" LangString DESC_SecCore ${LANG_ENGLISH} "The Core files required to use DSV MS" LangString DESC_SecCore ${LANG_ROMANIAN} "Fisierele de baza pentru a putea folosi DSV MS" LangString DESC_SecHelp ${LANG_ENGLISH} "Help files for using DSV MS" LangString DESC_SecHelp ${LANG_ROMANIAN} "Fisierele 'help' pentru DSV MS" LangString DESC_SecIcons ${LANG_ENGLISH} "Adds icons to your start menu and your desktop for easy access" LangString DESC_SecIcons ${LANG_ROMANIAN} "Adaugare scurtaturi in start menu si desktop pentru acces usor" LicenseData /LANG=${LANG_ENGLISH} "License.txt" LicenseData /LANG=${LANG_ROMANIAN} "License.txt" !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS !insertmacro MUI_RESERVEFILE_SPECIALINI !insertmacro MUI_RESERVEFILE_SPECIALBITMAP ;______________________________________________________________________________ ; Upgrade DLL File ; !insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" ; !define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL which cannot be registered SetOverwrite Try !macro UpgradeDLL LOCALFILE DESTFILE Push $R0 Push $R1 Push $R2 Push $R3 ;Check file and version IfFileExists "${DESTFILE}" "" "copy_${LOCALFILE}" ClearErrors GetDLLVersionLocal "${LOCALFILE}" $R0 $R1 GetDLLVersion "${DESTFILE}" $R2 $R3 IfErrors "upgrade_${LOCALFILE}" IntCmpU $R0 $R2 "" "done_${LOCALFILE}" "upgrade_${LOCALFILE}" IntCmpU $R1 $R3 "done_${LOCALFILE}" "done_${LOCALFILE}" "upgrade_${LOCALFILE}" ;Let's upgrade the DLL! "upgrade_${LOCALFILE}:" !ifndef UPGRADEDLL_NOREGISTER ;Unregister the DLL UnRegDLL "${DESTFILE}" !endif ;Try to copy the DLL directly ClearErrors StrCpy $R0 "${DESTFILE}" Call ":file_${LOCALFILE}" IfErrors "" "noreboot_${LOCALFILE}" ;DLL is in use. Copy it to a temp file and Rename it on reboot. GetTempFileName $R0 Call ":file_${LOCALFILE}" Rename /REBOOTOK $R0 "${DESTFILE}" ;Register the DLL on reboot !ifndef UPGRADEDLL_NOREGISTER WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \ "Register ${DESTFILE}" '"$SYSDIR\rundll32.exe" "${DESTFILE},DllRegisterServer"' !endif Goto "done_${LOCALFILE}" ;DLL does not exist - just extract "copy_${LOCALFILE}:" StrCpy $R0 "${DESTFILE}" Call ":file_${LOCALFILE}" ;Register the DLL "noreboot_${LOCALFILE}:" !ifndef UPGRADEDLL_NOREGISTER RegDLL "${DESTFILE}" !endif ;Done "done_${LOCALFILE}:" Pop $R3 Pop $R2 Pop $R1 Pop $R0 ;End Goto "end_${LOCALFILE}" ;Called to extract the DLL "file_${LOCALFILE}:" File /oname=$R0 "${LOCALFILE}" Return "end_${LOCALFILE}:" !macroend ;______________________________________________________________________________ ; AddSharedDLL - Increments a shared DLLs reference count. ; Push $SYSDIR\myDll.dll ; Call AddSharedDLL Function AddSharedDLL Exch $R1 Push $R0 ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 IntOp $R0 $R0 + 1 WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0 Pop $R0 Pop $R1 FunctionEnd ;______________________________________________________________________________ ; un.RemoveSharedDLL - Decrements a shared DLLs reference count, and removes if necessary. ; Note: for use in the main installer (not the uninstaller), rename the function to RemoveSharedDLL. ; Push $SYSDIR\myDll.dll ; Call un.RemoveSharedDLL Function un.RemoveSharedDLL Exch $R1 Push $R0 ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 StrCmp $R0 "" remove IntOp $R0 $R0 - 1 IntCmp $R0 0 rk rk uk rk: DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 goto remove uk: WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0 Goto noremove remove: Delete /REBOOTOK $R1 noremove: Pop $R0 Pop $R1 FunctionEnd ;___________________________________________________________________ ;Installer Sections Section "Core Files (required)" SecCore SectionIn 1 2 RO SetOutPath "$INSTDIR" ;RMDir /r "$SMPROGRAMS\DSV MS" ;FILE "VB\RegTLib.exe" IfFileExists $INSTDIR\DSVMS.exe skipAddShared ;skip shared count increasing if already done once SetOutPath "$SYSDIR" !insertmacro UpgradeDLL VB\vb6stkit.dll $SYSDIR\vb6stkit.dll !insertmacro UpgradeDLL VB\Comcat.dll $SYSDIR\Comcat.dll !insertmacro UpgradeDLL VB\msvcrt40.dll $SYSDIR\msvcrt40.dll !define UPGRADEDLL_NOREGISTER !insertmacro UpgradeDLL VB\Stdole2.tlb $SYSDIR\Stdole2.tlb !undef UPGRADEDLL_NOREGISTER !insertmacro UpgradeDLL VB\Asycfilt.dll $SYSDIR\Asycfilt.dll !insertmacro UpgradeDLL VB\Olepro32.dll $SYSDIR\Olepro32.dll !insertmacro UpgradeDLL VB\Oleaut32.dll $SYSDIR\Oleaut32.dll !insertmacro UpgradeDLL VB\Msvbvm60.dll $SYSDIR\Msvbvm60.dll !insertmacro UpgradeDLL VB\msstdfmt.dll $SYSDIR\msstdfmt.dll !insertmacro UpgradeDLL VB\msadodc.ocx $SYSDIR\msadodc.ocx !insertmacro UpgradeDLL VB\dblist32.ocx $SYSDIR\dblist32.ocx !insertmacro UpgradeDLL VB\msbind.dll $SYSDIR\msbind.dll !define UPGRADEDLL_NOREGISTER !insertmacro UpgradeDLL VB\msado20.tlb $SYSDIR\msado20.tlb !undef UPGRADEDLL_NOREGISTER SetOutPath "$PROGRAMFILES\Common Files\Designer" !insertmacro UpgradeDLL VB\msderun.dll "$PROGRAMFILES\Common Files\Designer\msderun.dll" SetOutPath "$SYSDIR" !insertmacro UpgradeDLL VB\MSDBRPTR.DLL $SYSDIR\MSDBRPTR.DLL !insertmacro UpgradeDLL VB\Msflxgrd.ocx $SYSDIR\Msflxgrd.ocx !insertmacro UpgradeDLL VB\VB5DB.DLL $SYSDIR\VB5DB.DLL !insertmacro UpgradeDLL VB\MSREPL35.DLL $SYSDIR\MSREPL35.DLL !insertmacro UpgradeDLL VB\MSRD2X35.DLL $SYSDIR\MSRD2X35.DLL !insertmacro UpgradeDLL VB\EXPSRV.DLL $SYSDIR\EXPSRV.DLL !insertmacro UpgradeDLL VB\VBAJET32.DLL $SYSDIR\VBAJET32.DLL !insertmacro UpgradeDLL VB\MSJINT35.DLL $SYSDIR\MSJINT35.DLL !insertmacro UpgradeDLL VB\MSJTER35.DLL $SYSDIR\MSJTER35.DLL !insertmacro UpgradeDLL VB\MSJET35.DLL $SYSDIR\MSJET35.DLL SetOutPath "$PROGRAMFILES\Common Files\Microsoft Shared\DAO" !insertmacro UpgradeDLL VB\DAO350.DLL "$PROGRAMFILES\Common Files\Microsoft Shared\DAO\DAO350.DLL" SetOutPath "$SYSDIR" !insertmacro UpgradeDLL VB\DBGRID32.OCX $SYSDIR\DBGRID32.OCX !insertmacro UpgradeDLL VB\Mscomctl.ocx $SYSDIR\Mscomctl.ocx Push $SYSDIR\vb6stkit.dll Call AddSharedDLL Push $SYSDIR\Comcat.dll Call AddSharedDLL Push $SYSDIR\msvcrt40.dll Call AddSharedDLL Push $SYSDIR\Stdole2.tlb Call AddSharedDLL Push $SYSDIR\Asycfilt.dll Call AddSharedDLL Push $SYSDIR\Olepro32.dll Call AddSharedDLL Push $SYSDIR\Oleaut32.dll Call AddSharedDLL Push $SYSDIR\Msvbvm60.dll Call AddSharedDLL Push $SYSDIR\msstdfmt.dll Call AddSharedDLL Push $SYSDIR\msadodc.ocx Call AddSharedDLL Push $SYSDIR\dblist32.ocx Call AddSharedDLL Push $SYSDIR\msbind.dll Call AddSharedDLL Push $SYSDIR\msado20.tlb Call AddSharedDLL Push "$PROGRAMFILES\Common Files\Designer\msderun.dll" Call AddSharedDLL Push $SYSDIR\msdbrptr.dll Call AddSharedDLL Push $SYSDIR\msflxgrd.ocx Call AddSharedDLL Push $SYSDIR\vb5db.dll Call AddSharedDLL Push $SYSDIR\msrepl35.dll Call AddSharedDLL Push $SYSDIR\msrd2x35.dll Call AddSharedDLL Push $SYSDIR\expsrv.dll Call AddSharedDLL Push $SYSDIR\vbajet32.dll Call AddSharedDLL Push $SYSDIR\msjint35.dll Call AddSharedDLL Push $SYSDIR\msjter35.dll Call AddSharedDLL Push $SYSDIR\msjet35.dll Call AddSharedDLL Push "$PROGRAMFILES\Common Files\Microsoft Shared\DAO\dao350.dll" Call AddSharedDLL Push $SYSDIR\dbgrid32.ocx Call AddSharedDLL Push $SYSDIR\mscomctl.ocx Call AddSharedDLL SetOutPath "$INSTDIR" FILE "VB\MDAC_TYP.EXE" ExecWait "$INSTDIR\MDAC_TYP.EXE /Q" SetOverwrite On FILE "Core\DSVMS.exe" FILE "Core\FM20.DLL" FILE "Core\Laborator.mdb" FILE "Core\Norme.mdb" FILE "Core\Users.mdb" WriteRegStr HKCU "Software\${MUI_PRODUCT}" "Installer Language" $LANGUAGE WriteUninstaller "$INSTDIR\Uninstall.exe" SetRebootFlag True skipAddShared: SetOverwrite On FILE "Core\DSVMS.exe" FILE "Core\FM20.DLL" FILE "Core\Laborator.mdb" FILE "Core\Norme.mdb" WriteRegStr HKCU "Software\${MUI_PRODUCT}" "Installer Language" $LANGUAGE WriteUninstaller "$INSTDIR\Uninstall.exe" SectionEnd Section "Help Files" SecHelp SectionIn 1 2 SetOutPath "$INSTDIR\Help" SetOverwrite On FILE "Help\Index.html" SectionEnd Section "Start Menu + Desktop Shortcuts" SecIcons SectionIn 1 2 SetOutPath $INSTDIR CreateDirectory "$SMPROGRAMS\Redatronic NET" CreateShortCut "$SMPROGRAMS\Redatronic NET\DSV MS 1.0.lnk" "$INSTDIR\DSVMS.exe" "" "$INSTDIR\DSVMS.exe" 0 CreateShortCut "$SMPROGRAMS\Redatronic NET\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 CreateShortCut "$DESKTOP\DSV MS 1.0.lnk" "$INSTDIR\DSVMS.exe" "" "$INSTDIR\DSVMS.exe" 0 SectionEnd ;Installer Functions Function .onInit ; Push Tahoma ; Push 8 StrCpy $LANGUAGE ${LANG_ENGLISH} !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd ;Descriptions !insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} $(DESC_SecCore) !insertmacro MUI_DESCRIPTION_TEXT ${SecHelp} $(DESC_SecHelp) !insertmacro MUI_DESCRIPTION_TEXT ${SecIcons} $(DESC_SecIcons) !insertmacro MUI_FUNCTIONS_DESCRIPTION_END Section -post SetOutPath $INSTDIR WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\DSV MS" "DisplayName" "DSV MS (remove only)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\DSV MS" "UninstallString" "$INSTDIR\Uninstall.exe" SectionEnd ;Uninstaller Section Section "Uninstall" Delete "$INSTDIR\Help\*.*" Delete "$INSTDIR\*.*" RMDir /r $INSTDIR Delete "$SMPROGRAMS\Redatronic NET\*.*" Delete "$DESKTOP\DSV MS 1.0.lnk" RmDir /r "$SMPROGRAMS\Redatronic NET" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\DSV MS" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DSV MS" DeleteRegValue HKCU "Software\${MUI_PRODUCT}" "Installer Language" SectionEnd ;Uninstaller Functions Function un.onInit ReadRegStr $LANGUAGE HKCU "Software\${MUI_PRODUCT}" "Installer Language" FunctionEnd