Stalker_AleX333
25-09-2017, 23:40
alpap, посидел, подумал. Выходит как-то так:
С каждой версии продукта, будет устанавливаться файл без расширения (упс, не выйдет - последняя цифра номера версии будет считаться расширением файла) с расширением .id, носящий имя: Silver Raven mods pack ver.x.x.xx (будет только такой формат).
Он будет находиться в %USERPROFILE%\AppData\Local\Skyrim Special Edition и его имя строго задано (при обновлении продукта, обновляется и bat-ник, проверяющий его). Но, если пользователь накосячит с установкой обновлений или поставит полную новую\старую версию поверх уже существующей (что недопустимо в моем случае), в папке окажется несколько таких файлов. Задача - найти таковые и предупредить пользователя о возможных последствиях, путем принудительного вывода соответствующего сообщения при запуске bat-ника. Ну а если вдруг файл-идентификатор не был найден вообще то тут сам бог велел подозревать возможное наличие проблем.
Получается, полный алгоритм должен быть таким:
После установки продукта, запускается наш bat-ник и проверяет наличие файла-идентификатора по маске Silver Raven mods pack ver.x.x.xx.id в %USERPROFILE%\AppData\Local\Skyrim Special Edition, совпадающего по названию с тем что уже задан. Если такой файл уже есть и номер версии совпадает - идем дальше. Но если что-то не так...
1. Найден только устаревший id-файл - текст с ошибкой №1 (с описанием найденной старой версии. пример писал выше. при считывании номера, смотрим только символы после ver.)
2. Актуальный id-файл и устаревший id-файл - текст с ошибкой №2 (тут бы перечислить все найденные номера версий. прим. 1.2.3, 1.2.6, и т.д.)
3. Не нашли вообще ничего - текст с ошибкой №3
:: Поиск файла-идентификатора сборки
set "ModsPackVerID=Silver Raven mods pack ver.1.2.7.id"
set "ModsPackVerIDOld=Silver Raven mods pack ver.x.x.x.id" :: - ?
:: %VerID% и %VerIDOld% - ?
if exist "%ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружен устаревший идентификатор сборки версии %VerID%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
if exist "%ModsPackVerID% %ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружено несколько файлов-идентификаторов сборки версий %VerID%, %VerIDOld%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
if not exist "%ModsPackVerID%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Не обнаружено файла-идентификатора версии сборки. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
Надеюсь, описал все нюансы. Если что - спрашивайте. Сам уже несколько раз перерабатывал варианты, чтобы пользователь не грохнул случайно файл-идентификатор. Пока это лучшее, что мне пришло в голову. Главное, чтобы bat-ник, который будет копировать файл-идентификатор (по окончании установки) успел отработать до того, как автоматически запустится основной. Я использую самораспаковывающиеся sfx архивы.
С каждой версии продукта, будет устанавливаться файл без расширения (упс, не выйдет - последняя цифра номера версии будет считаться расширением файла) с расширением .id, носящий имя: Silver Raven mods pack ver.x.x.xx (будет только такой формат).
Он будет находиться в %USERPROFILE%\AppData\Local\Skyrim Special Edition и его имя строго задано (при обновлении продукта, обновляется и bat-ник, проверяющий его). Но, если пользователь накосячит с установкой обновлений или поставит полную новую\старую версию поверх уже существующей (что недопустимо в моем случае), в папке окажется несколько таких файлов. Задача - найти таковые и предупредить пользователя о возможных последствиях, путем принудительного вывода соответствующего сообщения при запуске bat-ника. Ну а если вдруг файл-идентификатор не был найден вообще то тут сам бог велел подозревать возможное наличие проблем.
Получается, полный алгоритм должен быть таким:
После установки продукта, запускается наш bat-ник и проверяет наличие файла-идентификатора по маске Silver Raven mods pack ver.x.x.xx.id в %USERPROFILE%\AppData\Local\Skyrim Special Edition, совпадающего по названию с тем что уже задан. Если такой файл уже есть и номер версии совпадает - идем дальше. Но если что-то не так...
1. Найден только устаревший id-файл - текст с ошибкой №1 (с описанием найденной старой версии. пример писал выше. при считывании номера, смотрим только символы после ver.)
2. Актуальный id-файл и устаревший id-файл - текст с ошибкой №2 (тут бы перечислить все найденные номера версий. прим. 1.2.3, 1.2.6, и т.д.)
3. Не нашли вообще ничего - текст с ошибкой №3
:: Поиск файла-идентификатора сборки
set "ModsPackVerID=Silver Raven mods pack ver.1.2.7.id"
set "ModsPackVerIDOld=Silver Raven mods pack ver.x.x.x.id" :: - ?
:: %VerID% и %VerIDOld% - ?
if exist "%ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружен устаревший идентификатор сборки версии %VerID%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
if exist "%ModsPackVerID% %ModsPackVerIDOld%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Обнаружено несколько файлов-идентификаторов сборки версий %VerID%, %VerIDOld%. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
if not exist "%ModsPackVerID%" ( color 0c
echo.
echo ╔═══════════════════════════════════════════════════════════╗
echo ║ Панель управления для Silver Raven mods pack версии 1.2.7 ║
echo ╚═══════════════════════════════════════════════════════════╝
echo.
echo.
echo *ВНИМАНИЕ! Не обнаружено файла-идентификатора версии сборки. Вероятно, установка или обновление до данной версии было произведено некорректно. Рекомендуется произвести полное удаление, с ручной очисткой оставшихся файлов и установить сборку заново.
echo.
echo.
pause
)
Надеюсь, описал все нюансы. Если что - спрашивайте. Сам уже несколько раз перерабатывал варианты, чтобы пользователь не грохнул случайно файл-идентификатор. Пока это лучшее, что мне пришло в голову. Главное, чтобы bat-ник, который будет копировать файл-идентификатор (по окончании установки) успел отработать до того, как автоматически запустится основной. Я использую самораспаковывающиеся sfx архивы.