Что нового

*Концепция* создания "тихой" установки, 90% работает, на примере Punto Switcher.

sss

Продвинутый
Сообщения
332
Репутация
96
AutoIt: 3.3.6.1
Версия: у Punto Switcher'a - 3.1.1

Категория: Разное

Описание:
Давно хотел делать программы с "тихой" установкой, то есть установкой без вопросов. Раньше делал так - запускал установочник программы, ставил невидимость, нажимал на кнопки скриптом. Неудобно, некрасиво, много шансов на ошибку. Недавно изобрел *свой* метод, решил поделиться. Делал на примере беплатной программы Punto Switcher 3.1.1, скаченной с Yandex.

Необходимые инструменты: thinstall Virtualization Suite (DepositFiles), вроде бесплатна.

Шаг 1 - установка и скан реестра.
На этом этапе наша задача сводится к получению записей реестра, добавляемых программой, и самих файлов программы.
Скачиваем thinstall (вообще это инструмент для создания portable-программ, но я использую ее для получения измененных веток реестра). Запускаем Setup Capture.exe. Жмем "Start", потом "Pre-Install scan". Ждем. Если появится окно "Warnings" - не беда, это защищенная ветка реестра, это нормально, просто жмем дальше. Устанавливаем свою программу (в моем примере - Punto Switcher), не закрывая Setup Capture. Настраиваете ее (сделанные вами настройки, по идее, должны перенестись и в тихую установку.). Потом возвращаемся к окну thinstall, жмем "Post-Install Scan". Ждем. Опять может быть окно "Warnings", ну да ладно. Из списка выбираем установленную прогу, ставим галку напротив нее, жмем "Continue". Жмем "Save results", потом "Quit".

Шаг 2 - подготовка файлов.
Самый муторный этап - надо перевести полученные записи от thinstall в нормальный вид (в примере - reg-файл и zip-архив)
Переходим в папку Captures (в одной папке с setup capture.exe), дальше в папку с именем нашей проги. Там есть файлы HKEY_LOCAL_MACHINE.txt и HKEY_CURRENT_USER.txt, в них и есть интересующая нас информация. Открываем их. Там запись вида:
Код:
isolation_full ветка реестра
  Value=имя записи
  тип записи~значение
Я делал так - шел по ветке в Regedit, экспортировал их и потом объединял в один файл .reg. Далее с помощью проги ConvRegToAu3 (во вложении) конвертил reg в au3.
Далее, в папке с названием проги есть папка %ProgramFilesDir%. Заходим в нее. Это и есть файлы проги. Потом мы их будем копировать (я запихал их в архив zip и извлекал библиотекой zip.au3, во вложении). Насчет папки %SystemSystem% - это вроде файлы которые кидаются в WINDOWS-папку, но я не уверен, не смотрел.

Шаг 3 - создание скрипта-установщика.
Теперь объединяем все - пишем скрипт, который будет устанавливать файлы (FileInstall),копировать их в @ProgramFilesDir и заносить записи в реестр, а также делать ярлыки. Чтобы не мучаться, смотрите пример.
Все, компилируйте и тихая установка готова!
Проверял на виртуальной машине, Punto Switcher встал как родной, все работает и не "падает".

Код/Пример:
Код:
#include <Zip.au3>
DirCreate('C:\temp(install)')
FileInstall('punto switcher.zip','C:\temp(install)\ps.zip')
DirCreate(@ProgramFilesDir & '\Punto Switcher')
_Zip_UnzipAll('C:\temp(install)\ps.zip',@ProgramFilesDir & '\Punto Switcher')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','DisplayName',"REG_SZ",'Punto Switcher 3.1')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','UninstallString',"REG_SZ",'C:\Program Files\Punto Switcher\uninstall.exe')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','DisplayIcon',"REG_SZ",'C:\Program Files\Punto Switcher\uninstall.exe')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','DisplayVersion',"REG_SZ",'3.1.1.72')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','Publisher',"REG_SZ",'Яндекс')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','URLInfoAbout',"REG_SZ",'http://www.yandex.ru')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','HelpLink',"REG_SZ",'http://punto.yandex.ru')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','NoModify',"REG_DWORD",0x00000001)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Punto Switcher 3.1','NoRepair',"REG_DWORD",0x00000001)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Yandex\Punto Switcher\3.1','Program Folder',"REG_SZ",'C:\Program Files\Punto Switcher')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Yandex\Punto Switcher\3.1','Program Group Name',"REG_SZ",'Яндекс\Punto Switcher')
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','Remove',"REG_DWORD",0x00000000)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','Platform',"REG_SZ",'winnt')
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VersionUrl',"REG_SZ",'')
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VerMajor',"REG_DWORD",0x00000003)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VerMinor',"REG_DWORD",0x00000001)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VerSubver',"REG_DWORD",0x00000001)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VerBuild',"REG_DWORD",0x00000048)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','ReportUrl',"REG_SZ",'http://soft.export.yandex.ru/status.xml')
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','PingStatPeriod',"REG_DWORD",0x00015180)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','VersionStatus',"REG_DWORD",0x00000001)
RegWrite('HKEY_CURRENT_USER\Software\Yandex\Yupdate-BITS-CM\Applications\punto','WantUnstableToo',"REG_DWORD",0x00000000)
DirRemove('C:\temp(install)',1)
FileCreateShortcut(@ProgramFilesDir & '\Punto Switcher\punto.exe',@DesktopDir & '\Punto Switcher.lnk')
FileCreateShortcut(@ProgramFilesDir & '\Punto Switcher\punto.exe',@StartupDir & '\Punto Switcher.lnk')
DirCreate(@ProgramsDir & '\Punto Switcher')
FileCreateShortcut(@ProgramFilesDir & '\Punto Switcher\punto.exe',@ProgramsDir & '\Punto Switcher\Punto Switcher.lnk')
FileCreateShortcut(@ProgramFilesDir & '\Punto Switcher\uninstall.exe',@ProgramsDir & '\Punto Switcher\Удалить.lnk')
TrayTip('Установка','Punto Switcher установлен и добавлен в Автозагрузку!',10)
Sleep(10000)

Снимок:
нету.

Файлы: Zip.au3, ConvRegToAu3. Пример, к сожалению, с хостинга удалили, и у меня не сохранился.

Источник: http://autoit-script.ru/index.php/topic,4306.0.html
Автор(ы): Sky-WaLkeR.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Хорошая информация, нужная. Вод бы еще проверить на MS Office или каком-нибудь антивирусе….
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Спасибо. Моя первая большая статья). Хочу проверить завтра на MS Office, по идее, ошибки не должно быть. Попробую еще нод...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Sky-WaLkeR сказал(а):
Недавно изобрел свой метод...

Я так тоже когда-то делал, только с помощью обычного WinRAR'а и Ashampoo UnInstaller'а. А потом собирал все в Inno Setup в свой собственный инсталятор + добавлял код на случай удаления программы.

Sky-WaLkeR сказал(а):
Хочу проверить завтра на MS Office, по идее, ошибки не должно быть.

Хех... Не советую даже мучиться, хотя... MS Office в процессе установки всю систему раком поставит. А уж сколько он туда го**а понаставит, даже думать страшно. И все это будет зависить от текущего состояния системы, т.е. на другом компьютере, с большой долей вероятности, все будет совсем по другому. И уж точно все это хозяйство выковырить потом из системы будет просто нереально.

P.S

Если я не ошибаюсь, то для Office, равно, как и для Windows, можно написать сценарий для автоматической установки.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
*Концепция* создания "тихой" установки, 90% работает, на примере Punto Switcher

Даа, такие программы ооочень долго так делать... Попробовал на NOD32 - ужас... Во вложении ключи реестра, и еще столько же я выкинул оттуда )) на форум не влезло - ограничение на 50000 символов :shok:

но! вроде работает. На виртуалке запустился.
Метод хорош для маленьких прог - TeamViewer, Punto Switcher, Akelpad, Daemon tools и так далее. Удобно. Но ооочень долго делать большие проги))
 
S

ShAG1992D

Гость
смысл делать такую установку если в большинстве случаев ThinApp сможет сделает портативную версию программы. Разве что программы которые устанавливают драйвера (антивирусы, эмуляторы dvdram)
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
ShAG1992D [?]
смысл делать такую установку
Тихая установка и портативная программа - немного разные вещи (ИМХО). Например, Вы сможете грамотно настроить портативную программу с сохранением настроек (допустим, что конфиг пишет в файл)? Или получить 100%работающую копию с уже сделанными настройками (например, админу надо установить настроенную программу XXX на 200 машин). Или получить доступ к служебным файлам программы без заморочек (например, к дневнику Punto Switcher)?
К тому же при таком алгоритме можно ставить поверх программы разнообразные патчи, плагины (TotalCmd например), репаки, и полностью контролировать процесс (ведь все происходит в среде AutoIt)
 
S

ShAG1992D

Гость
Согласен если прогу уже упаковать ThinApp то потом будет очень проблемно её извлечь из сборки для каких либо махинаций. а насчет проги с уже сделанными настройками то это легко. один раз упаковал как нужно и перенес на любое количество компьютеров. А вообще все зависит от ситуации. Например зачем упаковывать TC если у него выходят около 1 раза в месяц новые или обновленные плагины или программы
(P.S чтобы не копатся в проектах ThinApp можно настроить небольшую прогу RegShot чтобы она сканировала не только реестр но и файлы)
 
Верх