Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 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 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

krevedki
10-03-2011, 22:35
Вот что я имею ввиду - у людей в компах лежит некая папка, где находится zip файл, внтури которого есть 10 xml файлов (внутри xml них различные переменные игры на английском)
У меня есть такие же 10 файлов внутри которых тоже самое на русском. Проще говоря это русификатор. Сам zip файл огромного размера, т.к. внутри не только эти 10 файлов но еще и одна подпапка со звуковыми файлами. Мне нужно чтобы инстралятор брал мои xml файлы и запаковывал их внутрь файла, лежащего в компах людей, кто будет запускать инсталятор, с заменой файлов. Т.е. xml файлы внутри архива заменялись моими с таким же названием. Сама замена происходит через программу 7za.exe а с cmd файле прописаны параметры, в моём случае
7za.exe u -tzip English.pak -ir!Languages\*.xml -mx9
Да, файл с расширением pak это zip архив, но он переименован в pak и используется игрой в таком виде, т.е. только с расширением pak. Но это 100%-ый zip архив.
Так вот - я хочу добавить 10 xml файлов и exe+cmd внутрь исталятора. Инсталятор распакует все эти файлы в папку где лежит English.pak
потом надо как-то запустить cmd файл - он всё упакует и выполнит. После чего zip архив будет обновлён и все xml файлы + exe'шник и cmd файл будут не нужны и их нужно удалить.
Выглядит это так
http://i17.fastpic.ru/thumb/2011/0310/fe/0fd11459cfb2bd80b02cc999c921b5fe.jpeg (http://fastpic.ru/view/17/2011/0310/0fd11459cfb2bd80b02cc999c921b5fe.jpg.html)
На картинке zip файл, содержимое которого должен обновить инсталятор и выделены xml файлы, которые я буду обновлять.

exe файл - это консольная версия 7zip
http://rghost.ru/4714817

actavir
10-03-2011, 22:36
krevedki, ну вроде бы должно получиться, так как я предложил

krevedki
10-03-2011, 22:48
А как скрипт определит, что файлы установлены?
По этой строке
[Files]Source: unarc.dll; DestDir: {tmp}; Flags: deleteafterinstall

разве на выйдет так, что файл распакуется и тут же удалится?
Как скрипт определит что установка ещё не завершена?

Ладно... потом доковыряю.. пока указал переменную app в качестве пути, однако в windows пытается распаковывать... а надо чтобы распаковывало все файлы в указанную пользователем папку... По умолчанию она же уже задана...

actavir
10-03-2011, 22:51
дело в том что удаление происходит на последнем этапе инсталяции а распаковка и выполнение идёт до этого момента)))

n1tka
10-03-2011, 23:20
Помогите соединить скрипт наложения изображения кнопки кнопки с моим инсталлом
и покажите коментами в скрипте что куда нужно вставлять чтобы я потом сам мог такое провернуть

Vovochka_s2
11-03-2011, 05:45
Подскажите, возможно ли закриптовать инсталлятор созданный инно?Защита паролем не подходит, нужно чтобы инсталлер невозможно было потом распаковать утилитами типа InnoUnpacker или тем же 7зипом.

krevedki
11-03-2011, 12:52
Итак я сделал вот так

Source: C:\update\update_7za.cmd; DestDir: {app}; Flags: ignoreversion deleteafterinstall
Source: C:\update\7za.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall
Source: C:\update\Languages\*; DestDir: {app}\Languages; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
[Run]
Filename: {app}\update_7za.cmd; WorkingDir: {app}; Parameters: /silent; StatusMsg: Выполняются необходимые операции, ждите...; Flags: waituntilterminated


Одна проблемка сохранилась. В папке назначения остаётся папка Languages. Пустая.... она не удаляется... Вот тут
Source: C:\update\Languages\*; DestDir: {app}\Languages; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
Я прописал распаковку файлов в папку, которую надо создать. Но после выполнения нужных операций файлы из неё удаляются, а сама папка нет...
Как её убрать?

ChVL
11-03-2011, 17:01
Как перенести файл с дополнительной присоединённой информацией?
При прохождении через инсталлятор этот поток теряется, а именно он только и нужен. Подлая программа создаёт пустой (!) файл с присоединённой информацией такого вида: :длинный ряд цифр и букв:$DATA Во время работы программа его считывает, сравнивает и, если всё в порядке, - нормально работает. Если нет способа перенести файл без потери этого потока, то может можно как-то добавить эту информацию в файл после переноса? Или создать пустой файл, к которому присоединить эту доп. информацию, только как это делается?

actavir
11-03-2011, 17:52
krevedki, а вам эта папка сильно мешает??? :)

Gnom_aka_Lexander
11-03-2011, 18:40
krevedki, держи:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Run]
Filename: {app}\7za.exe; Parameters: " u -tzip English.pak -ir!Languages\*.xml -mx9"; WorkingDir: {app}; Description: "Установить русификатор"; Flags: PostInstall; StatusMsg: "Подождите, идет обновление...";

[Files]
Source: Languages\01.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\02.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\03.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\04.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\05.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\06.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\07.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\08.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\09.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\10.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: 7za.exe; DestDir: {app}; Flags: deleteafterinstall;
тэоретически можно не ставить флаг PostInstall, секция Run обрабатывается после распаковки файлов, и смотрится будет лучше, но нужно пробовать.

krevedki
11-03-2011, 18:54
actavir


Не мешает, но некрасиво когда пустая папка просто так валяется...

Сейчас попробую способом от Лександера
Посмотрел... вышло что-то совсем не то... Отписал в лс...
Папка всё равно остаётся даже если прописать

[Dirs]
Name: Languages; Flags: DeleteAfterInstall;

Gnom_aka_Lexander
11-03-2011, 19:49
krevedki,
тогда так: вместо
[Files]
Source: Languages\01.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\02.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\03.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\04.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\05.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\06.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\07.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\08.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\09.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\10.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;

напиши так:
[Files]
Source: Languages\*; DestDir: {app}\Languages\; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall;
Source: 7za.exe; DestDir: {app}; Flags: deleteafterinstall;
так даже лучше - в случае добавления или изменения имен файлов, скрипт править не нужно :)

actavir
11-03-2011, 19:54
krevedki, то есть ydrnow это ты?

Serega
11-03-2011, 20:54
нужно чтобы инсталлер невозможно было потом распаковать утилитами типа InnoUnpacker или тем же 7зипом »
Используйте расширенную версию от Restools и добавьте в секцию [Setup], следующие строки:

Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes


Как перенести файл с дополнительной присоединённой информацией? »
Чтоб вам помочь, в решении вашей проблемы, нужно её понять, но из вашего сообщения я совершенно ничего не понял...
Причём тут поток и о какой информации идёт речь?

Gnom_aka_Lexander
11-03-2011, 21:25
Подскажите пожалуйста, для шрифта в лейбелах можно сделать автоматический размер?
Просто можно задать авторазмер самого лейбела в зависимости от его заполнения текстом ( AutoSize:=True; - например)
Вот и хотелось узнать, нельзя-ли задать размер шрифта, чтоб текст автоматически заполнял форму при AutoSize:=False;
Просто работаю над изменением текста в зависимости от динамического изменения условий - для каждого текста ловить размеры - муторно, но придется, видимо..

Serega
11-03-2011, 21:41
для шрифта в лейбелах можно сделать автоматический размер? »
как понять автоматический?
В момент создания текстового контрола, он имеет размер и стиль шрифта такой же, как и у родительской формы, если другое не указано в настройках.

ChVL
11-03-2011, 22:51
Serega,
Причём тут поток и о какой информации идёт речь? »
В NTFS реализована файловая многопоточность – каждый файл, помимо основного неименованного потока (содержащего, собственно, главную информацию) может иметь именованные потоки. Они никак не сказываются на размере файла и призваны (по мнению создателей) хранить служебную информацию и авторские права. В том случае, когда в файле есть служебная информация, он и называется файл с дополнительной присоединённой информацией. Проводник её не видит. При попытке копирования такого файла на другой диск появляется окно с предупреждением, что файл содержит дополнительную присоединённую информацию, и при копировании она будет утеряна. Аналогично эта информация теряется и в случае переноса такого файла инсталлятором. А вот этого хотелось бы избежать...

Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. Неприлично известный Касперский при проверке файлов без нашего ведома вписывает туда свою служебную информацию.

Serega
12-03-2011, 00:14
для каждого текста ловить размеры - муторно, но придется, видимо.. »
Ну а почему сразу не задать нужную ширину текста при создании TLabel, а AutoSize поставить в False?
Мне кажется так проще всего...

Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... »
Да, но свободный размер диска уменьшится на 4.7 Гига...
Теперь понял, про что вы имеете ввиду, к сожалению стандартными средствами этого не сделать.

Iska
12-03-2011, 02:17
Вообще-то эта незадокументированная возможность интересная. »
Вообще-то, скоро двадцать лет, как документированная :): Fork (filesystem) - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Alternate_data_stream).

Iska
12-03-2011, 02:33
Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. »
Это не верно. Никаких «как правило». Необходимым и достаточным условием является наличие файловой системы NTFS на исходном и целевом разделах, и умение менеджера файлов копировать ADS вместе с основным потоком. Проводник (как и большинство современных файловых менеджеров) копировать ADS умеет.

Они никак не сказываются на размере файла…
Сказываются. Ровно в том размере, сколько добавите в ADS.
…и призваны (по мнению создателей) хранить служебную информацию и авторские права.
Коллега, и где только Вы такой чуши наслушались, а?!

При большом желании Вы можете использовать архивы RAR для сохранения информации о потоках:
Ключ -OS — сохранять потоки NTFS
--------------------------------------------------------------------------------
Этот ключ имеет смысл указывать только при работе с файловой системой NTFS. Он позволяет сохранять в архиве альтернативные потоки данных, связанные с файлами на диске с файловой системой NTFS. Это особенно важно в среде Windows 2000, XP и более новых версий Windows, где потоки применяются для хранения связанной с файлами информации, например, описаний файлов. Если вы используете WinRAR для создания резервных копий с дисков NTFS, то настоятельно рекомендуется указывать этот ключ.

Эквивалент этого ключа в режиме оболочки — параметр "Сохранять файловые потоки" в диалоге "Имя и параметры архива".

Этот ключ применим только к архивам RAR.




© OSzone.net 2001-2012