Руководство от PortableAppz.blogspot.com

PortableAppz.blogspot.comПриложения, которые используют только файлы в своей папке, являются действительно переносимыми, но большинство из них используют реестр, файлы и папки на локальном компьютере.


Подготовка Переносимого приложения


Получение файлов программы
В первую очередь Вы должны извлечь файлы из инсталлятора используя программу Universal Extractor. В противном случае: мониторинг установки приложения с помощью Total Uninstall (Для этого используйте девственно-чистую систему).
Простой пример это CCleaner, скачайте переносимую версию и распакуйте в: CCleanerPortable\App\CCleaner (Вы должны создать три папки согласно структуре).


Мониторинг запуска и/или установки приложения
Запустите Total Uninstall, нажмите Install, и выберите CCleanerPortable\App\CCleaner\CCleaner.exe.
Нажмите на Next для получения нового снимка системы.
После нажмите на Next для запуска приложения.
CCleaner запустился на английском. Посмотрите в «Options-Advanced» пункт «Save all settings to INI file» он не может быть изменён (в связи с присутствием portable.dat файла в директории программы). Выберете Ваш язык в «Options-Settings» и закройте CCleaner.
Нажмите Next в Total Uninstall для получения окончательного снимка системы, чтобы посмотреть изменения в системе нажмите Close:
CCleanerTU
Изменений никаких нет! CCleaner действительно переносное приложение.


Подготовка лаунчера
В этом случае лаунчер бесполезен, но можно сделать определённые настройки и переместить их в директорию «Data».
Если в папке программы нет файла portable.dat, CCleaner использует ini файл только при наличии его в директории программы (появляется при определённом значении настройки «Save all settings to INI file»). В противном случае использует реестр системы: HKEY_CURRENT_USER\Software\Piriform.
Хорошая мысль использовать ini файл и portable.dat, другой момент переместить файл ini в директорию «Data» для сохранения настроек после обновления программы.
Лаунчер может записать в CCleaner.ini фиксированные настройки для постоянного их выполнения:

[Options]
Language=1049
BackupDir=L:\PortableApps\CCleanerPortable\Backups

1049 это десятичный id для русского языка и может быть сохранён с помощью GetUserDefaultLangID of kernel32, мы используем это для автоматического сохранения настроек.


Лаунчер приложения

Лаунчер – это маленький исполняемый файл в *Portable папке программы скомпилированный с помощью NSIS. Скачайте и установите NSIS.


Минимальный лаунчер
Скопируйте-вставьте скрипт в Notepad++ и сохраните как CCleanerPortable.nsi в CCleanerPortable папку.
Нажмите на нём правой кнопкой мышки и выберете Compile NSIS Script, это создаст некий исполняемый файл размером в несколько килобайт (компиляция должна производится сугубо с правами Администратора).

WindowIcon Off
SilentInstall Silent
AutoCloseWindow True
OutFile CCleanerPortable.exe

Section
	ExecWait "$EXEDIR\App\CCleaner\CCleaner.exe"
SectionEnd
  • лаунчер без иконки
  • лаунчер имеет тихую установку (при запуске лаунчера его не видно)
  • лаунчер автоматически закрывается после окончания работы приложения
  • название лаунчера будет CCleanerPortable.exe

Код пути к исполняемому файлу для запуска находиться в разделе Section: запуск CCleaner.exe и ожидание выхода ($EXEDIR – это директория лаунчера).


Структурированный лаунчер
Скачайте и извлеките CCleanerPortableSources в Вашу CCleanerPortable папку.
Откройте в Notepad++ CCleanerPortable_1.nsi.
Для того чтобы использовать всегда повторяющиеся части сценария мы используем константы и мы используем функции вызова из основного раздела чтобы иметь чистую структуру для запуска.
Строки, начинающиеся с точки с запятой, являться комментариями и в процессе компиляции никакой роли не играют.
Читайте комментарии и ищите информацию в справке NSIS для большего понимания.


Готовый лаунчер
Откройте в Notepad++ CCleanerPortable_2.nsi.
Добавьте: version info, securities before starting, customization, splash and passing receipts parameters.
Для компиляции Вам понадобиться FindProcDLL plug-in: скачайте и установите.


Окончательный лаунчер
Откройте в Notepad++ CCleanerPortable_3.nsi.
Тот же сценарий, что и  2, но общепринятые части со всеми настройками перемещены в PortableApp.nsh вызываемые с помощью команды: !include.


Резервирование и восстановление ключей реестра


Плагин для реестра
Вам нужен этот NSIS plug-in for registry для компиляции.
Скачайте, извлеките (на Рабочий стол) и установите: скопируйте Registry.dll в папку «Plugins» и Registry.nsh в папку «Include».
Цель: Audacity 1.2.6
Скачайте audacity-win-1.2.6.zip и извлеките в «AudacityPortableAppAudacity».
Сделайте мониторинг audacity.exe с помощью Total Uninstall (не ассоциируйте с программой файлы .AUP)
Откройте и сохраните какой-нибудь аудио файл. Сделайте определённые настройки в меню Правка: Настроить…
Форматы: Настройка экспорта в MP3: Найти библиотеку (найдите lame_enc.dll).
Каталоги: Каталог для временных файлов, Месторасположение (Измените окончательную директорию на «AudacityPortableTemp»).
Закройте и посмотрите изменения:
AudacityReg
Экспортируйте изменения реестра в Win9x/NT4 файл реестра:

REGEDIT4

[HKEY_CURRENT_USER\Software\Audacity\Audacity]
"WantAssociateFiles"=dword:00000000

[HKEY_CURRENT_USER\Software\Audacity\Audacity\Directories]
"TempDir"="C:\\DOCUME~1\\Admin\\LOCALS~1\\Temp\\AudacityPortableTemp\\"

[HKEY_CURRENT_USER\Software\Audacity\Audacity\MP3]
"MP3LibPath"="L:\\PortableApps\\AudacityPortable\\App\\LAME\\lame_enc.dll"

Только выше изложенные записи реестра должны быть сделаны лаунчером (другие настройки пользователя должны будут храниться в директории «Data»).
Скачайте Reg2Nsis и установите (InstallContextMenu.exe). Нажмите правой кнопкой мыши на файле реестра и выберете пункт «Convert to nsis script» Вы получите *.nsh файл:

WriteRegDWORD HKEY_CURRENT_USER "Software\Audacity\Audacity" "WantAssociateFiles" 0x0
WriteRegStr HKEY_CURRENT_USER "Software\Audacity\Audacity\Directories" "TempDir" \
"C:\DOCUME~1\Admin\LOCALS~1\Temp\AudacityPortableTemp\"
WriteRegStr HKEY_CURRENT_USER "Software\Audacity\Audacity\MP3" "MP3LibPath" \
"L:\PortableApps\AudacityPortable\App\LAME\lame_enc.dll"

C:\DOCUME~1\Admin\LOCALS~1\Temp — это системная временна директория: $TEMP
L:\PortableApps\AudacityPortable — это директория в которой размещается лаунчер: $EXEDIR.
Скачайте и распакуйте AudacityPortable.
Откройте AudacityPortable_1.nsi в Notepad++.
Из мониторинга установки TU мы увидем, что только один ключ реестра используется Audacity: «HKEY_CURRENT_USER\Software\Audacity», и он может быть использован при уже установленной версии программы.


BackupLocalKeys
HKEY_CURRENT_USER\Software\Audacity переименовывается в: HKEY_CURRENT_USER\Software\Audacity-BackupByAudacityPortable.


RestorePortableKeys
Восстановление настроек реестра, сохраненных в DataAudacity.reg (при закрытии предыдущего запуска переносимого приложения).


Init
Эта функция вынуждает настройки, которые нужны для переносимого приложения, обновлять пути и перезаписывать те которые ранее были восстановлены.


Close
Audacity закрывается: удаляет временные директории.


BackupPortableKeys
Настройки сохраняются в Data\Audacity.reg.


RestoreLocalKeys
Обратное от BackupLocalKeys.


Резервирование и восстановление директорий


Цель: Instant Color Picker
Скачайте icp_setup.exe и извлеките файлы с помощью Universal Extractor или Inno Setup Unpacker
Скопируйте содержимое директории {app} в
InstantColorPickerPortable\App\InstantColorPicker
и содержимое директории {userappdata}\Young Smart Software в
InstantColorPickerPortable\Data\InstantColorPicker
Сделайте мониторинг icp.exe с помощью Total Uninstall
Закройте и посмотрите изменения:
ICP
ICP использует только Young Smart Software директорию в C:\Documents and Settings\Admin\Application Data ($APPDATA для NSIS)
Скачайте и извлеките InstantColorPickerPortable.
Откройте InstantColorPickerPortable_Lite.nsi в Notepad++.


BackupLocalDirs
В Application Data, Young Smart Software папка переименовывается в Young Smart Software—BackupByInstantColorPickerPortable


RestorePortableDirs
Настройки переносимого приложения Data\InstantColorPicker копируются из Application Data\Young Smart Software.
(Мы должны использовать Копирование Файлов вместо переименования, так как диски разные).


BackupPortableDirs
ICP закрывается, Мы делаем обратное от RestorePortableDirs.


RestoreLocalDirs
Обратное от BackupLocalDirs


Резервирование и восстановление файлов

Делаем всё тем же образом, что и для папок. Скачайте этот шаблон, в нём Вы можете найти действия с реестром, папками и файлами.

Если у вас несколько переменных значений (несколько ключей реестра, несколько файлов и т. д.) дублируйте записи о них в файле исходного кода:

	!define REGKEY1 "HKEY_LOCAL_MACHINE\SOFTWARE\MyProg"
	!define REGKEY2 "HKEY_CURRENT_USER\Software\MyProg"
;...
	${registry::DeleteKey} "${REGKEY1}-BackupBy${APP}Portable" $R0
	${registry::MoveKey} "${REGKEY1}" "${REGKEY1}-BackupBy${APP}Portable" $R0
	${registry::DeleteKey} "${REGKEY2}-BackupBy${APP}Portable" $R0
	${registry::MoveKey} "${REGKEY2}" "${REGKEY2}-BackupBy${APP}Portable" $R0
;...

Дополнение

Читайте справку пользователя NSIS,  Chapter 4: Scripting Reference чтобы знать больше про Функции, Инструкции, Переменные, Константы…


NSIS Константы

Многие константы ($ AppData, $ SYSDIR …) определены в NSIS и их значения зависят от версии Windows и её локализации.
Запустите NSIS_Constants для определения их значений в соответствии с вашим компьютером и последующей записью в файл ini.


Оригинал руководства

ОБСУДИТЬ НА ФОРУМЕ

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Нет комментариев.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: