Войти

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


Страниц : 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

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;

XXXler
04-01-2012, 20:00
Покажи мне, неумному, как это будет через секцию [Icons] выглядеть? »
пример во вложении

Serega
04-01-2012, 20:27
Лександер, для юникода сменить тип переменной i на integer. »
Моё упущение, сразу не обратил внимание, что остался тип как раньше... поправил.
реализация мне понятна, но я выбрал цикл. »
В циклах со счетчиком начальные/конечные значения переменной цикла вычисляются один раз, поэтому LoadString не будет работать вхолостую. »
Смысл вашей мысли я понял и так же понимаю, что лишние 26 раз (для русского языка), обращаться к данной функции для современных процессоров это мелочь, но всё же приведённый мной пример выше, работает как минимум в 20 раз быстрее...

alert30
05-01-2012, 08:08
Скрипт распаковки FreeArc вроде правильно поставил, но вот только несколько ошибок обнаружил. Вот аттачмент.

GARID
05-01-2012, 14:24
Пару моих шабломов

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 »

LinkOFF
05-01-2012, 19:51
Подскажите пожалуйста как сделать так чтоб из архива 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, Да тебе не задрало писать стоко?????

alert30
07-01-2012, 19:10
TROY Diamond, Да тебе не задрало писать стоко????? »
valyok666, просто ему важно требуется скрипт.

nik1967
07-01-2012, 22:08
Тот же вопрос про язык сообщений в секции 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, он пишит в зависимости от языка системы типо если англ система то сетуп англ както так...

XXXler
08-01-2012, 12:51
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