В данном блоге хочу рассказать о возможностях, настройках и использовании RunSettings.xml. Данная возможность конфигурирования запуска, регистрации, обновления системы существует давно. Но, практически с каждым релизом новой версии она расширяется. Эта возможность появилась как инструмент "кастомизации" под конкретные задачи клиентов.
Рассмотрим наш RunSettings.xml:

Общие настройки

GlobalSettingsDirectory="" UserSettingsDirectory="" UserAppDataDirectory="" SessionDomainName="" SessionUserName="" SessionPassword=""/>

GlobalSettingsDirectory - путь к глобальному файлу конфигураций GlobalConfigs.xml
UserSettingsDirectory- путь к пользовательскому файлу конфигураций Confings.xml
UserAppDataDirectory- путь к папке Application Data пользователя
SessionDomainName - имя домена
SessionUserName - имя пользователя
SessionPassword - пароль пользователя

Теперь же рассмотрим подробнее что и как.
GlobalSettingsDirectory. Существуют задачи, в которых есть потребность иметь настройки к разным конфигурациям, но в тоже время нужно иметь глобальные конфигурации, которые пользователь удалить не сможет (если только не удалит файл GlobalConfigs.xml). Для создания GlobalConfigs.xml достаточно настроить Configs.xml и скопировать + переименовать его в GlobalConfigs.xml
UserSettingsDirectory. С этим параметром все просто. Если вам нужно хранить файл настройки конфигураций в отличном от %appdata% месте, то этот параметр для вас
UserAppDataDirectory. Этот параметр позволит переопределить для Terrasoft папку %appdata%
Далее идет блок, связан с аутентификацией. Что же это за параметры?
Иногда есть потребность запустить Terrasoft от имени другого пользователя, так вот, эти параметры и устанавливают от кого запускать
SessionDomainName. Если пользователь домменый, то указывается название домена
SessionUserName. Имя пользователя
SessionPassword. Пароль пользователя
Также, существует возможность использовать макросы в написании пути:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\Bin)
{win} - путь к папке Windows (Например: C:\Windows)
{tmp} - путь к папке Temp
{sys} - путь к системной папке Windows (Например: C:\Windows\System32)
{pf} - путь к папке Program Files
{usertscrmappdata} - путь к папке Terrasoft в AppData включая версию (Например: C:\Users\CurrentUser\AppData\Roaming\Terrasoft\3.4.1)
{userappdata} - путь к папке AppData (Например: C:\Users\CurrentUser\AppData)
{userdesktop} - путь к папке рабочего стола
{userstartup} - путь к папке Startup (Например: C:\Users\CurrentUser\Start Menu\Programs\Startup)
{userprofile} - путь к папке профиля пользователя (Например: C:\Users\CurrentUser)
ВАЖНО: Все макросы возвращают путь без последнего "слэша"

Настройки автообновления

Enabled="False" Force="False" Type="Network" Path="" URL="" FTPUserName="" FTPPassword="" MaxIterations="5"/>

Enabled - включено ли автообновление (True/False)
Force- принудительное обновление (True/False)
Type - тип обновления (Network/FTP)
Path - путь к файлам новой версии (используется для типа Network)
URL - путь к файлам новой версии (используется для типа FTP)
FTPUserName - имя пользователя (используется для типа FTP)
FTPPassword - пароль пользователя (используется для типа FTP)
MaxIterations - количество попыток автообновления

По большому счету со всеми параметрами все тривиально, но, хочу добавить касательно параметра Force. Если значение установлено в "False", то при обнаружении новой версии, пользователю отобразится диалоговое сообщение, в котором он может принять решение обновляться ли. В случае, когда значение установлено в "True", никакого сообщения не покажется, а сразу же начнется обновление

Системные настройки

ShowHint="True" HintHidePause="2500" ExternalAuthorizationProgID="" ConnectionKey=""/>

ShowHint- отображать ли хинты
HintHidePause - тайм-аут отображения хинтов
ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm.
Синтаксис:
HRESULT ShowLoginForm(
        [in] IConnector* Connector,
        [in] BSTR FormCaption,
        [in, out] BSTR* UserName,
        [in, out] BSTR* UserPassword,
        [in, out] BSTR* ConfigurationName,
        [out, retval] VARIANT_BOOL* Value);

ConnectionKey - данный ключ был создан для разрешения подключения к базе Oracle, так как в Oracle можно разграничивать приложения, которыми можно подключатся к БД. Этот ключ предоставляет администратор Oracle

Типы регистрации

>
Name="COM" FileName="regsvr32" RegistrationCommand="/s" UnregistrationCommand="/s /u" Default="True"/>
Name="Framework" FileName="%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\regsvcs.exe" UnregistrationCommand="/u"/>
>

Из названия атрибутов все становится ясным. Здесь прописаны файлы, с помощью которых осуществляется регистрация библиотек. Вы можете сами добавлять нужные типы.

Библиотеки для регистрации

FileName="TSClient.exe"/>
FileName="TSObjectLibrary.dll"/>
FileName="TSWindowLibrary.dll"/>

В данной секции находится список библиотек, которые будут перерегистрироваться. Путь к библиотеке указывается относительно папки Bin. Кроме FileName существует следующий набор атрибутов:
Dependence – атрибут, который указывает условие регистрации, т.е. если условие выполняется, то библиотека будет регистрироваться. По умолчанию условие отсутствует. Может принимать значения:
Win32 – если Windows 32-х битный;
Win64 – если Windows 64-х битный;
Office32 – если Office 32-х битный;
Office64 – если Office 64-х битный
Примечание: данный атрибут доступен только с версии 3.4.1
Required – указывает на обязательность наличия файла. Т.е. если Required = "False", и файл отсутствует, то система его пропустит. По умолчанию = True
IsSurrogate – указывает на то, что быблиотека будет/не будет регистрироваться как суррогатная. Этот параметр важен для работы с приложениями разрядности x64. Т.е., если мы указываем, что библиотека не является суррогатной (IsSurrogate = False), то 64-х битное приложение не сможет работать с объектами этой библиотеки. По умолчанию IsSurrogate = "True".
Примечание: данный атрибут доступен только с версии 3.4.1
RegistrationType – указывает каким обрахом будет регистрироваться библиотека в системе. Здесь указывается имя из RegistrationTypes. По умолчанию тип берется тот, в атрибуте которого указано IsDefault = "True"

Файлы для удаления

В этой секции можно указать список файлов, которые нужно удалить при перерегистрации. При этом, если файл существует и является зарегистрированной библиотекой, то произойдет отрегистрация, а после - удаление. Для этой секции справедливы все атрибуты из секции «Библиотеки для регистрации».
Примечание: Библиотека будет удалена независимо от того указан ли Dependence

PreUpdateRun, PostUpdateRun

В данных секциях можно указывать комманды, которые будут выполнены до/после автообновления.

FileName="" Parameters="" Show="False" UseSessionUser="False" Version=""/>

FileName – имя исполняемого файла;
Parameters – параметры для исполняемого файла. В данном атрибуте разрешается использовать макросы, описанные в секции «Общие настройки»;
Show – показывать ли запускаемое приложение (зависит от того, имеет ли такую возможность приложение);
UseSessionUser, Version – данные атрибуты не используются
Приведем пример очистки кэша до обновления. Для этого напишем ClearCache.cmd, который в качестве параметра должен принимать путь к папке кэша:
FileName="{tscrm}\ClearCache.cmd" Parameters="{usertscrmappdata}\Cache" Show="False" UseSessionUser="False" Version=""/>

PreExecuteRun

Секция PreExecuteRun имеет аналогичную логику с PreUpdateRun/PostUpdateRun за исключением того, что эти комманды будут выполняться всегда перед запуском приложения

Нравится

Поделиться

3 комментария

Артем, в статье ошибка:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\), а не к С:\Program Files\Terrasoft\Bin.

"Андрей Каспаревич" написал:ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm

А какой интерфейс должен реализовывать COM объект?
У меня появляется сообщение об ошибке, что интерфейс не поддерживается.

Добрый день. Необходима поддержка IDispatch'а. Объект создается методом CreateOleObject

Показать все комментарии