Показать полную графическую версию : [архив].: NSIS - все вопросы :.
asetin_9207
01-09-2010, 15:52
Посмотри версии самих файлов обновления!!!
Версии на файлах не пишутся! Версия игры пишется только в этом файле - steam.inf.
steam.inf 2.0.3.4 версии:
PatchVersion=2.0.3.4
ProductName=left4dead2
appID=550
steam.inf 2.0.3.5 версии:
PatchVersion=2.0.3.5
ProductName=left4dead2
appID=550
Вот и все, чем они отличаются. Всего одной версией, а других файлов, чтобы там писалась версия игры - нету! Есть файлы только обновляющие игру, но на них никогда ничего не пишется! Только в steam.inf пишется.
Вот скрин 2- папок с разными версиями: http://rghost.ru/2503983.view
Пс: Я думаю, что маркер в этом и есть (в цифрах). Так как меняя их (цифры) на нужные - блокиратор не выходит.
kotkovets
01-09-2010, 16:02
asetin_9207
Ва так и не нашли надежный маркер для инсталлятора...
Так, что ничем помочь не могу!!
asetin_9207
01-09-2010, 16:11
Ну если его нету! Ведь это такая игра, где файлы обновляются каждый раз, а версия пишется только в одном файле! Что я поделаю? Наверное на эти цифры и надо делать. Такой скрипт, определяющий в steam.inf версию пользователя.
Ведь при установке идет код - InstallDir "$PROGRAMFILES\Left 4 Dead 2\".
Неужели нельзя сделать так, чтобы при наведении на InstallDir "$PROGRAMFILES\Left 4 Dead 2\" он считывал left4dead2\steam.inf и смотрел версию этого файла и исходя из цифер - делал то или иное действие (или аборт, или продолжал инсталл).
Ведь на образце так и есть! Если я буду менять цифру и сделаю подходящей - установка пойдет дальше. Ну попробывать же можно, если вы и говорите, что не надежно. Главное, чтобы он делал аборт, если не верная версия.
kotkovets
01-09-2010, 16:44
Неужели нельзя сделать так, чтобы при наведении на InstallDir "$PROGRAMFILES\Left 4 Dead 2\" он считывал left4dead2\steam.inf »
в файле секций нету > [ ]
asetin_9207
01-09-2010, 16:58
kotkovets
Ну так ведь ее и никогда не было! Но каким образом тогда сделан этот установщик?! Ведь других файлов, определяющих версию нету!
kotkovets
01-09-2010, 19:30
Но патч можно обманывать, если менять циферки »Ну так ведь ее и никогда не было! Но каким образом тогда сделан этот установщик?! »
Так может это патч то и делает, изменяет, читает steam.inf , а не инсталлятор.
Реестр смотрели, версии патчей, пишет в реестр?
asetin_9207
01-09-2010, 19:39
Так может это патч то и делает, изменяет, читает steam.inf , а не инсталлятор. »
В каждом патче лежит этот файт - steam.inf. И с каждым новым патче цифра другая идет.
Реестр смотрели, версии патчей, пишет в реестр? »
Честное слово, не знаю где смотреть. Версии смотрю только в этом файле.
kotkovets
03-09-2010, 02:00
asetin_9207
Давайте так, я вам пример, вы изучате мой пример и делаете выводы!
А то получается, сделайте мне эту фичу,
вставьте мне код этой фичи в мой скрипт, а то я не знаю как!
Если вы пишите в эту тему, то предполагается, что вы изучили, шапку темы,
и основы работы со скриптовым языком NSIS, но у вас появился вопрос...
По этому поводу я писал вам в PM !!!!
Тут нужна дополнительная библиотека.
Берем библиотеку здесь (http://forum.oszone.net/attachment.php?attachmentid=43248&d=1271324095)
Копируем VersionCheck.nsh в папку ${NSISDIR}\Include
В самом начале скрипта добавляем:
!include "WordFunc.nsh"
!include "VersionCheck.nsh" ; подключаем библиотеку
!define NEW_Version "2.0.3.5" ;здесь пишем версию обновления в инсталляторе
!define OLD_Version "2.0.3.4" #здесь пишем предыдущую версию обновления
!define NOT_Version "2.0.3.0" ;здесь пишем версию, которую нельзя обновлять
Section "!Обновление игры" secUpdate
SectionIn 1 2
IfFileExists "Путь к файлу\steam.inf" 0 Next
ClearErrors
FileOpen $R3 "Путь к файлу\steam.inf" r #открываем файл в режиме чтения
IfErrors Next
loop:
FileRead $R3 $R4
StrCmp $R4 "" Next #если искомая строка не найдена
StrCpy $R5 $R4 12 #хитрая команда, типа обрезания
StrCmp $R5 "PatchVersion" 0 +2 #сравнениие если $R5=PatchVersion переход к Yes
Goto +2
Goto loop #переход к loop (получается цикл пока не будет найдена искомая строка)
FileClose $R3 #закрываем файл
StrCpy $R6 $R4 "" 13
${StrFilter} "${NOT_Version}" "1" "" "." $R0 ;фильтруем строку, оставляем цифры
${StrFilter} $R6 "1" "" "." $R8
${VersionCheck} ${NEW_Version} $R6 $R7 ;если ${NEW_Version}=$R6, то $R7=0
;если ${NEW_Version}>$R6, то $R7=1
;если ${NEW_Version}<$R6, то $R7=2
StrCmp $R8 $R0 0 +3
MessageBox MB_ICONSTOP|MB_OK "Упсс! Этот патч нужно ставить на версию игры ${OLD_Version} ! Ваша версия игры - $R6"
Quit ;тут так надежней! с Abort иногда бывают глюки
StrCmp $R7 0 0 +3
MessageBox MB_ICONEXCLAMATION|MB_YESNO "Версия обновления игры и инсталлятора равны!$\r$\nПродолжить установку?" IDYES +2
Quit
StrCmp $R7 2 0 +3
MessageBox MB_ICONSTOP|MB_OK "Версия обновления игры новее, чем в инсталляторе!"
Quit
Next:
SetOutPath "$INSTDIR"
;продолжение скрипта
SectionEnd
Если версия установленного обновления больше, чем в инсталляторе, обновление не будет установлено.
Если версия установленного обновления равна версии в инсталляторе, пользователю будет предложено дальнейшее действие.
Реализован запрет обновления на версию определенную в скрипте.
asetin_9207
03-09-2010, 10:14
Да, сделал выводы. Это замечательно, но...
1. Как сделать запрещенными не только версию (2.0.3.0), но и другие. Начиная с 2.0.0.0 до 2.0.3.4 версии. Всего 34 версии. Каким образом?
Пробовал, но будет некторректно:
!define NOT_Version "2.0.3.0"
2. Моя текущая версия: 2.0.3.4. А патч называется (с 2.0.3.4 до 2.0.3.5), то есть устанавливает 2.0.3.5. Так ведь выходит сообщение, что моя версия игры и устанавливаемая в инсталляторе - равны! Но это же не так, если в инсталляторе версия 35-ая, моей игры - 34-я, то там переменная не правильна? Какую-нибудь R-ку надо менять что ли?
3. Как окрасить в шкуру мою все эти предупредительные сообщения? А то по умолчанию окно стандартное.
kotkovets
03-09-2010, 11:02
Как сделать запрещенными не только версию (2.0.3.0), но и другие. Начиная с 2.0.0.0 до 2.0.3.4 версии. Всего 34 версии. Каким образом? »
строку !define NOT_Version "2.0.3.0" удаляем
заменяем все строки до перехода Next
;скрипт
StrCpy $R6 $R4 "" 13
${StrFilter} "${OLD_Version}" "1" "" "." $R0
${StrFilter} $R6 "1" "" "." $R8
${VersionCheck} ${NEW_Version} $R6 $R7
StrCmp $R8 $R0 0 +2
Goto Next
StrCmp $R7 1 0 +3
MessageBox MB_ICONSTOP|MB_OK "Упсс! Этот патч нужно ставить на версию игры ${OLD_Version} ! Ваша версия игры - $R6"
Quit
StrCmp $R7 0 0 +3
MessageBox MB_ICONEXCLAMATION|MB_YESNO "Версии обновлений игры и инсталлятора равны!$\r$\nПродолжить установку?" IDYES +2
Quit
StrCmp $R7 2 0 +3
MessageBox MB_ICONSTOP|MB_OK "Версия обновления игры новее, чем в инсталляторе!"
Quit
Next:
;продолжение скрипта
Теперь инсталлятор будет обновлять только предыдущую версию обновления.
Как окрасить в шкуру мою все эти предупредительные сообщения? А то по умолчанию окно стандартное »
Не знаю. У разработчиков скинов спросите....
Electron19
03-09-2010, 20:09
Как сделать что-бы в окне COMPONENTS RadioButton выглядили круглыми а Checkbox остались галочными? Как на рисунке.
http://saveimg.ru/show-image.php?id=819d522730701fcb4ae426640a171595
Есть ли возможность в цикле перечислить пути и имена копируемых файлов? Не могу найти взаимодействие с окном Details. Находил некоторые способы но там нельзя уловить при копировании File "${INDIR}\*.*" таким способом.
kotkovets
03-09-2010, 23:11
Как сделать что-бы в окне COMPONENTS RadioButton выглядили круглыми а Checkbox остались галочными? »
На скрине Inno Setup...
Стандартно нет! Можно создать подобное, если "нарисовать" свою страницу (модуль nsDialogs).
В справочнике по NSIS (http://forum.oszone.net/thread-168287.html) отлично описан. Почитайте здесь (http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html) - правда на английском.
Примеры - ..\NSIS\Examples\nsDialogs\
asetin_9207
04-09-2010, 08:19
Function .onVerifyInstDir
1. Делал на один файл проверку, а хочется на много файлов сделать.
Пробывал таких несколько - IfFileExists путь\бла бла бла PathGood
Не корректно выходит.
kotkovets
04-09-2010, 10:38
Делал на один файл проверку, а хочется на много файлов сделать »
IfFileExists "путь к папке\*.*" PathGood
На все файлы в этой папке.
Точнее даже на наличие этой папки...
Electron19
04-09-2010, 14:56
В справочнике по NSIS отлично описан. »
Спасибо друг за ссылку справочника, хорошие примеры описываються, которые я всё время в инете ищу.
Стандартно нет! Можно создать подобное, если "нарисовать" свою страницу (модуль nsDialogs). »
Я думал что можно стандартно, спасибо за ответ, попробую нарисовать. Останется узнать как ListView нарисовать и какой командой индекс рисунка назначать, поищу по вашим ссылкам.
kotkovets
04-09-2010, 15:38
какой командой индекс рисунка назначать »
можно как то так:
Var Image ;объявление переменой
Var Image1 ;объявление переменой
${NSD_CreateBitmap} координаты ""
Pop $Image
${NSD_SetImage} $Image "Путь\картинка.bmp" $Image1
ListView нарисовать »
Var ListBox
${NSD_CreateListBox} координаты
Pop $ListBox
asetin_9207
04-09-2010, 18:01
IfFileExists "путь к папке\*.*" PathGood
Дело в том, что когда указываешь на папку, а эта папка - $INSTDIR, то можно легко обмануть установщик, то есть создать папку $INSTDIR, а она у меня - InstallDir "$PROGRAMFILES\Left 4 Dead 2\". То есть человек создал эту папку, закинул что хочет и может спокойно установить...
Может есть другой способ добавить много файлов?
kotkovets
04-09-2010, 18:16
Может есть другой способ добавить много файлов? »
IfFileExists "путь к папке\*.inf" PathGood
На любой файл с расширением inf
Можно на любое другое расширение ставить.
Можно на любой файл, который должен находится рядом с инсталлятором
IfFileExists "$EXEDIR\*.inf" PathGood
asetin_9207
05-09-2010, 16:49
А как сделать, чтобы после установки выполнялась распаковка батника?
Речь идет о decall.bat
Belial4444
05-09-2010, 18:57
Снова здравствуйте, у меня возникла небольшая проблема: мне надо чтобы была проверка на существование файла, и в зависимости от его наличия в какой-либо файл записывалась строка.У меня это выглядит так: IfFileExists $INSTDIR\rev.ini "WriteINIStr $INSTDIR\rev.ini steamclient PlayerName $R6"
"WriteINIStr $INSTDIR\stryder.ini settings Name $R6"
Но не компилируется, выдает ошибку. Мне надо если существуют рев ини в него записывать, если нет то в страйдер ини
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC