PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

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