Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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
krevedki, ну вроде бы должно получиться, так как я предложил
krevedki
10-03-2011, 22:48
А как скрипт определит, что файлы установлены?
По этой строке
[Files]Source: unarc.dll; DestDir: {tmp}; Flags: deleteafterinstall
разве на выйдет так, что файл распакуется и тут же удалится?
Как скрипт определит что установка ещё не завершена?
Ладно... потом доковыряю.. пока указал переменную app в качестве пути, однако в windows пытается распаковывать... а надо чтобы распаковывало все файлы в указанную пользователем папку... По умолчанию она же уже задана...
дело в том что удаление происходит на последнем этапе инсталяции а распаковка и выполнение идёт до этого момента)))
Помогите соединить скрипт наложения изображения кнопки кнопки с моим инсталлом
и покажите коментами в скрипте что куда нужно вставлять чтобы я потом сам мог такое провернуть
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
Я прописал распаковку файлов в папку, которую надо создать. Но после выполнения нужных операций файлы из неё удаляются, а сама папка нет...
Как её убрать?
Как перенести файл с дополнительной присоединённой информацией?
При прохождении через инсталлятор этот поток теряется, а именно он только и нужен. Подлая программа создаёт пустой (!) файл с присоединённой информацией такого вида: :длинный ряд цифр и букв:$DATA Во время работы программа его считывает, сравнивает и, если всё в порядке, - нормально работает. Если нет способа перенести файл без потери этого потока, то может можно как-то добавить эту информацию в файл после переноса? Или создать пустой файл, к которому присоединить эту доп. информацию, только как это делается?
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;
так даже лучше - в случае добавления или изменения имен файлов, скрипт править не нужно :)
krevedki, то есть ydrnow это ты?
нужно чтобы инсталлер невозможно было потом распаковать утилитами типа InnoUnpacker или тем же 7зипом »
Используйте расширенную версию от Restools и добавьте в секцию [Setup], следующие строки:
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes
Как перенести файл с дополнительной присоединённой информацией? »
Чтоб вам помочь, в решении вашей проблемы, нужно её понять, но из вашего сообщения я совершенно ничего не понял...
Причём тут поток и о какой информации идёт речь?
Gnom_aka_Lexander
11-03-2011, 21:25
Подскажите пожалуйста, для шрифта в лейбелах можно сделать автоматический размер?
Просто можно задать авторазмер самого лейбела в зависимости от его заполнения текстом ( AutoSize:=True; - например)
Вот и хотелось узнать, нельзя-ли задать размер шрифта, чтоб текст автоматически заполнял форму при AutoSize:=False;
Просто работаю над изменением текста в зависимости от динамического изменения условий - для каждого текста ловить размеры - муторно, но придется, видимо..
для шрифта в лейбелах можно сделать автоматический размер? »
как понять автоматический?
В момент создания текстового контрола, он имеет размер и стиль шрифта такой же, как и у родительской формы, если другое не указано в настройках.
Serega,
Причём тут поток и о какой информации идёт речь? »
В NTFS реализована файловая многопоточность – каждый файл, помимо основного неименованного потока (содержащего, собственно, главную информацию) может иметь именованные потоки. Они никак не сказываются на размере файла и призваны (по мнению создателей) хранить служебную информацию и авторские права. В том случае, когда в файле есть служебная информация, он и называется файл с дополнительной присоединённой информацией. Проводник её не видит. При попытке копирования такого файла на другой диск появляется окно с предупреждением, что файл содержит дополнительную присоединённую информацию, и при копировании она будет утеряна. Аналогично эта информация теряется и в случае переноса такого файла инсталлятором. А вот этого хотелось бы избежать...
Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. Неприлично известный Касперский при проверке файлов без нашего ведома вписывает туда свою служебную информацию.
для каждого текста ловить размеры - муторно, но придется, видимо.. »
Ну а почему сразу не задать нужную ширину текста при создании TLabel, а AutoSize поставить в False?
Мне кажется так проще всего...
Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... »
Да, но свободный размер диска уменьшится на 4.7 Гига...
Теперь понял, про что вы имеете ввиду, к сожалению стандартными средствами этого не сделать.
Вообще-то эта незадокументированная возможность интересная. »
Вообще-то, скоро двадцать лет, как документированная :): Fork (filesystem) - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Alternate_data_stream).
Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. »
Это не верно. Никаких «как правило». Необходимым и достаточным условием является наличие файловой системы NTFS на исходном и целевом разделах, и умение менеджера файлов копировать ADS вместе с основным потоком. Проводник (как и большинство современных файловых менеджеров) копировать ADS умеет.
Они никак не сказываются на размере файла…
Сказываются. Ровно в том размере, сколько добавите в ADS.
…и призваны (по мнению создателей) хранить служебную информацию и авторские права.
Коллега, и где только Вы такой чуши наслушались, а?!
При большом желании Вы можете использовать архивы RAR для сохранения информации о потоках:
Ключ -OS — сохранять потоки NTFS
--------------------------------------------------------------------------------
Этот ключ имеет смысл указывать только при работе с файловой системой NTFS. Он позволяет сохранять в архиве альтернативные потоки данных, связанные с файлами на диске с файловой системой NTFS. Это особенно важно в среде Windows 2000, XP и более новых версий Windows, где потоки применяются для хранения связанной с файлами информации, например, описаний файлов. Если вы используете WinRAR для создания резервных копий с дисков NTFS, то настоятельно рекомендуется указывать этот ключ.
Эквивалент этого ключа в режиме оболочки — параметр "Сохранять файловые потоки" в диалоге "Имя и параметры архива".
Этот ключ применим только к архивам RAR.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.