Часто сталкивался с задачей, когда много DLL-ок, нужно положить в системную папку.
А если такие DLL-ки уже существует и даже кем-то используются, и таких
если возникает много.
Вот накалякал простой макрос для подобного случая. Вопрос такой, а стоит овчинка выделки?
читать дальше »
Код:
!define RegApplicate "Software\Thinga\WinMega" # куст приложения!
!define MyPATH "D:\Test\SysDll" # место паковки программы ${MyPATH}
;---------
!macro CheckeInstall SysDll
IfFileExists "$SYSDIR\${SysDll}.dll" 0 +3
WriteRegStr HKLM "${RegApplicate}\SysDLL" "${SysDll}" 0 # значение в новом разделе!
Goto ${SysDll}
SetOutPath $SYSDIR
SetDateSave off
SetOverwrite ifnewer
File "${MyPATH}\${SysDll}.dll"
WriteRegStr HKLM "${RegApplicate}\SysDLL" "${SysDll}" 1 # значение в новом разделе!
WriteRegStr HKLM "${RegApplicate}\SysDLL" "SetFirst" 1 # значение в новом разделе!
${SysDll}:
!macroend
!macro unCheckeInstall SysDll
ReadRegStr $0 HKLM "${RegApplicate}\SysDLL" ${SysDll}
StrCmp $0 1 0 +2
Delete "$SYSDIR\${SysDll}.dll"
!macroend
Section # секция установки файлов!
ReadRegStr $0 HKLM "${RegApplicate}\SysDLL" "SetFirst"
Iferrors nonexistent exist # перепрыгнуть!
nonexistent:
!insertmacro CheckeInstall "msvca71" # обозвать только имя DLL
!insertmacro CheckeInstall "msvcb71" # обозвать только имя DLL
!insertmacro CheckeInstall "msvcc71" # обозвать только имя DLL
!insertmacro CheckeInstall "msvcd71" # обозвать только имя DLL
exist:
;---------
SectionEnd
;---------
Section Uninstall # секция удаления!
!insertmacro unCheckeInstall "msvca71"
!insertmacro unCheckeInstall "msvcb71"
!insertmacro unCheckeInstall "msvcc71"
!insertmacro unCheckeInstall "msvcd71"
DeleteRegKey HKLM "${RegApplicate}"
DeleteRegKey /ifempty HKLM "Software\Thinga"
SectionEnd
--