Как сделать установочный файл «EXE»

Что вы делаете, когда создаете какое-то новое программное обеспечение Windows — от простого средства диагностики о сложной видеоигре для ПК — и вы хотите поделиться этим с миром? Ну, вы можете сжать файлы в один ZIP-файл и распространять его.
Или вы можете быть модным и вместо этого создать установщик EXE.
В этом посте мы рассмотрим три различных метода: самораспаковывающийся пакет, простой установщик, использующий встроенный IExpress, и расширенный установщик, использующий настраиваемую установку Inno.
Быстрый метод: использование 7-Zip
Вы, вероятно, уже используете 7-Zip для извлечения всех видов архивных файлов. извлечь , и вы, вероятно, уже знаете, что 7-Zip может создавать архивные файлы, но знаете ли вы, что вы также можете использовать его для создания EXE-файла, который действует как установщик?
Он называется SFX-архивом («самораспаковывающийся») и работает, сжимая все ваши конечные файлы вместе, а затем встраивая в архив специальный EXE-файл, который знает, как извлечь все. Другими словами, получатель может извлечь архив SFX (который выглядит как сам файл EXE), даже если у него нет подходящего программного обеспечения, что может случиться с такими форматами, как 7Z, RAR, TAR и ZIP.

Как создать свой собственный SFX-архив с 7-Zip:
- Подготовьте все свои файлы и каталоги в пределах одного основного каталога и назовите каталог как хотите.
- Щелкните правой кнопкой мыши каталог и выберите 7-Zip> Добавить в архив …
- В разделе « Параметры» включите « Создать архив SFX» и выберите следующие параметры…
> Формат архива: 7z
> Уровень сжатия: Нормальный
> Метод сжатия: LZMA2
> Размер словаря: 16 МБ
> Размер слова: 32
> Размер блока: 2 ГБ - Нажмите ОК . Выполнено!
Обратите внимание, что SFX-архивы не являются настоящими установочными файлами. Они не помещают извлеченные файлы в назначенный целевой каталог. Они не изменяют реестр Windows. Они не создают журналы установки и не отображаются как «установленное программное обеспечение» в приложении удаления. Это буквально архивные файлы, наряженные в EXE-файлы.
Загрузить — 7-Zip (бесплатно)
Простой метод: использование IExpress
IExpress — это утилита, которая поставляется в комплекте с версиями Windows, начиная с Windows XP и выше. Утилита поставляется с интерфейсным графическим интерфейсом (называемым IExpress Wizard), но вы также можете создавать установочные файлы, используя файлы SED, написанные от руки. Мы рекомендуем мастера.
Как и в 7-Zip выше, этот метод создает самораспаковывающийся архив, но с двумя основными отличиями: во-первых, конечный пользователь будет использовать многостраничный мастер установки, а во-вторых, конечный пользователь может указать целевой каталог, в котором находится инструмент распакует файлы

Как создать свой собственный установщик EXE с помощью IExpress:
- Откройте приглашение «Выполнить» ( клавиша Windows + R ) и введите iexpress.exe, чтобы запустить мастер IExpress .
- Выберите « Создать новый файл директивы самоизвлечения» и нажмите « Далее» .
- Выберите « Извлечь только файлы» и нажмите « Далее» .
- Для названия пакета имя вашего приложения является безопасным выбором.
- Для подтверждения запроса выберите Нет запроса или Запрос пользователя с помощью . Это не имеет значения в любом случае. Ради конечного пользователя, в том числе один всегда безопасный выбор.
- Для лицензионного соглашения отобразите лицензию, если вы хотите, чтобы конечный пользователь согласился с каким-либо лицензионным соглашением с конечным пользователем (EULA). Если нет, то лучше выбрать Не отображать лицензию .
- Чтобы добавить все файлы, которые вы хотите увидеть установленными, нажмите кнопку « Добавить» , перейдите к папке с файлами и выберите их все.
- Продолжите работу с помощью мастера IExpress и выберите нужные параметры для подсказок « Показать окно» и « Готовое сообщение» .
- В качестве имени пакета нажмите « Обзор» , перейдите к месту, где вы хотите создать установочный EXE-файл, и присвойте ему имя. Это EXE-файл, который вы собираетесь распространять среди конечных пользователей. Нажмите Далее .
- Наконец, выберите Сохранить файл директивы самоизвлечения (SED), если вы хотите позже создать измененный установщик, например, когда вы исправили программное обеспечение и нуждаетесь в обновленном установщике. Если вы выберете « Не сохранять» , вам придется пройти весь процесс с нуля.
- На странице « Создание пакета» нажмите « Далее» . Подождите. Выполнено!
Обратите внимание, что у IExpress есть некоторые странности и проблемы. Это не позволяет включать пустые каталоги. Если в вашей установке есть подкаталоги, подкаталоги не будут включены. Если у вас есть несколько файлов с одинаковыми именами, даже в разных каталогах, создание установщика завершится неудачно.
Из-за этих странностей мы рекомендуем использовать метод ниже.
Рекомендуемый метод: использование Inno Setup
Inno Setup — это утилита с открытым исходным кодом. с открытым исходным Это активно развивается с 1997 года. Он был создан частично в ответ на актуальный неподходящий InstallShield Express. С тех пор он стал создателем инсталляторов для тех, кто не хочет исследовать собственные опции.
Его самая большая ничья — это гибкость. Inno Setup использует файлы сценариев с расширением ISS («Inno Setup Script») для настройки различных аспектов программы установки: какие файлы включены, где происходит установка, создавать ли ярлыки и т. Д. Файлы ISS используют форматирование, подобное формату файлов INI. и может быть создан с помощью мастера установки Inno.

Как создать свой собственный установщик с помощью Inno Setup:
- Запустите приложение Inno Setup Compiler.
- В окне приветствия выберите « Создать новый файл сценария с помощью мастера сценариев» .
- Введите имя приложения и версию приложения. При желании вы также можете указать сведения об издателе приложения и веб-сайте приложения. Нажмите Далее .
- Выберите базовую папку Destination , которая по умолчанию имеет значение Program Files. Введите имя папки приложения , которая является именем основного каталога, куда будут идти ваши установочные файлы. Нажмите Далее .
- В качестве основного исполняемого файла приложения найдите и выберите основной EXE-файл, который запустит ваше приложение. Если вы не устанавливаете приложение, включите. У приложения нет основного исполняемого файла . Затем добавьте файлы и папки в вашу установку с помощью кнопок Добавить файлы… и Добавить папки… . Нажмите Далее .
- На странице «Ярлыки приложений» оставьте значения по умолчанию или измените их в соответствии со своими предпочтениями. Они все говорят сами за себя. Нажмите Далее .
- На странице документации приложения вы можете указать до трех файлов TXT, которые будут отображаться в процессе установки конечного пользователя. Обычно это LICENSE.TXT, INSTALL.TXT и README.TXT, но они могут быть любыми. Нажмите Далее .
- На странице «Настройка языков» сохраняйте английский, но не стесняйтесь добавлять столько языков, сколько пожелаете. Нажмите Далее .
- На странице настроек компилятора вы можете настроить EXE-файл установщика:
> Выходная папка пользовательского компилятора, в которой будет находиться полученный EXE-файл установщика.
> Имя выходного базового файла компилятора — это имя файла EXE. Значением по умолчанию является setup.exe .
> Файл значков пользовательской настройки — это значок, который будет использоваться для установочного EXE-файла. Это должен быть файл ICO, который можно загрузить или преобразовать из PNG. - Установочный пароль защитит неавторизованных пользователей от использования вашего установщика. Оставьте это поле пустым, чтобы отключить эту функцию.
- Нажмите Готово . Когда будет предложено скомпилировать новый скрипт, нажмите « Да» . Когда будет предложено сохранить сценарий, выберите « Нет», если это файл однократной установки, или « Да», если вы планируете изменить или обновить его позже. Выполнено!
Загрузить — Inno Setup (бесплатно)
Какой метод подходит вам?
Если ваша программа чрезвычайно проста или вы собираетесь распространять ее среди ограниченного числа людей, используйте метод 7-Zip. Это просто, быстро и практически не требует технических знаний.
Если ваше программное обеспечение несколько простое и вы хотите представить конечного пользователя настоящий мастер установки, воспользуйтесь методом IExpress.
Если у вас сложное программное обеспечение и у вас за плечами большой технический опыт, воспользуйтесь методом Inno Setup. Он самый гибкий, самый мощный и не страдает от проблем, которые мешают IExpress.
Какой метод вы будете использовать? Есть ли другие методы, которые мы пропустили? Дайте нам знать в комментариях ниже!
Создание .exe установщика для UWP приложения

«Нoвый фopмaт пpилoжeний для мaгaзинa Windows pacпpocтpaняeтcя в ycтaнoвoчных фaйлaх .Appx и .AppxBundle и включaет в ceбя лишь caмy пpoгpaммy, eё имя и oпиcaниe. Эти пaкeты пoзвoляют paзpaбoтчикaм нe иcпoльзoвaть coбcтвeнный ycтaнoвщик для инcтaлляции, кaк этo былo c oбычными пpoгpaммaми.» — MIcrosoft.
В обход истории.
Если вам нужна инструкция как создать установщик, сразу листайте до “создание .exe установщика для UWP”
Звучит круто, не правда ли? Но что, если я хочу скинуть свою кривую, новорождённую, никому не нужную программу другу, не проходя все проверки от магазина Microsoft? Или же друг не знает как включить режим разработчика и установить твой сертификат. Тут уже возникают трудности и приходится идти обходными путями и сегодня я расскажу о самом интересном из них! Видите ли, при компиляции программы мы не получим exe’шник, который можно запустить и радоваться жизни. У UWP много таких приколов и ограничений, которые являются одновременно и сильными сторонами (в плане безопасности, кроссплатформенности), так и слабыми (например, нельзя хранить информацию своей программы, где попало на локальной машине). О всех минусах и плюсах данной технологии поговорим в другой раз, а пока я начну свой рассказ со своего знакомства с UWP.
Знакомство с UWP
Как-то раз, на 2 курсе университета у меня получилось отличиться, и преподаватель заметил меня, спустя несколько дней после первых его практических занятий он создал группу и пригласил туда меня.
— Добрый день, не хотите помочь с курсовой работой?
— Отлично! Нам нужно создать свой собственный мессенджер. Давайте начнём с выбора технологии.
На этом моменте кто-то предложил Windows Form (дабы не париться), WPF (для больших возможностей) и… всё. Про UWP ни слова. Я на тот момент жутко любил смотреть новости про обновления UWP и Windows. Меня поражало, как просто можно сделать красивое приложение с готовым дизайном. А плиточки… Ох, это была моя первая любовь в мире IT. Именно поэтому, я начал бить кулаком об грудь и жутко защищать данную технологию, продвигая её в массы. Преподаватель, поддержал меня и сказал следующую фразу: “Хорошо, давайте покажем, что такое новые технологии”. У нас возник вопрос с распространением приложения, ведь оно бы запускалось только на компьютерах с Windows 10, но и эта проблема была решена новым оборудованием в ВУЗе.
Месяц разработки спустя мессенджер был готов, и я успел возненавидеть UWP, ведь она могла кидать такие ошибки, что С++ и рядом не стоял. Как оказалось смотреть как кто-то пишет код и писать код самостоятельно, абсолютно разные вещи, из-за чего вся работа перешла на Олега (моего однокурсника), и он вывозил клиент мессенджера, практически сам. Но пришло время сдавать проект, а скомпилировать его в .exe и отправить на другой компьютер оказалось невозможной задачей.

Создание .exe установщика для UWP
У меня на руках был готовый код и всё что от меня требовалось, так это создать установщик, чтобы распространить приложение. Полазив по интернету, я понял 2 вещи:
Microsoft любит деньги и приложения нужно загружать на их магазин со всякими комиссиями и аккаунтами разработчика.
Есть корпоративный способ, но там нужно использовать PowerShell и лезть в настройки, чтобы активировать режим разработчика.
Казалось бы, 2 способ, то, что нужно, но это не установщик. Ты должен сам куда-то лезть и что-то включать. И вы, наверное, уже догадались, что мы должны всё автоматизировать. В этом нам поможет программа “Inno Setup Compiler”. С помощью неё мы создадим тот самый автоматизированный установщик UWP приложения. На этом моменте мой преподаватель объяснил, что новые технологии, это не обязательно хорошо, иногда со старой банально удобнее работать и никакие “фишки” не переманят программистов, если они неудобно реализованы. Таким образом, он специально разрешил нам использовать UWP, чтобы мы столкнулись с этим и поняли всё сами. Мы пропустили дедлайн из-за меня, но задача создать установщик поставлена и её нужно было решить.
Подготовка к созданию установщика
Закончив создание приложения, мы настраиваем package.appxmanifest под свои нужды, после чего правой кнопкой мыши нажимаем по проекту и выбираем publish → создать пакеты приложений. Здесь выбираем Загрузка неопубликованных приложений (и убираем галочку с автоматического обновления) → Да, использовать текущий сертификат → вводим версию, выбираем архитектуру и создаём. Теперь, заходим в папку с проектом и ищем там AppPackages → папка с названием приложения.
Перед нами предстало несколько файлов. Файл с расширением .msixbundle, это и есть тот самый новый установщик. Install.ps1 с Add-AppDevPackage.ps1 это сценарии Windows, который мы и будем использовать. Их можно было бы и так засунуть в наш установщик, но в коде данных сценариев есть специальные блоки, отвечающие за контекстное меню по типу: «Установить: Да? нет?». Естественно, нас это не устраивает, и мы избавляемся от них, примеры кода я скинул на GitHub. + мы добавляем пару строчек, которые включают неполноценный режим разработчика. Видите ли, раньше в настройках Windows было 3 режима, безопасный, установка UWP приложений из неизвестных источников и режим разработчика. Так вот, мы используем тот самый полу вырезанный режим полу разработчика, который теперь нигде не отображается.

Теперь пришло время для создания скрипта на InnoSetup. Я напишу самый простой скрипт, чтобы было легче понять. В блоке Run мы прописываем:
Filename: «powershell.exe»; Verb: runas; \
Parameters: «-ExecutionPolicy Bypass -File «»
WorkingDir:
(Verb: runas – запросить права администратора).
Таким образом у нас установился неполноценный режим разработчика и наш сертификат (исполняя инструкцию Windows используя PowerShell), а это значит, что мы удовлетворяем все потребности официального установщика Windows .msixbundle. Следом запустим модифицированную установку приложения, но пользователь не увидит интерфейс, ведь все блоки отвечающие за: «Установить, да? нет?» мы вырезали.
Parameters: «Add-AppxPackage «»
WorkingDir:
Полный пример кода опять же можно найти на GitHub.
После всех действий компилируем получившийся скрипт и получаем тот самый .exe установщик для UWP приложения.

В завершении
Хоть у UWP и есть много интересных особенностей, но я всё равно безумно люблю эту платформу. Она по-своему прекрасна и отвратительна в одном лице, что заставляет пережить целую палитру эмоций во время разработки. На ответ почему нет .exe у данных приложений есть 2 ответа. Первый ответ: Они используют безопасное расширение, все файлы хранятся в специальной закрытой папке, благодаря этому можно не беспокоиться о кроссплатформенности. Второй ответ: деньги. И можно было бы долго рассуждать на тему того, как сильно Microsoft любит деньги, но.. Мир меняется, и вот-вот, Microsoft Store станет бесплатен и доступен для всех, а это значит, что у UWP большое и светлое будущее.
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Создание инсталлятора в Visual Studio
В этой статье поговорим про создание инсталлятора в Visual Studio средствами InstallShield.
Для начала необходимо скачать и установить бесплатное расширение развертывания приложений для Visual Studio, которое называется Install Shield Limited Edition. Для этого запускаем Visual Studio, жмем «Создать проект» и в типах проектов выбираем «Другие типы проектов» -> «Установка и развертывание». В меню посередине щелкаем на «Включение InstallShield Limited Edition» и жмем кнопку «ОК».

В браузере откроется вот такая страница. Кликаем на ссылку в Шаге 2.

Откроется сайт, в котором необходимо заполнить свои личные данные. Заполняем и жмем кнопку «Download Now».

Откроется страница, на которой будет написан код активации для InstallShield. Также он будет отправлен на указанный при регистрации e-mail. Нажмем кнопку «Download» и начнется загрузка программы на ваш компьютер.

Закрываем Visual Studio и устанавливаем скачанную программу. Директорию установки оставляем без изменения.
Необязательно. В начале установки InstallShield может предупредить о том, что необходимо установить недостающие компоненты для работы программы. Жмем кнопку «Install», и эти компоненты будут установлены.

Запускаем Visual Studio, создаем проект, переходим в раздел «Установка и развертывание» и выбираем «InstallShield Limited Edition Project», жмем кнопку «ОК».

Нас попросят активировать программу. Выберем «Activate or Register for free copy of InstallShield» и нажмем кнопку «Next». Введем код, полученный ранее, и щелкнем кнопку «Activate». InstallShield активирован. На экране появится такое окно проекта:

В одной из статей мы рассматривали разработку гитарного тюнера. Создадим инсталлятор для этой программы. Для этого пройдемся по всем вкладкам внизу InstallShield и введем необходимую информацию. Итак, во вкладке «Application Information» введем информацию о компании, название программы, ее версию и веб сайт:

Перейдем во вкладку «Installation Requirements». Укажем, собрать ли приложение для всех доступных Windows или для каких-либо определенных. Так же выберем требования для программ, которые должны быть обязательно установлены для нормальной работы нашей программы.

В следующей вкладке (Installation Architecture) настройки недоступны, потому что мы используем бесплатную версию InstallShield.
Переходим далее. Вкладка «Application Files». Жмем кнопку «Add Files» и добавляем все файлы программы, для которой делаем установщик, из папки bin/release (предварительно эту программу нужно собрать как release версию).

Следующая вкладка «Application Shortcuts». Здесь представлены настройки ярлыков программы. Сначала удаляем нижний файл с припиской «vshost.exe», затем, по желанию, ставим галочку напротив параметра «создать иконку на рабочем столе». Ниже можно выбрать свою иконку для программы.

Вкладку «Application Registry» оставляем без изменений.
В последней вкладке «Installation Interview» настраиваем следующие параметры: просить ли пользователя принять лицензию, вводить ли название компании и имя пользователя, разрешить ли пользователю изменять путь установки и добавить ли опцию запуска приложения после установки.

Теперь выберем русский язык в установщике. Для этого в «обозревателе решений» два раза щелкнем на «General information» и в появившемся окне выберем русский язык.

Последний штрих. В верхней панели Visual Studio выбираем «SingleImage» и жмем кнопку «Присоединение…». Подождем пока файл установщика соберется. Готово!
Как из установленной программы сделать установочный файл
Чтобы сделать из установленной программы один установочный файл, вам нужно:
1. Запустить программу Inno Setup, нажать Файл -> Новый и запустить Мастера.
2. На следующей страничке следует указать имя приложения, его автора, официальный сайт и т.п. Если вы создаете инсталлятор для себя, то достаточно ограничиться только именем приложения и версией программы.
3. На третьем этапе следует указать базовую папку для установки. Обычно, этот пункт менять не следует, и программа ставится в Program Files. Также следует указать по умолчанию имя папки.
4. Дальше нужно указать основной exe-файл, который будет запускать ваше установленное приложение, а чуть ниже добавить весь список файлов и компонентов, из которых приложение состоит.
5. На следующем этапе оставьте все установки по умолчанию – это позволит пользователю самостоятельно выбрать, создавать ли ему меню программы в Пуске и значок на Рабочем столе.
6. Если есть файл лицензии и Readme – укажите к ним путь. Вы можете создать свой файл Readme.txt и написать собственное сообщение пользователям или оставить все строки пустыми.
7. Дальше укажите язык, на котором будет работать Мастер установки программы.
8. На следующем этапе вам нужно указать название установочного файла, который будет запускать Мастера установки. Желательно его сделать понятным для пользователя. Укажите место на вашем ПК, куда будет помещен скомпилированный файл. Также вы можете указать ярлык инсталлятора.
9. Дальше оставьте галочку неизменной. Это позволит упростить скрипт установщика.
10. Нажмите Финиш и программа создаст инсталляционный файл по указанным вами параметрам.
.jpg)
Очень часто после скачивания приложения из Google Play или другого неизвестного источника появляется необходимость сохранить на своем устройстве установочный файл с приложением (.apk). Например, для того чтобы передать интересное приложение по Bluetooth. Однако не всегда есть время искать установочный файл на различных файлообменниках и многочисленных ресурсах, посвященных Android-тематике. Поэтому, для того, чтобы извлечь установочный файл с приложением (.apk) из устройства, существует несколько нехитрых способов. В данном примере я расскажу вам о трех наиболее популярных.
Способ №1
чтобы извлечь установочный файл с приложением (.apk) из устройства, необходимо:
1) Для начала скачать файловый менеджер — Astro File Manager и запустить скачанное приложение. В том случае, если Astro File Manager у вас уже установлен, необходимо найти его на вашем android устройстве и просто запустить (полный путь) Меню — Astro File Manager.
2) После запуска Astro File Manager мы попадаем в окно, в котором видим присутствующие на устройстве накопители памяти и список серии облачных сервисов (в них всегда можно зарегистрироваться, либо авторизоваться, расширив тем самым внутреннее пространство устройства на несколько лишних Gb).
3) Затем делаем свайп влево, открыв основное меню приложения.
4) После этого необходимо щелкнуть на пункте Менеджер приложений, попав в новое окно, показывающее все установленные на вашем смартфоне или планшете приложения.
5) Для того, чтобы извлечь установочный файл с приложением (.apk) из устройства, необходимо тапнуть на приложение которое нужно извлечь, например Google Chrome, тапаем на иконку Google Chrome и перед нами появятся два предложения: сделать резервную копию или деинсталлировать.
6) Тапаем на левый пункт Рез. копия и ждем окончания процесса. После того, как копирование будет завершено, установочные файлы приложений можно будет найти в памяти телефона.
7) Полный путь до установочных файлов приложений выглядит таким образом: /sdcard/bakups.
Способ №2
Устанавливаем приложение Root unistaller . Открываем приложение, Root Unistaller отсканирует сколько у вас приложений и сделает бекап всех приложений по пути:
С телефона mntsdcard RootUnistallerautobackups.
C компьютера (чтобы телефон распознавался как флешка) sdcard RootUnistallerautobackups.
Способ №3
Получаем Root . Устанавливаем приложение Root Browser . Открываем приложение и переходим по по пути dataapp и выбираем приложение. Если Вас интересуют системные приложения то переходим по этому пути systemapp и выбираем приложение. Выбранные приложения сохраняем на SDCARD (карта памяти) и делаем с ним все что хотим.
Содержание статьи
Часто возникают ситуации, когда программа, установленная на одном компьютере, должна непременно оказаться на другой машине. Причем инсталлятора нет, простого копирования файлов не хватает, а человек, который ставил программу, куда-то пропал вместе с дистрибутивом.
В случае с редким или самописным софтом такая проблема случается сплошь и рядом. Практически каждая отдельно взятая контора может похвастаться, что какой-то местный кудесник-программист наколотил две-три тысячи строк кода, создавая очередную программу отчетности или ERP-систему. И все идет хорошо, пока этот компьютерный гуру не потеряется. Стандартного инсталлятора нет, простое копирование папки с программой не помогает, а программу срочно нужно установить еще на одну машину. Кажется, пора начинать рвать на себе волосы? Но это не вариант для компьютерной нечисти! 🙂 Что переносить?
Итак, самый главный вопрос: что переносить кроме папки с программой? Условно все необходимое можно разбить на три пункта:
- Файлы, к которым обращается программа.
- Ветки реестра, к которым обращается программа.
- Среда выполнения.
Если с пониманием первых двух пунктов проблем нет, то насчет третьего стоит сделать уточнение. Под средой выполнения здесь понимаются базы данных, драйвера устройств (псевдоустройств), именованные каналы (Named Pipes), мэйлслоты, COM/ActiveX компоненты и так далее. То есть, все, с чем работает программа (и что предоставлено сторонним софтом, а не операционной системой) через стандартные интерфейсы Windows — будь то сеть, IPC или тому подобное.
Среда является самым проблемным компонентом при переносе, и именно из-за среды приходится заморачиваться, чтобы ОС на обеих машинах совпадали.
Какие файлы и ветки реестра переносить?
Господа, давайте дружно поднимем бокалы с кофе, выпьем и почтим память безвременно ушедших утилит-мониторов NT Filemon и NT Regmon, которые отслеживали обращения любого процесса к файлам и ключам реестра соответственно. Злой гений Марка Руссиновича безжалостно аннигилировал их… а потом воссоздал из пепла в одном мощном и полезном инструменте. Встречайте, Process Monitor. Именно эта тулза будет основным оружием переноса и поможет нам разобраться, какие файлы использует программа и к каким ключам в реестре обращается. Для этого нам понадобятся две функции: Show Registry Activity и Show File System Activity.
Итак, открывай ProcMon, запускай переносимую софтину и дождись, пока она полностью загрузится. Затем ступай в ProcMon, отключи логирование, найди нужную программу (по имени исполняемого файла), жми правой кнопкой по записи в столбце Process Name и выбирай Include ‘SuperProg.exe’, где SuperProg.exe — это исходное приложение для переноса. Ты увидишь, что Process Monitor отсеял все события, связанные с другими процессами. Можно было бы анализировать все в уме, отслеживая события, которые появляются в Process Monitor, но мы поступим иначе. Для удобства сохраним лог всех обращений в файл. Для этого нажимай «File -> Save…». В окне сохранения опцию «Events to save» выставляй в «Events displayed using current filter»(чекбокс «Also include profiling events» должен быть включен), а «Format» выбирай «Comma-Separated Values (CSV)». Сохрани куда-нибудь Logfile.csv и можешь заглянуть внутрь. Испугался? 🙂
Разобраться в этой помойке без помощи парсера сложно. Чтобы упростить задачу, я, когда сам занимался подобным переносом, набросал два Perl-скрипта (ищи их на диске). Положи эти скрипты в папку, где был сохранен Logfile.csv (или сразу сохраняй лог в папку к скриптам). Теперь запускай parse.pl. Этот скрипт отпарсит log-файл и создаст еще два лога: file.log будет содержать уникальные обращения к файлам и папкам, reg.log —уникальные обращения к веткам реестра.
Отделяем мух от котлет
Не торопись запускать второй скрипт. Сначала рекомендую отсеять явно левые записи из reg.log. Такие ветки реестра, как HKLM/Software или HKCR/Interface являются чисто системными, поэтому на новую машину их импортировать не имеет смысла (в худшем случае можно испортить систему). Удаляем. Сильно тут не лютуй, а то выкинешь что-то, что имеет отношение к программе, которую переносим. После этого можно с чистым сердцем запускать export.pl. Скрипт пошуршит и создаст в папке кучу REG-файлов (их можно импортировать на целевой системе) + папку subdir. Далее необходимо проанализировать содержание Reg-файлов, напрячь голову и отсортировать файлы на три группы:
- Нужен программе;
- Не нужен программе;
- На дополнительное изучение.
Сортируя файлы, не забывай редактировать абсолютные (полные) пути до компонентов (DLL-библиотек, файлов настроек и прочего), если найдешь. Так мы получим REG-файлы, которые необходимо импортировать на целевой машине. Теперь по поводу файлов. В папке subdir скрипт воссоздал дерево обращений к файлам таким образом:
subdir
C (буква диска)
Program Files
…и так далее, до файлов включительно.
Непосредственный перенос
На новой машине скопируй папку с программой в C:Program Files (к примеру). Импортируй ключи реестра, которые ты определил в группу «Нужен программе». Из папки subdir восстанови структуру файлов и каталогов, отсутствующих в системе, на которую выполняется перенос. Надеюсь, ты понимаешь, что системные файлы и библиотеки заменять не надо. Поэтому при переносе файлов нужно быть очень осторожным. Обязательно обращай внимание, где располагается перемещаемый файл — проведи аналогию с переменными окружения (изучи вывод команды «set» в консоли). Просмотри содержимое каждого файла, который, как тебе кажется, не является системным. Поправь значения опций, в которых задается полный путь до каких-либо компонентов, если найдешь файл(ы) настроек.
Если о защите системных библиотек Windows хоть как-то позаботится SFC (System File Checker), то в случае реестра такой помощи ждать не приходится. Поэтому при импортировании веток реестра с рабочей машины нужно быть вдвойне осторожным. Причем, как и в случае с файлами настроек, придется корректировать пути в строковых параметрах. Зарегистрируй COM-компоненты — их легко определить по наличию нескольких экспортируемых функций (DllRegisterServer, например).
Тем, кто забыл: регистрация производится командой regsvr32 component.dll, где component.dll является COM-сервером (кстати, COM-сервер может находиться и внутри exe-файла). Ценителям Total Commander будет приятно, что для их любимца есть listerплагин, который на раз определяет COM/ActiveX. Если программа использует какие-то специфические технологии, необходима дополнительная настройка. Скажем, в случае с использованием BDE(Borland Database Engine) необходимо внести соответствующие изменения у DataSource’ов, которые использует программа.
После этого остается только проинсталлировать и настроить среду, которая нужна нашему приложению (если нужна). Стандартные компоненты наподобие сервера БД ты установишь сам. Перенос среды должен быть легче всего, поскольку для серверов БД есть нормальные инсталляторы. Установить драйвер можно специальной утилитой, а зарегистрировать COM-сервер еще проще.
Перенос драйверов
А что делать, если программа работает с драйвером, единственный установщик которого потерян вместе с install.exe? Да и как вообще определить, что программа работает с драйвером? Какой-либо специальной тулзы я не нашел, поэтому воспользуемся OllyDbg. Чтобы работать через DeviceIoControl (через эту системную функцию драйверу устройств отправляются разные команды), сначала необходимо открыть созданное устройство через символическую ссылку вызовами CreateFileA/CreateFileW. От этого и будем плясать.
Загрузи программу в отладчик. Прямо на точке входа в окне дизассемблера жми , вводи CreateFileA и нажимай . Мы попали в начало функции открытия файла. На этом месте нажимай или в меню по правой кнопке «Breakpoint — Conditional log». В открывшемся окне в поле «Expression» вписывай DWORD PTR DS:[ESP+4] — по этому адресу лежит указатель на открываемый файл. В комобоксе «Decode value of expression as» выбирай «Pointer to ASCII string» (для юникод-версии соответственно — «Pointer to UNICODE string»). Радио-кнопку выставляй в «Always». Остальные опции оставь по умолчанию. Нажимай и запускай программу.
Очень вероятно, что придется имитировать ее реальное использование, поскольку мы не знаем, в какой момент может произойти обращение к драйверу. Открывай в OllyDbg лог (комбинация клавиш ) и ищи подсвеченные строки, начинающиеся с COND. В кавычках будет указан файл, и если он начинается с . — считай, что это наш драйвер. С помощью утилиты WinObj (кстати, написанной опять же Руссиновичем) выясни настоящее имя устройства. Оно должно выглядеть как DeviceDevName. Посредством той же WinObj убедись, что на другом компьютере этого устройства нет.
Настал черед поиска самого файла драйвера. Большинство драйверов располагаются в %SystemRoot%System32Drivers. Перейди в эту папку и ищи UNICODE-строку имени устройства (DeviceDevName). Если файла с такой строкой нет, то открывай «Сервис Менеджер».
Там ищи все драйвера, которые располагаются по нестандартному пути — искомая строка должна быть в одном из них. Этот же «Сервис Менеджер» поможет тебе перенести драйвер на другой компьютер (сделай скриншоты настроек, пропиши зависимости и так далее).
Утилита хорошая, но, увы, не совсем корректно инсталлирует драйвера. Поэтому, после того, как установишь свой драйвер, выполни следующие действия: найди в редакторе реестра ветку HKEY_LOCAL_MACHINESystemCurrentControlSetServicesвыбранноеимядрайвера и удали ключи «Group» и «ObjectName» в этом разделе. Если ключи не удалить, то менеджер при запуске драйвера будет выдавать ошибку, сообщая, что указан некорректный путь, хотя путь тут как бы и не причем.
Подводные камни
Когда ты считаешь, что все перенес — запускай программу. С вероятностью 70-75% она запустится. Что-то пошло не так? Вполне ожидаемо. Мы тут не яичницу жарим. В общем случае придется применить технологию багхантинга. Брать в зубы дизассемблер, отладчик и ловить исключения (или ExitProcess, если программа вываливается безмолвно). Сложно дать какие-то рекомендации, но все же попробуем. Просмотри внимательно еще раз REG-файлы. Возможно, ты не заметил что-то, что позволяло программе жить и процветать на прежней машине. Попробуй определить несистемные библиотеки из subdir и скопировать их с заменой. Если сообщение, с которым вываливается программа, более информативно, чем «Access violation», попробуй поискать в интернете текст ошибки (это может быть связано со средой исполнения). Но, в любом случае, твоим главным оружием здесь будет незаменимая связка: дизассемблер + отладчик + мозг и прямые руки.
Если есть возможность, то обязательно проводи все эксперименты только на виртуальной машине — так ты будешь уверен, что система не загажена и не повредишь основную операционку. Прежде чем мужественно рваться в бой, я тебе предлагаю попробовать свои силы на специально разработанной программе. Собственно, полезность от программы нулевая, но перенести ее просто так не получится.
Bdetest.exe работает с BDE через алиас «testBDE», за каким-то чертом обращается к драйверу и просто не может функционировать без определенной информации в реестре и файловой системе. На диске ты сможешь найти все необходимое: результат работы скриптов, скрин BDE-алиаса, драйвер, базу и саму программу.
Заключение
Перенос программ без инсталлятора — нетривиальная задача. Необходимо обладать знаниями во многих сферах IT — администрировании, программировании, дизассемблировании, отладке, базах данных. Но всегда помни: непереносимых программ не бывает! Ведь, как гласит манифест хакера, если компьютер совершает ошибку, то это ты напортачил.