Створюємо інсталятор, World of Players
Учасник форуму
Хотів би розповісти про побудову повноцінних інсталяторів за допомогою підручних програмних середовищ. Зазвичай завдання створення інсталлера зводиться до використання різних програм (типу Nsis, Inno і т.д.), в яких, як правило, є вбудована скриптова мова. Але: 1) специфічні скрипти вивчати немає особливого бажання; 2) функціональність інсталяторів все ж таки дещо обмежена в плані можливостей з управління засобами ОС, хоча при розпаковуванні дуже великої кількості файлів використання скриптових систем може бути вигіднішим.
Від теорії переходимо тепер до практики. Я покажу приклад написання інсталлера у середовищі Borland Delphi. Суть даного способу - "засунути" файли, що розпаковуються в файл ресурсів (RES-файл), який потім підключається до програми на стадії компіляції в середовищі Delphi. У прикладі, описаному нижче, розпаковується п'ять JPEG-картинок (index1.jpeg, .index5.jpeg) у каталог, який вибирає користувач. Процес створення представлений сукупністю кроків.
Крок 1.Треба створити файл (нехай це будеInstall.rc), в якому спеціальним чином перераховані файли, що розпаковуються. Цей файл виглядає так:
Тут перший ідентифікатор позначає ім'я (псевдонім) для ресурсу, під яким ресурс буде видно програмі. Другий параметр – тип ресурсу, у нас має бути EXEFILE. Третій параметр означає ім'я файлу.
Крок 2.Створений на попередньому етапі файлInstall.rcпотрібно тепер передати як єдиний параметр компілятору ресурсівbrcc32.exe, який знаходиться в папці\ Bin- знайти його не складно. Бажано скопіювати в одну папку самbrcc32.exe, скриптInstall.rcта файли, які будемо пакувати (унас це JPEG-картинки). Потім запускаємо у консолі команду
. На виході виходить файлInstall.res. Це і потрібний нам файл. Копіюємо його в папку з проектом інсталятора на Delphi.
Крок 3.Працюємо з проектом на Delphi. Отриманий ресурсний файлInstall.resтреба підключити до нашої програми, і робиться це шляхом вставки директивидо головного файлу проекту – у нас у прикладі це файлProject1.dpr. Тепер пишемо процедуру для вилучення вихідних файлів із ресурсів програми. Можлива реалізація такої процедури може мати такий вигляд:
Формальні параметри цієї процедури мають наступний сенс:ResType– тип ресурсу, що витягується, для нас це EXEFILE;ResName– ідентифікатор ресурсу у програмі, див. опис структури файлуInstall.rc;ResNewName– повний шлях до файлу, в який буде переписаний цей ресурс.
Безпосередньо для роботи з ресурсом використовується вбудований клас системи Delphi -TResourceStream, який забезпечує всю "брудну" і рутинну роботу з ресурсом. У VC++, до речі, такої розкоші немає, і роботи з ресурсами довелося б використовувати WinApi-функции. Вилучення файлів за допомогою процедуриExtractResздійснюється приблизно так:
ПроцедураExtractвитягує всі файли до папки користувача. Подробиці щодо візуального оформлення проекту, природно, тут опускаються, оскільки, швидше за все, це справа особистого смаку.
Нижче в RAR-архіві додано описаний проект у повністю робочому стані. Пишіть у разі виникнення запитань. Також даю скріншот того, що сталося в результаті (Screen.JPG).(С) siryksv, 2009-2010.

Учасник форуму
Wallerstein
Учасник форуму
Учасник форуму
Учасник форуму
Може допомогти. якщо ти вище вказаним способом, всі файли від ресурсів гри, запихаєш у ресурси одного exe файлу. Можна в такий спосіб зробити інсталятор. ихмо, тільки це дуже важко
siryksvПрикольна, темка. я років 5 тому, цю інфу по крихтах збирав Млин. прям ностальгія
Учасник форуму
Продовжу тему створення інсталяторів. Можливо, комусь і знадобиться.
Отже, створення інсталятора Visual C++. Для написання прикладу я використав "класичний" VisualC++ 6, хоча технологія створення цієї програми під іншими версіями компілятора (наприклад, 2003-й) особливо нічим не відрізнятиметься.
Крок 1.Створимо порожній MFC-проект (File-&New-MFC AppWizard (Exe)) з назвою VCInstall. Оскільки нам, в принципі, знадобиться одне вікно, то в процесі роботи майстра вибираємо тип програми Dialog based. Всі інші параметри можна залишити за замовчуванням. Оформлення вікна інсталятора я залишаю на совість користувача, те, що у мене самого вийшло, видно на скрині в додатках. Однак найголовніший компонент нашої форми – це кнопка з написом "Встановити".
Крок 2.Додаємо ресурси. Для цього вибираємо в головному меню Insert->Insert Resource (або Ctrl+R) і натискаємо кнопку Import, щоб імпортувати ресурс. У вікні вибираємо необхідні файли, крім того слід також відключити автовизначення ресурсу шляхом перемикання пункту "Open As" на значення "Custom". Після вибору імпортованих файлів, середовищем буде видано запит на вказівку типу ресурсів. У вікні Resource Type слід ввести вводимо "EXE" (без лапок). Буде створено новий ресурс типу "EXE", або багато ресурсів, якщо було вибрано кілька файлів. Редагуваннявластивостей ресурсу та зміна його ідентифікатора здійснюється шляхом клацання правої кнопки миші (я не шульга. ) та вибору меню Properties. У моєму прикладі розпаковується три картинки JPEG. Скопіюємо їх у підпапку res нашого проекту, а потім імпортуємо в проект вищеописаним способом. Повинні з'явитися три нових ресурси типу "EXE" з ідентифікаторамиIDR_EXE1, IDR_EXE2, IDR_EXE3. Для зручності можемо змінити значення цих ідентифікаторів більш зручні: нехай це будуть INDEX1_RES, INDEX2_RES і INDEX3_RES.
Крок 3.Процедура вилучення ресурсів. Напишемо функцію вилучення ресурсу, використовуючи Api-функції. Зазначена функція може мати приблизно такий вигляд.
ФункціяExtractFileExeмає три параметри: директорію, куди буде розпакований файл, ім'я, яке буде дано файлу, та числовий ідентифікатор ресурсу у програмі. Тут заслуговує на увагу макросMAKEINTRESOURCE– він дозволяє за числовим ідентифікатором ресурсу в програмі отримати його символьне ім'я, яке потім має бути передано функції пошуку ресурсу FindResource. Api-функція GetModuleHandle із параметром NULL дозволяє отримати дескриптор нашого головного (і єдиного у програмі) модуля.
Таким чином, оператор
витягне ресурс з числовим ідентифікаторомINDEX1_RESі збереже його у файлindex1.jpeg, шлях до якого визначає рядокpath.