Цитата kotkovets:
AIMP3.exe /REG=MENU --> контекстное меню файлов (регистрация dll, независимо от системы)
AIMP3.exe /REG=R --> ассоциация файлов с AIMP3 (независимо от системы)
AIMP3.exe /REG=UALL --> разрегистрирует dll и уберет ассоциации файлов. (независимо от системы)
Вроде бы все просто и достаточно прозрачно. »
|
Мы же не ищем легких путей
.
Сделал так:
Код:
Function .OnInit
;
StrCpy $SysDrive $WINDIR 2
;
${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe"
${OrIf} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.INI"
${OrIf} ${FileExists} "$PROGRAMFILES\AIMP3\profile\AIMP3.INI"
${OrIf} ${FileExists} "$PROGRAMFILES\AIMP3\profile\AIMP3_MENU.INI"
${OrIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu32.dll"
${OrIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu64.dll"
;
${OrIf} ${FileExists} "$SysDrive\AIMP3\AIMP3.exe"
${OrIf} ${FileExists} "$SysDrive\AIMP3\AIMP3.INI"
${OrIf} ${FileExists} "$SysDrive\AIMP3\profile\AIMP3.INI"
${OrIf} ${FileExists} "$SysDrive\AIMP3\profile\AIMP3_MENU.INI"
${OrIf} ${FileExists} "$SysDrive\AIMP3\Modules\aimp_menu32.dll"
${OrIf} ${FileExists} "$SysDrive\AIMP3\Modules\aimp_menu64.dll"
;
${OrIf} ${FileExists} "$APPDATA\AIMP3\AIMP3.INI"
${OrIf} ${FileExists} "$APPDATA\AIMP3\AIMP3_MENU.INI"
${OrIf} ${FileExists} "$INSTDIR\AIMP3.INI"
${OrIf} ${FileExists} "$INSTDIR\profile\AIMP3.INI"
${OrIf} ${FileExists} "$INSTDIR\AIMP3\AIMP3.INI"
;
MessageBox MB_OKCANCEL|MB_USERICON|MB_TOPMOST "ВНИМАНИЕ!$\n\
$\nAIMP3 уже установлен, или на вашем компьютере есть настройки этого приложения. \
$\nДанный инсталлятор не может быть использован поверх уже установленного AIMP3. \
$\nПри нажатии кнопки 'Ok' будет произведено полное удаление предыдущей установки \
$\nи выполнена новая установка AIMP3. \
$\nПри нажатии кнопки 'Отмена' установка AIMP3 будет отменена. \
$\nВыполнить новую установку AIMP3 ?" /SD IDOK IDCANCEL cancel
;
${If} ${RunningX64}
${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe"
${AndIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu64.dll"
ExecWait "$\"$PROGRAMFILES\AIMP3\AIMP3.exe$\" /REG=UALL"
StrCpy $R1 "$PROGRAMFILES\AIMP3\Modules\aimp_menu64.dll"
${Else}
ReadRegStr $1 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" ""
StrCpy $R1 $1
regdll "$R1" ContextMenuAddonUnregister
${EndIf}
${Else}
${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe"
${AndIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu32.dll"
ExecWait "$\"$PROGRAMFILES\AIMP3\AIMP3.exe$\" /REG=UALL"
StrCpy $R1 "$PROGRAMFILES\AIMP3\Modules\aimp_menu32.dll"
${Else}
ReadRegStr $1 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" ""
StrCpy $R1 $1
regdll "$R1" ContextMenuAddonUnregister
${EndIf}
${EndIf}
;
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" ""
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}"
;
ExecWait 'taskkill /F /IM explorer.exe' $0
DetailPrint "taskkill exit: [ $0 ]"
Sleep 500
StrCmp $0 0 0 +2
Exec "explorer.exe"
;
Delete "$R1"
;
${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe"
RMDir /r "$PROGRAMFILES\AIMP3"
${Else}
${GetParent} "$R1" $2
StrCpy "$R2" $2
${GetParent} "$R2" $3
StrCpy "$R3" $3
RMDir /r "$R3"
${EndIf}
;
ReadRegStr $4 HKLM "SOFTWARE\Classes\CLSID\{0041494D-5033-4472-6F70-546172676574}\LocalServer32" ""
StrCpy "$R4" $4
${GetParent} "$R4" $5
StrCpy "$R5" $5
RMDir /r "$R5"
;
ReadRegStr $6 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AIMP3.exe" ""
StrCpy "$R6" $6
${GetParent} "$R6" $7
StrCpy "$R7" $7
RMDir /r "$R7"
;
-прочие комманды удаления
;
SetShellVarContext current
RMDir /r "$APPDATA\AIMP3"
${EndIf}
FunctionEnd