Хотел бы поинтересоваться тут чтобы не изобретать костыли.
Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера.
Беглым поиском поискал можно реализовать скриптами к inno-setup.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
Вроде есть пару модулей к Инно. Шерлок и еще какой-то.
Но все это от лукавого. Обычно видел в Юньке выбираются модули и они уже закачиваются.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
В примерах InnoSetup (в его папке) есть пример web инсталлятора вроде.
Я реализовал такой вариант, подписал. Но пока оставил в резерве (не использую).
Веб-инсталлятор скачивает (с красивым прогрессом) основной неподписанный инсталлятор, который запускается и все устанавливает.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
Несколько лет уже как используем эту схему. Сетап стучится на сервер, получает пакет, качает, распаковывает и устанавливает клиенту.
Сетап подписан, исполняемые файлы самой программы не подписаны. Делали сетап вот этой программой.
Причем мы за год накрутили там много всякой логики, интересный установщик получился. Потом подпись не стали новую получать, так и не меняли сетап с той поры.
Самое главное обработка ошибок, всякое может произойти на стороне клиента, надо все предусмотреть, иначе в техподдержку придется ясновидящих набирать.
Подробнее: У нас не одна программа, их более 15. Каждая программа устанавливается одним и тем же установщиком. Какую программу надо отдать с сервера решает скрипт, в зависимости от названия самого установщика. В логике также есть на всякий случай возможность указать с какого сервера качать, но это скрыто на черный день. Вообще несколько таких сетапов сделали с обращениями к разным серверам, что у нас имеются. Пусть лежат на всякий случай. Одна из проблем — некоторые пользователи любят переименовывать сетап при скачивании. Такие получают сообщение что нельзя переименовывать сетап, мол качайте снова или переименуйте назад. Это редко, но бывает. Никто не жалуется. По логу видим таких, переименовывают и снова запускают, с этим нет проблем.
П.С. Антивирусы не ругаются. Лучше в данном случае использовать 7Zip а не Zip.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
я совмещаю — в сетапе лежит основной функционал, а дополнения скачиваются во время установки
все штатными средствами Innosetup
Здравствуйте, Александр Широков, Вы писали:
АШ>Здравствуйте, _synapse_, Вы писали:
__>>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>>Беглым поиском поискал можно реализовать скриптами к inno-setup.
АШ>Да, используем. Скачивание zip и распаковка на inno-setup делается довольно просто. Начать можно отсюда: https://jrsoftware.org/ishelp/index.php?topic=isxfunc_createdownloadpage АШ>На stackoverflow есть примеры готового кода.
А как распаковываете zip? стандартными средствами windows или в сетапе свой распаковщик?
Может вы могли бы расшарить код основных функций?
Здравствуйте, _synapse_, Вы писали:
__>А как распаковываете zip? стандартными средствами windows или в сетапе свой распаковщик? __>Может вы могли бы расшарить код основных функций?
Чтобы не было экрана с вопросом "доверяете ли вы этому издателю", а сразу запускался процесс установки делаем так (если это конечно возможно в вашем случае):
const
SHCONTCH_NOPROGRESSBOX = 4;
SHCONTCH_RESPONDYESTOALL = 16;
procedure UnZip(ZipPath, TargetPath: string);
var
Shell: Variant;
ZipFile: Variant;
TargetFolder: Variant;
begin
Shell := CreateOleObject('Shell.Application');
ZipFile := Shell.NameSpace(ZipPath);
if VarIsClear(ZipFile) then
RaiseException(
Format('ZIP file "%s" does not exist or cannot be opened', [ZipPath]));
TargetFolder := Shell.NameSpace(TargetPath);
if VarIsClear(TargetFolder) then
RaiseException(Format('Target path "%s" does not exist', [TargetPath]));
TargetFolder.CopyHere(
ZipFile.Items, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL);
end;
var
DownloadPage: TDownloadWizardPage;
function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean;
begin
if Progress = ProgressMax then
Log(Format('Successfully downloaded file to {tmp}: %s', [FileName]));
Result := True;
end;
procedure InitializeWizard;
begin
DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress);
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = wpReady then begin
DownloadPage.Clear;
DownloadPage.Add('https://www.your-website.com/app.zip', 'app.zip', '');
DownloadPage.Show;
try
try
DownloadPage.Download;
UnZip(ExpandConstant('{tmp}\app.zip'), ExpandConstant('{tmp}'));
Result := True;
except
SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK);
Result := False;
end;
finally
DownloadPage.Hide;
end;
end else
Result := True;
end;
Здравствуйте, autopsist, Вы писали:
A>Сетап подписан, исполняемые файлы самой программы не подписаны.
Вы ж наверняка понимаете, что это сугубо ситуативное решение. Никто не гарантирует, что завтра политика проверки не изменится. Как только накопится заметное количество вредоносного софта, распространяемого по такой схеме (а изрядное количество таких инсталляторов наверняка можно приспособить для установки левых исполняемых файлов), так краник и перекроют.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вы ж наверняка понимаете, что это сугубо ситуативное решение. Никто не гарантирует, что завтра политика проверки не изменится. Как только накопится заметное количество вредоносного софта, распространяемого по такой схеме (а изрядное количество таких инсталляторов наверняка можно приспособить для установки левых исполняемых файлов), так краник и перекроют.
Подписывать конечно стоит все, но web-installer это просто удобно само по себе. Возможность на какое-то время отложить покупку сертификата это тоже плюс, сейчас очень актуально.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, autopsist, Вы писали:
A>>Сетап подписан, исполняемые файлы самой программы не подписаны.
ЕМ>Вы ж наверняка понимаете, что это сугубо ситуативное решение. Никто не гарантирует, что завтра политика проверки не изменится.
Конечно, но пока — три года, полет нормальный. Если что — будем решать проблемы по мере их поступдения.
ЕМ>Как только накопится заметное количество вредоносного софта, распространяемого по такой схеме (а изрядное количество таких инсталляторов наверняка можно приспособить для установки левых исполняемых файлов), так краник и перекроют.
PO>Веб-инсталлятор скачивает (с красивым прогрессом) основной неподписанный инсталлятор, который запускается и все устанавливает.
А где красивый прогресс взяли, не поделитесь?
Здравствуйте, _synapse_, Вы писали:
__>А как распаковываете zip? стандартными средствами windows или в сетапе свой распаковщик? __>Может вы могли бы расшарить код основных функций?
Здравствуйте, Евгений Музыченко, Вы писали:
A>>Сетап подписан, исполняемые файлы самой программы не подписаны.
ЕМ>Вы ж наверняка понимаете, что это сугубо ситуативное решение. Никто не гарантирует, что завтра политика проверки не изменится.
Странно, что это вообще работает — почему виндовый антивирус не возбуждается при CreateProcess неподписанного бинаря?
Здравствуйте, flаt, Вы писали:
F>Странно, что это вообще работает — почему виндовый антивирус не возбуждается при CreateProcess неподписанного бинаря?
Вот и мне интересно. Видать, в винде до сих пор работают какие-то политики в районе Trusted Zones, и подписи пристально проверяются только у файлов, пришедших из "недовереных" источников. Профанация все это.
Здравствуйте, _synapse_, Вы писали:
__>Хотел бы поинтересоваться тут чтобы не изобретать костыли. __>Использует ли кто-нибудь веб инсталлеры, чтобы установшик сам скачивал и распаковывал файлы с сервера. __>Беглым поиском поискал можно реализовать скриптами к inno-setup.
Вставлю свои 5 копеек —
жаба душит платить на КС серты + хочу сетап "как у хрома"
(уже закончил разработку, но ещё не в продакшене, предварительно всё ок)
всё "дот нет" С#
1. подписаный "сетап" (с манифестом запуска под админом) (по сути аппка консольная, с зеро интерфесом), при запусте — интерфеса нет — см. следующий пункт.
2. сетап стучится на сайт, получает с него ссылку на лейтест cloud-flare cdn последней версии — "версия в папке" на aws s3 (бекенд к КФ)
3. с cdn-а скачивается dll (SCL — setup control library) неподписанная, в которой находится логика установки конкретной версии
и собственно форма с прогресс баром.
4. 2-3 секунды SCL качает все "кишки программы в 7зип архивах" показывая прогресс бар юзеру, всё распаковывает в програм файлз и запускает основную аппку.
5. лончер программы (подписан) — выполняет грязный хакерский трюк загружает exe assembly from memory и ранит его. (по сути лончер пустышка)
6. если добавить в название сетапа debug — то вместо релиза с обфускатором будет выкачана дебаг версия с пдб файлами и без обфускатора (для отладки багов)
итого —
+ версионированы все версии
+ сетап контроллится с срв — "поинтер на лейтест" (старый сетап по умолчанию всегда поставит последнюю версию)
+ замена SCL либы даёт возможность без переподписывания сетапа поменять логику развёртывание\удаления любой версии.
+ лончер вечноподписан
+ сетапер вечноподписан
+ "слик" установка аппки — минимум интеракции от юзера, максимум скорости от клика, до запуска (я отказался от сф7, и 9! экранов визарда — установщика)
+ дебаг \ релиз + обфускатор
сборка + CI\CD автоматизированы.
из технически непростого — сетап качает длл для распаковки 7зипов и сейвит её в темп, дальше подключает рефлекшеном — так как
по другому ёё надо дропать в папку к сетаперу, что меня как юзера дико бы напрягло. И второй момент, по хорошему, мейн аппку надо реализовать как длл
и загружать рефлекшеном динамичски, но нет столько сил (переписывать всю программу), поэтому в разы проще exe assembly from memory
Поэтому 2 крякерских решения — это exe assembly from memory + dll reflection load
Почему это работает — потому, что ОСь "доверяет" подписаному исполняемому сетапу и лончеру.
Думаю, можно изи зашить внутренюю чифровую подпись в сетапер, чтоб он ранил только самоподписанную SCL, — таким образом нельзя будет
запустить любую другую либу, с помощью подписаных модулей. Вирусятники — лесом.
--
С наилучшими пожеланиеми,
Пересичный шароварщик из незалежной.
Здравствуйте, flаt, Вы писали:
F>Здравствуйте, Евгений Музыченко, Вы писали:
A>>>Сетап подписан, исполняемые файлы самой программы не подписаны.
ЕМ>>Вы ж наверняка понимаете, что это сугубо ситуативное решение. Никто не гарантирует, что завтра политика проверки не изменится.
F>Странно, что это вообще работает — почему виндовый антивирус не возбуждается при CreateProcess неподписанного бинаря?
При чём она трекает не только "голый ексе", а и "зип архивы с ексе". Рар был брейнером — не трекало. (если скачать рар и оттуда выковырять ексе, то винда
его считает "относительно родным" для оси — без MOTW).
Это всё очень сильно различается в отношении групповых политик заданых на конкретной машине — и настроек УАК.
--
С наилучшими пожеланиеми,
Пересичный шароварщик из незалежной.
Здравствуйте, Qt-Coder, Вы писали:
QC>Здравствуйте, _synapse_, Вы писали:
__>>А как распаковываете zip? стандартными средствами windows или в сетапе свой распаковщик? __>>Может вы могли бы расшарить код основных функций?
QC>7za.exe кладется в основной подписанный дистр.
По-моему этого лучше не делать — так как деплой в темп ексешника сагрит большую половину АВ.
Надеемся на "диджитал сигнатюр", да, но как товаришЪ Касперский заявлял — "мы сами будем решать что вирус, а что не вирус" (с)
п.с. я проголосовал за длл
--
С наилучшими пожеланиеми,
Пересичный шароварщик из незалежной.