Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
R.i.m.s.k.y.
04-01-2012, 13:39
в шапке и на форуме иногда встречаются скрипты как получить список файлов и каталогов в указанной папке
неправильно, хотя иногда работает
...if (FindRec.Attributes = FILE_ATTRIBUTE_DIRECTORY) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin...
...if (FindRec.Attributes <> FILE_ATTRIBUTE_DIRECTORY) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin...
правильно
...if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin...
...if (FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin...
Raf-9600
04-01-2012, 19:59
Ктонить может подкрутить скрипт, чтоб та часть что касается возврата оригинальных файлов, запускалась только если выбран компонент "Game\Lokal\Backup", а та часть что отвечает за проверку на оставшыеся файлы, если выбран "Game\Full"?
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
//Возврат оригинальных файлов
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
//Проверка на оставшыеся файлы
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of
IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);
IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);
IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of
IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of
IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);
IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);
IDCANCEL:;
end
end
end
end;
end;
Покажи мне, неумному, как это будет через секцию [Icons] выглядеть? »
пример во вложении
Лександер, для юникода сменить тип переменной i на integer. »
Моё упущение, сразу не обратил внимание, что остался тип как раньше... поправил.
реализация мне понятна, но я выбрал цикл. »
В циклах со счетчиком начальные/конечные значения переменной цикла вычисляются один раз, поэтому LoadString не будет работать вхолостую. »
Смысл вашей мысли я понял и так же понимаю, что лишние 26 раз (для русского языка), обращаться к данной функции для современных процессоров это мелочь, но всё же приведённый мной пример выше, работает как минимум в 20 раз быстрее...
Скрипт распаковки FreeArc вроде правильно поставил, но вот только несколько ошибок обнаружил. Вот аттачмент.
Пару моих шабломов
http://i143.photobucket.com/albums/r127/GARID/1-3.jpg
http://i143.photobucket.com/albums/r127/GARID/2-3.jpg
http://www.4shared.com/zip/GEah_Dnq/iinnnoo_skin_2.html
valyok666
05-01-2012, 18:48
Пара моих шаблонов тогда уж написал что пара моих скинов для inno
читать дальше »
http://www.4shared.com/zip/GEah_Dnq/iinnnoo_skin_2.html »
Подскажите пожалуйста как сделать так чтоб из архива freearc распаковывались только заданные файлы или папки?
Beginner85
06-01-2012, 17:02
У меня вот такая цель - имеется файл zip и мне надо обновить содержимое внутри него.
Для этого использую 7za.exe с cmd файлом, где прописаны параметры упаковки.
Внутри zip файла лежит папка, в которой лежат те файлы, которые мне надо заменить + ещё одна папка с другими файлами, которые мне трогать не надо.
Также у меня есть 10 файлов с расширением xml, которые собственно говоря мне и надо засунуть в zip файл, в котором лежат точно такие же файлы. Проще говоря это русификатор.
Мне нужно обновить содержимое zip файла, поместив в инсталятор только 10 файлов. Чтобы внутри инсталятора был 7za.exe и cmd файлик и 10 xml файлов.
При запуске чтобы распаковывались все эти файлы в папку где лежит zip файл (путь бы указывался при установке), затем запускался cmd файл, в нём у меня прописано всё необходимое для обновления содержимого zip файла. После того как все действия выполнятся, т.е. обновится содержимое, чтобы все xml файлы и exe + cmd файлы удалились и установка завершилась.
Вопрос вот в чём - какие модули для inno setup нужно использовать чтобы это реализовать и в какой последовательности их использовать?»
У меня такая же цель: заменить файлы в zip архиве. Убил на гугл два часа, грамотные ответы только здесь)
Вот что имеется для примера:
[Files]
Source: Folder\Subfolder1\Brown.exe; DestDir: {app}\Folder\Subfolder1; Flags: deleteafterinstall // файл необходимо поместить в архив Colors.zip, находящийся в DestDir
Source: Folder\Subfolder1\Glass.exe; DestDir: {app}\Folder\Subfolder1; Flags: deleteafterinstall // файл необходимо поместить в архив Materials.zip, находящийся в DestDir
Source: Folder\Subfolder2\Brown.exe; DestDir: {app}\Folder\Subfolder2; Flags: deleteafterinstall // файл необходимо поместить в архив Colors.zip, находящийся в DestDir
Source: Folder\Subfolder2\Green.exe; DestDir: {app}\Folder\Subfolder2; Flags: deleteafterinstall // файл необходимо поместить в архив Colors.zip, находящийся в DestDir
Source: Folder\Subfolder2\Glass.exe; DestDir: {app}\Folder\Subfolder2; Flags: deleteafterinstall // файл необходимо поместить в архив Materials.zip, находящийся в DestDir
Source: Folder\Subfolder2\Stone.exe; DestDir: {app}\Folder\Subfolder2; Flags: deleteafterinstall // файл необходимо поместить в архив Materials.zip, находящийся в DestDir
Подскажите пожалуйста вариант без использования cmd файла. Сам архиватор думаю без разницы какой (unrar.exe, 7zip, freearc).
Пересмотрел весь архив скриптов и нашел только пример по распаковке, а нужна распаковка, замена и упаковка обратно. [Run]
Filename: {src}\Rus\NFSC_RUS.exe; Components: rus; WorkingDir: {src}\Rus; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated
[Сode]
procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
app:=ExpandConstant('{src}')+'\7za.exe';
arc:=ExpandConstant('{src}')+'\ARC.7z';
dest:=ExpandConstant('{app}');
Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;
P.S. Забыл поздороваться. Всем привет и с наступающим Рождеством!
TROY Diamond
07-01-2012, 14:52
Как добавить задачу в "Назначенные задания" - файл *.job в WINDOWS\Tasks? Как его "создать" в Inno?
Нужно, чтобы приложение запускалось с Windows и/или в опредёленное время.
Ярлык приложения в "Автозагрузка" и/или в реестре НЕ подходит!!! Нужно, чтобы было "задание", т.к. оно связано с настройками программы. И чтобы оно устанавливалось ТОЛЬКО если пользователь его выберет при установке.
TROY Diamond
07-01-2012, 15:09
Как при удалении проги (запуске деинсталлятора), проверить НЕ запущена ли она и автоматически закрыть её БЕЗ запроса, к примеру если она "сидит в трее", и продолжить удаление?
Аналогичный вопрос при установке - вдруг эта программа была уже установлена и сейчас запущена...
TROY Diamond
07-01-2012, 15:45
Как ТОЛЬКО НА ПЕРВОЙ СТРАНИЦЕ использовать "большую картинку"? На всё окно, НО с сохранением всего текста его размера, шрифта и кнопок?
Вот, как здесь, например:
http://s018.radikal.ru/i504/1201/51/08d79767a507.jpg (http://www.radikal.ru)
TROY Diamond
07-01-2012, 16:29
Как сделать, чтобы когда приложение уже было ранее установлено и пользователь пытается устанановить его ещё раз, появлялось следующее сообщение:
http://i003.radikal.ru/1201/45/5d520938b591.jpg (http://www.radikal.ru)
Если приложение в данный момент запущено, то его автоматически закрывают...
Если пользователь отказывается удалять приложение, то появляется следующее сообщение:
http://s018.radikal.ru/i504/1201/0e/9870879f88ba.jpg (http://www.radikal.ru)
и программа установки закрывается, установка прерывается...
TROY Diamond
07-01-2012, 16:52
ВИДИМО ВСЕ ПРАЗДНУЮТ, КРОМЕ МЕНЯ?! УЖЕ 2 ЧАСА ПРОШЛО... с момента как я задал свой первый вопрос, НО не то, что никто НЕ ответил, так и вообще за это время никто больше ничего НЕ спрашивал!
ТАК ЧТО НЕ РУГАЙТЕСЬ И С ПРАЗДНИКОМ ВСЕХ!!! СПАСИБО ЗА ТО, ЧТО ЕСТЬ ВЫ И ВАШ ФОРУМ!!!
Как использовать различные значения и записи реестра в секции Setup и не только?
К примеру приложение идёт на нескольких языках и в зависимости от выбранного языка меняется, производитель, ссылки, техподдержка, версия, ярлыки, записи реестра и т.п. (AppPublisher, AppPublisherURL, AppSupportURL, VersionInfoCopyright, LicenseFile)?
Тот же вопрос про язык сообщений в секции Code. Как выводить сообщения на нескольких языках, в зависимости от языка системы например?
valyok666
07-01-2012, 18:39
TROY Diamond, Да тебе не задрало писать стоко?????
TROY Diamond, Да тебе не задрало писать стоко????? »
valyok666, просто ему важно требуется скрипт.
Тот же вопрос про язык сообщений в секции Code. Как выводить сообщения на нескольких языках, в зависимости от языка системы например? »
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
_________________________________
[c_ode]
if ActiveLanguage='eng' then...
Не?
valyok666
07-01-2012, 22:28
nik1967, он пишит в зависимости от языка системы типо если англ система то сетуп англ както так...
TROY Diamond, CustomMessages вам в помощь:
[Setup]
ShowLanguageDialog = yes
AppId=MySuperProgramm
AppName={cm:AppName}
AppPublisher={cm:AppPub}
AppPublisherURL={cm:AppURL}
AppCopyright={cm:AppCopyright}
AppVersion=1.0.0.0
DefaultDirName=111
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
Name: en; MessagesFile: compiler:Default.isl
[_Code]
{...
MsgBox(CustomMessage ('MsgBoxText'), mbInformation, MB_OK);
MsgBox(ExpandConstant ('<<<< {cm:MsgBoxText} >>>>>'), mbInformation, MB_OK);
...}
[CustomMessages]
en.AppName=Program
en.AppPub=Publisher
en.AppURL=http://site.domain/en/
en.AppCopyright=Copyright
en.MsgBoxText=It's alive!
ru.AppName=Программа
ru.AppPub=Издатель
ru.AppURL=http://site.domain/ru/
ru.AppCopyright=Скопировано направо
ru.MsgBoxText=Таки работает!!!
TROY Diamond
08-01-2012, 16:01
CustomMessages вам в помощь
Мне нужно, чтобы сообщения, написанные в секции Code, были на разных языках... Как написать там несколько вариантов? И, чтобы один из них сам выбирался в зависимости от языка системы и т.п?
1. Как при удалении проги (запуске деинсталлятора), проверить НЕ запущена ли она и автоматически закрыть её БЕЗ запроса, к примеру если она "сидит в трее", и продолжить удаление?
Аналогичный вопрос при установке - вдруг эта программа была уже установлена и сейчас запущена...
2. Как сделать, чтобы когда приложение уже было ранее установлено и пользователь пытается устанановить его ещё раз, появлялось следующее сообщение:
http://i003.radikal.ru/1201/45/5d520938b591.jpg (http://www.radikal.ru)
Если приложение в данный момент запущено, то его автоматически закрывают...
Если пользователь отказывается удалять приложение, то появляется следующее сообщение:
http://s018.radikal.ru/i504/1201/0e/9870879f88ba.jpg (http://www.radikal.ru)
и программа установки закрывается, установка прерывается...
3. Как ТОЛЬКО НА ПЕРВОЙ СТРАНИЦЕ использовать "большую картинку"? На всё окно, НО с сохранением всего текста его размера, шрифта и кнопок?
Вот, как здесь, например:
http://s018.radikal.ru/i504/1201/51/08d79767a507.jpg (http://www.radikal.ru)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.