Что нового?

Вопрос Как сделать возможность взаимодействия другой программы с Установщиком?

zettend

Старожил
Здравствуйте.
Работаю над неким аналогом Стима. Сама платформа пишется на Electron(JS). Добавления статуса "Установлено" сделали при помощи реестра. А вот как избежать окна самого установщика?
Мне грубо говоря надо в фоне запускать установщик и отдавать данные самому приложению. Как такое возможно реализовать? Само приложение отдаёт данные установщику путём ключей(Путь установки и язык). Но как отдавать данные самому приложению?
Вполне может сработать выводить данные типа: "Распаковка: bin/game.exe - 15%. Осталось 20 минут."
Но как это вывести в CMD?
 

Shegorat

Lord of Madness
Администратор
А можно поподробнее? Платформа это только клиент? Где осуществляется хранение файлов? Как реализуется версионность и проверка целостности? Зачем в таком случае использовать установщики? Если можно делать распаковку на стороне клиента?
 

zettend

Старожил
Платформа это только клиент?
Нет. Это сайт, но с бонусом. Поясняю алгоритм работы:
Если человек с сайта:
Скачивается простой Торрент файл. Он содержит обычный репак(как у всех).
Если человек с клиента:
Скачивает Торрент файл, запускает в нём Setup.exe и устанавливает.
Проверяет реестр на наличие игры, если есть, то запускает.
Так-же собирает инфу об кол-ве часов игры.
Есть оверлей с чатом и некоторыми настройками.

Где осуществляется хранение файлов?
До 5'и раздающих хостят сервера. Далее от клиентов трафик ходит, либо от сторонних торрент трекеров(если мы там публикуемся).

Как реализуется версионность и проверка целостности?
Все апдейты идут отдельно, с запаковки релизность не меняется. Грубо говоря установщик всегда имеет v1. Но в самом инсталляторе есть докачка новых файлов(если стоит ключ). Ибо в будущем мы будет обновления делать полностью клиентом, но возможность апдейта у установщика отбирать не будем(издаёмся на сторонних трекерах).
На сервере лежат файлы примерно так:
-GTA V
--Bin
--Updates
---v1
---v2
--Unpacked

Мы в любом случае храним последнюю версию игры распакованной, это позволяет сделать что-то вроде "Проверка файлов", при различие сходств мы их докачиваем.
Проверку делаем по хешам SHA 256.
Папка Bin всегда остаётся неизменной. В реестр добавляем v0, если игра только установлена. Если вышел v1, но у клиента v0, то скачиваем с заменой текущих файлов.

Зачем в таком случае использовать установщики?
Что-бы издаваться на торрент трекерах.

Если можно делать распаковку на стороне клиента?
Бесспорно можно, мы даже об этом думали. Но для нас важно использовать ISDone, который если и получится запустить на электроне, то лишь на Win. А нам важна кросс-платформенность. Если у клиента Linux/macOS мы просто делаем запуск игры через команду Wine. Wine мы докачиваем свой, сконфигурированный под определённую платформу. А на macOS нам вообще пришлось написать приложение-реверс, которая работает как доп. виртуализация для создания вида x64 приложения, если оно x32, ибо macOS выпилили поддержку x32.
 

Shegorat

Lord of Madness
Администратор
Честно говоря, Electron какашка, слишком уж он прожорливый и лагучий. Зато кросс-платформенный, не спорю.

Нуу, учитывая необходимость запуска инсталлятора, то вариантов не слишком много. Разве что хукать окно установщика и мониторить изменение заголовка. Мониторить TLabel не получится, это неоконный объект,а лишь некий интерфейс, который рисует сразу на канву формы.

Вообще сам FA кросс-платформенный, есть бинарники под винду и линукс. При необходимости можно собрать под мак. Хотя играть под вайном то ещё извращение. Так что можно было бы организовать распаковку самим FA плюс инсталл скрипт, примерно как в стиме. По сути двойная работа, репак плюс инсталл скрипт... Зато так было бы правильнее

Далее, стим, в зависимости от системы, подкачивает свой набор бинарников под систему, и эмуляция не требуется, что огромный плюс.

Ещё, сделать нормальную версионность, с патчами при помощи xdelta, и milestone на каждое крупное обновление, чтобы не приходилось кучу патчей накатывать.

И ещё такой каверзный вопросик - а зачем вам это?
 

zettend

Старожил
Shegorat, спасибо вам большое за расширенный ответ.

а зачем вам это?
Идея была давно, я попросту задолбался искать нормальные репаки, где-то нет раздач, где-то ещё какие-то проблемы.
А здесь я вроде как и заработать могу на рекламе, обеспечить людей работе и самому создаю удобство.
А причем здесь кроссплатформенность? Так у меня и ПК на винде, и MacBook. Играть хочется везде, но возиться с Wine не просто. А мощности MacBook хватает на запуск The Divison на средних, причем ещё и через Wine.
Ну и так-же не стоит забывать про Valve Proton(DirectX to Vulcan) и рост популярности среди Linux игроков.

К тому же есть ближайший родственник с сервером и неплохой шиной в Bulletproof стране)
 
Сверху