Инсталлятор ASU.exe предназначен для исполнения обновлений АвтоПарк как в открытом, так и в запакованном виде.
Обновление в открытом виде - это просто набор файлов; часть из них имеет специальное значение, о чем будет сказано ниже. Обновление в запакованном виде - это самораспаковывающийся архив, подготовленный при помощи WinZip Self-Extractor, снабженный цифровой подписью и имеющий расширение ".ASU". Расширение ".ASU" регистрируется сетевым инсталлятором АвтоПарк и считается "безопасным вложением", при открытии файлов с таким расширением по умолчанию запускается ASU.exe c ключом -RunAs.
Запакованное обновление выполняется следующим образом. По открытию ASU-файла запускается установленный у клиента ASU.exe c ключом -RunAs. Он проверяет цифровую подпись как файла обновления, так и собственного исполняемого файла ASU.exe, а затем позволяет выбрать, от имени какого пользователя выполнить обновление. Далее от имени выбранного пользователя запускается автоэкстрактор самораспаковывающегося архива, который извлекает исходные файлы обновления во временную папку в профиле пользователя и вновь запускает ASU.exe - на сей раз для выполнения распакованного обновления.
Цифровая подпись запакованного обновления играет двойную роль.
Начиная с версии 1.18 перед выполнением обновления от имени другого пользователя под Windows Vista и выше инсталлятор обновлений проверяет, не находится ли ASU-файл обновления в профиле текущего пользователя. Если ASU-файл находится в профиле, инсталлятор предложит скопировать его в папку "$(ReceiveRoot)\" (см. ниже) и выполнить обновление на копии, поскольку другой пользователь может не иметь прав чтения в профиле текущего пользователя.
Начиная с версии 1.21 под Windows Vista и выше инсталлятор обновлений проверяет, не находится ли ASU-файл обновления в кэше защищенного режима Internet Explorer (так будет, если обновление открывается из браузера). Запускать автоэкстрактор непосредственно из кэша защищенного режима IE нельзя, иначе процесс будет создан с низким уровнем доступа, т.е. без прав записи. Поэтому когда ASU-файл находится в кэше защищенного режима IE, инсталлятор обновлений копирует его в папку $(ReceiveRoot) и запускает оттуда.
ASU.exe {<Ключи>}
Допустимы ключи:
Коды завершения ASU.exe:
Некоторые файлы обновления являются специальными, инсталлятор обновлений ASU.exe знает их имена, формат, использует их предопределенным образом при выполнении обновления.
Представляет собой обязательный текстовый файл в кодировке OEM 866. В инструкции должно быть указано следующее.
Поскольку инструкция дублируется в тексте e-mail сообщения, ASU.exe никак не использует этот файл и не проверяет его наличие. Поведение может быть изменено.
Необязательный текстовый файл в кодировке OEM 866. Если среди исходных файлов обновления присутствует файл Warning.txt, перед выполнением скрипта обновления пользователь получит сообщение с текстом из Warning.txt и кнопками "OK" и "Отмена". Обычно таким образом дублируется некий особо важный пункт инструкции, который необходимо выполнить перед запуском обновления.
Представляет собой INI-файл (в кодировке ANSI 1251, как и все INI-файлы). Для инсталлятора обновлений имеют значение только перечисленные ниже параметры из секции "Autopark Software Upgrade".
Скрипт обновления AsuScrpt.aus - текстовый файл в кодировке OEM 866; каждая команда скрипта располагается на отдельной строке. Допускаются пустые строки. Строки, начинающиеся со слова Rem, считаются комментариями и игнорируются.
Команды скрипта имеют фиксированное количество параметров. Параметры отделяются от команды и друг от друга пробелами. Текст параметра можно заключить в кавычки. Если текст параметра содержит пробелы, кавычки обязательны. Имена команд и макросов распознаются регистронезависимо. В тексте параметров допускается применение предопределенных макросов, например:
UpdFile $(ClientProjectRoot)\ASL\TEST.ASL TEST.ASL
В процессе исполнения обновления текущей является папка исходных файлов обновления.
Форматы команд и полный список макросов приведены ниже.
Форматы команд
Команда | Параметры команды | ||
---|---|---|---|
Имя | Описание | Мнемоника | Описание |
Добавить новый файл | DestinationFilePath | Путь к целевому файлу | |
SourceFilePath | Путь к исходному файлу | ||
Обновить существующий файл | DestinationFilePath | Путь к целевому файлу | |
SourceFilePath | Путь к исходному файлу | ||
Удалить существующий файл | DestinationFilePath | Путь к целевому файлу | |
Удалить файл. Если не существует, вопросов не задавать. Команда появилась в ASU.exe версии 1.21 | DestinationFilePath | Путь к целевому файлу | |
Прописать параметр в INI-файл | DestinationFilePath | Путь к INI-файлу | |
Section | Имя секции INI-файла. Не должно содержать кириллицы | ||
ParamName | Имя параметра INI-файла. Не должно содержать кириллицы | ||
ParamValue | Значение параметра INI-файла | ||
ValueCodePage | Кодовая страница значений параметров INI-файла: "1251" или "866". | ||
Удалить параметр в INI-файле | DestinationFilePath | Путь к INI-файлу | |
Section | Секция INI-файла | ||
ParamName | Параметр INI-файла | ||
Выполнить перестройку структуры БД по образцу. Команда появилась в ASU.exe версии 1.14. Обязана быть первой командой в скрипте. Требует версии клиента ASB не ниже 14.43.5 | SourceFilePath | Путь к файлу образца |
Имя целевого и исходного файлов в командах AddFile и UpdFile не обязано совпадать и этим фактом можно пользоваться. Известно, например, что автоэкстрактор WinZipSE не позволяет использовать кириллические имена файлов архива, для таких файлов можно выполнить транслитерацию.
Имя макроса | Описание | Источник значения |
---|---|---|
Имя канала (2 символа) | Параметр _CHN_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Имя проекта (до 256 символов). Макрос определен в том числе и для обновлений, отправленных по широковещательному каналу, для которых параметр _CLI_ обычно не задается | Параметр _CLI_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Номер (5 десятичных цифр) предыдущего автоматического обновления в канале | Параметр _PRV_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Номер (5 десятичных цифр) данного автоматического обновления в канале | Параметр _CUR_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Номер проекта для поддержки множественных проектов: "" - у всех проектов общие программные файлы, "0" - единственный проект, "1" - основной проект, "2" - второй (дополнительный) проект, "3" - третий (дополнительный) проект и т.д. до 10 проектов |
Параметр _PRJ_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Значение "1" определяет данное обновление как обновление ASB | Параметр _ASB_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
До версии 1.16 значение "1" включало сравнение DBP и DBD перед выполнением обновления. Начиная с версии 1.16 игнорируется, сравнение не выполняется. | Параметр _RBC_ секции "Autopark Software Upgrade" в регистрационном файле обновления reg_card.ini | |
Корневая папка клиентской части проекта. Значение зависит от Может употребляться с явным префиксом: $(Project2.ClientProjectRoot), $(Project3.ClientProjectRoot) и т.д. |
|
|
Корневая папка серверной части проекта. Значение зависит от Может употребляться с явным префиксом: $(Project2.ServerProjectRoot), $(Project3.ServerProjectRoot) и т.д. Используется только для выполнения Rebuild в "домашнем" режиме |
|
|
Корневая папка клиентской части ASB. Используется только в обновлениях ASB | Параметр ClientASBRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта | |
Корневая папка серверной части ASB. Используется только в обновлениях ASB | Параметр ServerASBRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта | |
Корневая папка сервера приложений ASB. Поддерживается, начиная с версии 1.20. Используется только в обновлениях ASB | Параметр ApSrvASBRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта | |
Папка для распаковки и хранения файлов обновления | Параметр ReceiveRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта | |
Папка документации по системе АвтоПарк. После перемещения документации на сайт перестала использоваться | Параметр APDocsRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта | |
$(SaveRoot) | Папка для сохранения прежних версий обновляемых файлов | Параметр SaveRoot секции "ASB Special Folders" RED-файла клиентской части основного проекта. По умолчанию имеет значение "$(ClientProjectRoot)\SAVE" |
Папка Windows (обычно c:\windows) | Параметр операционной системы | |
Системная папка Windows (c:\windows\system32 для 2000/XP/2003/Vista/2008/7) | Параметр операционной системы | |
Папка для временных файлов в профиле пользователя | Параметр операционной системы | |
Двойная кавычка | Константа | |
Доллар и левая круглая скобка: "$(" | Константа | |
Уникальный идентификатор текущей нити (8 шестнадцатиричных цифр) | Параметр операционной системы | |
Уникальный идентификатор текущего процесса (8 шестнадцатиричных цифр) | Параметр операционной системы |
Как видно из таблицы, от номера проекта $(_PRJ_) зависят значения только двух папок: $(ClientProjectRoot) и $(ServerProjectRoot). Соответственно, только эти макросы и могут употребляться с префиксом проекта. Все остальные путевые макросы определяются из RED-файла основного проекта.
"Reg_card.ini"
."$(MainProject.ClientProjectRoot)\Def\Upgrade.log"
.
Защита от параллельного выполнения обновлений осуществляется на режиме
открытия файла протокола."
$(ClientASBRoot)\ASU.EXE
"
."$(ClientASBRoot)\ASU.EXE".
"$(MainProject.ClientProjectRoot)\Def\$(_CHN_)_$(_CUR_).upd"
.
Соответственно, каждое обновление перед
выполнением проверяет наличие файла-маркера предыдущего обновления "$(MainProject.ClientProjectRoot)\Def\$(_CHN_)_$(_PRV_).upd"
.
Начиная с версии 1.21, если маркер предыдущего обновления отсутствует,
разыскивается существующий маркер. Если номер существующего маркера больше
номера текущего обновления, предполагается, что текущее обновление уже
выполнено."$(_CHN_)_$(_CUR_).upd"
."$(ReceiveRoot)
\
$(_CHN_)_$(_CUR_)\"
.
"$(SaveRoot)\
$(_CHN_)_$(_CUR_)
"
.
Если эта папка не пуста, принимается подпапка с именем, сформированным из текущего времени:
"$(SaveRoot)\
$(_CHN_)_$(_CUR_)
\YYNNDDHH.MMS"
."[
уникальный_номер
]"
,
например "Autoexec[1].asl"
вместо "Autoexec.asl"
. Разумеется,
в протокол заносится фактически использованное имя."Rebuild patternDbdFile"
фактически выполняется команда "UpdFile
$(ServerProjectRoot)\SDEF\$(_CLI_).dbd
patternDbdFile".
"$(MainProject.ClientProjectRoot)\Def"
помещается файл-маркер "$(_CHN_)_$(_CUR_).
upd"
.
После выполнения данного действия обновление считается успешно выполненным. Затем удаляется файл-маркер предыдущего обновления "$(_CHN_)_$(_PRV_).
upd"
.