Jump to content
Korean Random

Создание инсталляторов для модпаков на базе Inno Setup


Recommended Posts

если знаешь какую-нибудь программу которая может долго записывать видео и при этом вес видео не превысит пары гигов, скинь название или сыль на прогу, буду благодарен и попробую сделать мануал !

Я долго искал похожую тему!!! И благодаря тебе я уже начал частично собирать инсталлятор.

А насчет твоего вопроса ... то есть такая программа Bandikam http://nnm-club.me/forum/viewtopic.php?t=731012 которая качественно пишет и минимально затрагивает пространство диска.

Edited by legik2003
  • Upvote 2
Link to comment
Short link
Share on other sites

Ребята, есть вопрос такой, помогите - 2 дня голову ломаю

[Tasks]
Name: src; Description: Сохранить оригинальные файлы игры; Flags: exclusive

function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external ' [email protected] stdcall loadwithalteredsearchpath';

procedure CreateBackup;

var

srcFile, destFile: string;

basePath, shortPath: string;

begin

if IsTaskSelected('src') then

begin

  basePath := ExpandConstant('{app}');

    srcFile := ExpandConstant(CurrentFileName);

    shortPath := srcFile;

   StringChangeEx(shortPath, basePath, '', True);

   destFile := ExpandConstant('{app}\Backup') + shortPath;

ForceDirectories(ExtractFilePath(destFile));

MoveFile(PAnsiChar(srcFile), PAnsiChar(destFile));

end;

end;

Этот код для бэкапа файлов прикрутил.

Так проблема такая - при запуске идет ошибка

Runtime Error (at -1:0)

Cannot Import dll: <utf8> kernel32.dll

 

Не подхватывает длл-ку почему-то.. Пробую на вин 8.1 и на ХР - одно и то же.

Link to comment
Short link
Share on other sites

@Melkop, всё-таки это немаловажный системный файл (для работы с ОЗУ).. А программа пытается Вырезать его в другое место.. вот система и не разрешает.

А зачем тебе именно он?

Ну.. вот в справке смотрю тоже бэкапирование с использованием

 

 

MoveFile(const srcFile, destFile: PAnsiChar): Integer; external ' [email protected] stdcall
 

Может есть альтернативы, без этих библиотек системных? Тут уже обсуждалось, но мне надо не по файлу ориентироваться, что в папке лежит, а весь каталог бекапить. Желательно задавая маску, например.

Link to comment
Short link
Share on other sites

Воу-воу, ничего себе мудрёный код bakup'а... Простой перенос папки уже не в моде?

 

Пробежался по последним страницам. Вердикт - изобретаете велосипед. Практически всё можно сделать проще минимум в 3 раза.

Edited by AtotIK
  • Upvote 2
Link to comment
Short link
Share on other sites

@AtotIK, а пример можно?
пока обхожусь базовой функцией.. простым удалением папки res_mods перед установкой:

[InstallDelete]
Type: filesandordirs; Name: "{app}\res_mods"

Хотелось бы два чекбокса на выбор: удалять или бэкапить

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

@AtotIK, а пример можно?

пока обхожусь базовой функцией.. простым удалением папки res_mods перед установкой:

Хотелось бы два чекбокса на выбор: удалять или бэкапить

Вот так пока сделал, за 10 минут накидал. Сегодня-завтра допишу.
Edited by AtotIK
  • Upvote 1
Link to comment
Short link
Share on other sites

 

 

Воу-воу, ничего себе мудрёный код bakup'а... Простой перенос папки уже не в моде?

 Да не, переписал уже) Без всяких выкрутасов


Правда ребята, вопрос такой еще. Как сделать разделение установок. Вот, например у меня чебокс. Я его жмакаю и жму "далее". И мне надо чтоб это действие выполнилось, появились компоненты, я выбрал нужные и снова действие выполнилось, которое привязано к компонентам. А не вот все сразу одним махом

Link to comment
Short link
Share on other sites

Вроде доделал. Объясняю как работает:

Через #include подключается файл, в котором описаны функции работы с файлами и папками. В частности тут это - MoveDir. Нужна версия Inno Setup с установленным препроцессором.

Страница создаётся после начальной. Выбираете действие и спокойно идете дальше по установке. Как только инсталлятор переходит на процесс установки (страница ssInstall) запускается чекер, который смотрит какой пункт был выбран и исходя из этого запускает нужную функцию на исполнение. В первом варианте удаляются папки 0.8.11 и xvm, потом создаётся пустая папка 0.8.11. Во втором варианте папки 0.8.11 и xvm переносятся в res_mods\backup. После создаётся пустая папка 0.8.11. Третий вариант создаётся как "заглушка", ничего не происходит при его выборе.

Если не нужны надписи вверху страницы (там где картинка), то оставляйте пустые кавычки в строке:

BackupPage:=CreateCustomPage(wpWelcome, '', '');
Тогда нужно будет ещё скрыть белый фон, на котором эти надписи отображаются. В InitializeWizard() добавьте:

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
Поле этого страница будет выглядить примерно вот так:

7a11cfb9f052.png

В общем спрашивайте, если что-то не понятно. Вроде всё доступно написал.

BackUpPage_AtotIK.zip

Edited by AtotIK
  • Upvote 7
Link to comment
Short link
Share on other sites

Да, переносятся, но абсолютно пустыми (всё содержимое куда-то теряется).

Всё проверено, всё переносит. Попробуй через CopyDir тоже самое сделать.

 

З.Ы. Версия у меня 5.5.4 не Unicode.

  • Upvote 1
Link to comment
Short link
Share on other sites

Всё проверено, всё переносит. Попробуй через CopyDir тоже самое сделать.

 

З.Ы. Версия у меня 5.5.4 не Unicode.

 У меня 5.5.1, попробую обновиться..

 

UPD: обновился, теперь тут:

procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);

ругается на:

UnknownType 'TItemArea'

Это процедура показа картинки при наведении на компонент курсора..

Могу скинуть сам скрипт

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

Подскажите как можно сделать в Select Components возможность выбора компонент с помощью PageControl или TabControl, у меня в задумке разбить установку по вкладкам, просто компонент много и все это рябит в глазах, вот бы и хотелось разбить по разделам.
По возможности если есть у кого пример скрипта скинуть для осмысления.

Link to comment
Short link
Share on other sites

Вот, кстати, попробовал снова создать резервную копию (на том же инсталле, что и в прошлый раз) - переместилось только несколько файлов из одной и второй папкок

Link to comment
Short link
Share on other sites

опиши как тестируешь?

 

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

Edited by Melkop
Link to comment
Short link
Share on other sites

Если используете Unicode версию, то возможно такое. Там глюки с классами.

После выходных могу посмотреть как обойти это всё, наверное придётся делать через функции в системных dll'ках.

 

З.Ы. Все скрипты пишутся на этой не unicode версии с установленным препроцессором. Это наименее затронутая версия, считай "чистый клиент". За работу на других версиях я не ручаюсь.

Edited by AtotIK
  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...