|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :. |
|
[архив].: NSIS - все вопросы :.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
|
|
Отправлено: 23:35, 17-06-2006 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата wolkow70:
Если чешется можно искать файлы/настройки по всему компу... Вопрос в том, сколько времени это займет... Цитата wolkow70:
GetParent(смотрите справку) - папку программы [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32] @="C:\\AIMP3\\Modules\\aimp_menu32.dll" Цитата wolkow70:
AIMP3.exe /REG=MENU --> контекстное меню файлов (регистрация dll, независимо от системы) AIMP3.exe /REG=R --> ассоциация файлов с AIMP3 (независимо от системы) AIMP3.exe /REG=UALL --> разрегистрирует dll и уберет ассоциации файлов. (независимо от системы) Вроде бы все просто и достаточно прозрачно. |
|||
------- Последний раз редактировалось kotkovets, 24-01-2012 в 14:34. Отправлено: 14:22, 24-01-2012 | #2231 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Пока не придумал ничего другого, чем взять путь из CLSID
ReadRegStr $0 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "" StrCpy $DllPath $0 ; regdll "$DllPath" ContextMenuAddonUnregister DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" "" DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" |
------- Последний раз редактировалось wolkow70, 24-01-2012 в 14:37. Отправлено: 14:22, 24-01-2012 | #2232 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Искать путь к AIMP3.exe через DLL не надежно, программа может быть установлена и без регистрации контекста.
|
------- Отправлено: 14:37, 24-01-2012 | #2233 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Ситуация такая. На компьютере у пользователя стоит программа. Я ставлю точно такую же, но другой версии. Нужно сравнить версии программы на компе и той, что я ставлю. Если у пользователя версия новее - просот обрубаем инсталятор, если новее моя - удаляем старую и ставим мою. С этим проблем нет. И с определением версии программы на комьютере проблем нет(просто посмотрим в реестре), а вот как узнать версию инсталируемого продукта (чтобы провести сравнение)?
P.S. В скрипт версию хардкодить нельзя. |
Отправлено: 15:52, 25-01-2012 | #2234 |
Ветеран Сообщения: 2360
|
Профиль | Отправить PM | Цитировать Paval,
Возможно так : !include "FileFunc.nsh" Section ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\App1" "DisplayVersion" MessageBox MB_OK "Версия установленной программы $R0" ${GetFileVersion} "App2.exe" $R1 MessageBox MB_OK "Версия устанавливаемой программы $R1" ;затем сравниваем значения переменных (здесь тоже могут быть варианты, в зависимости от нумерации и пр.) , и т.д. SectionEnd (Если же инсталлятор устанавливаемой программы, бестолковый, т.е. версия не указана, то придётся предварительно распаковать эту прогу в Temp и фиксировать версию исполняемого файла или ещё какого-нибудь с признаком версии...) |
Последний раз редактировалось MKN, 25-01-2012 в 16:46. Отправлено: 16:40, 25-01-2012 | #2235 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата MKN:
P.S. Мне рекомендовали передавать версию через параметры. (я так понимаю командной стороки). Только хз как их задать. |
|
Отправлено: 17:06, 25-01-2012 | #2236 |
Ветеран Сообщения: 2360
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:11, 25-01-2012 | #2237 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Цитата kotkovets:
Сделал так: 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 |
|
------- Последний раз редактировалось wolkow70, 25-01-2012 в 17:25. Отправлено: 17:18, 25-01-2012 | #2238 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата Paval:
1. Из реестра, текстового файла... 2. Из исполняемого файла программы, макросом GetFileVersion (FileFunc.nsh) 3. Затем сравниваем полученную версию программы и исходно устанавливаемую. !include "WordFunc.nsh" !define version "1.1.3" ;исходно устанавлимая версия ;-- Section ;команды получения установленной версии ;к примеру мы получили версию в $1 StrCpy $1 "1.1.0" ${VersionCompare} "$1" "${version}" $0 ${If} $0 == 0 MessageBox MB_OK "версии равны" ${ElseIf} $0 == 1 MessageBox MB_OK "исходная версия, меньше полученной" ${ElseIf} $0 == 2 MessageBox MB_OK "исходная версия, больше полученной" ${EndIf} SectionEnd Цитата Paval:
1. У вас есть некий установщик проги, назовем его Х, а скрипта нет. 2. Вы хотите написать скрипт, который заводит/отменяет установку X в зависимости от ваших условий. Цитата wolkow70:
Цитата kotkovets:
при втором GetParent будет --> C:\AIMP3 , и затем нужно удалить папку проги ReadRegStr $4 HKLM "SOFTWARE\Classes\CLSID\{0041494D-5033-4472-6F70-546172676574}\LocalServer32" "" ${GetParent} "$4" "$4" ${GetParent} "$4" "$4" RMDir /r "$4" ;-- StrCpy $4 "C:\AIMP3\Modules\aimp_menu32.dll" ${GetParent} "$4" "$4" MessageBox MB_OK "$4" IDOK ${GetParent} "$4" "$4" MessageBox MB_OK "$4" IDOK |
||||
------- Последний раз редактировалось kotkovets, 25-01-2012 в 19:02. Отправлено: 17:34, 25-01-2012 | #2239 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Цитата kotkovets:
ReadRegStr $1 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "" StrCpy $R1 $1 regdll "$R1" ContextMenuAddonUnregister ${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} Цитата kotkovets:
Кстати, у меня применяется ключ, если программа установлена в директорию по умолчанию. ${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe" ${AndIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu32.dll" ExecWait "$\"$PROGRAMFILES\AIMP3\AIMP3.exe$\" /REG=UALL" |
||
------- Последний раз редактировалось wolkow70, 26-01-2012 в 06:06. Отправлено: 05:59, 26-01-2012 | #2240 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. | ssaram | Программное обеспечение Windows | 406 | 12-02-2022 19:45 | |
WinstyleMonitor .:[все вопросы]:. | Mr dUSHA | Проект WinStyle | 331 | 12-02-2014 13:15 | |
Delphi - Delphi .: [все вопросы] :. | Serega | Программирование и базы данных | 94 | 04-05-2013 18:45 | |
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. | Microsoft Windows 2000/XP | 105 | 30-06-2010 11:58 | ||
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|