Реализация стандартных интерфейсов
Расширение Консоли настройки, разрабатываемое для Модуля учета сетевых устройств, должно регистрировать клинский пакет установки, устанавливать новую библиотеку карточек, а также загружать в базу данных Docsvision заранее подготовленные данные карточек и справочников. Для этого в классе SnapIn должно быть реализовано несколько интерфейсов.
Реализация интерфейса ISnapIn
-
LibraryID
— идентификатор библиотеки карточек, с которой данное расширение ассоциировано.LibraryID
требуется для регистрации пакетов установки, добавления библиотеки карточек в базу данных, удаления решения, а также для некоторых других сценариев работы Консоли настройки.public string LibraryID { get { return "{F729F178-15DA-4BDE-82B8-DD0B2F0C0BC6}"; } }
-
Name
— название модуля. Используется в некоторых сервисных функциях, например: при отображении названия расширения в списке зарегистрированных расширений Консоли настройки.public string Name { get { return "Консоль управления модулем Проверка сети"; } }
-
Метод Initialize(IEnvironment)
— позволяет получить переменные контекста работы Консоли настройки, которые предоставляют доступ к сервису регистрации пакетов установки клиентской части.public void Initialize(IEnvironment environment) { _environment = environment; }
-
Метод
QueryInterface(SnapInInterfacesEnum)
— возвращает пользовательский интерфейс, если он предусмотрен, для различных режимов работы Консоли настройки. Подробнее см. в разделе Модуль расширения Консоли настройки.public object QueryInterface(SnapInInterfacesEnum itf) { object result = null; switch (itf) { case SnapInInterfacesEnum.CONFIGURATOR: case SnapInInterfacesEnum.UNINSTALL_SNAP_IN: case SnapInInterfacesEnum.DB_INFORMATION: result = this; break; case SnapInInterfacesEnum.CONSOLE_CONTROL: result = new SnapInForm(); (1) break; } return result; }
1 Экземпляр типа, реализующего пользовательский интерфейс.
Реализация интерфейса "IConfigurator"
Данный интерфейс должен быть реализован, если расширение может выполнять первоначальную настройку решения.
Как правило, метод Execute
, при установке расширения вызываемый последним, регистрирует пакеты установки клиентской части, для чего указываются: путь к пакету установки, Идентификатор пакета установки и Код продукта, которые были указаны при разработке библиотеки карточек:
public bool Execute()
{
ILog log = (ILog)_environment.QueryService(EnvironmentServiceEnum.LOG);
ICardLibConfigurator2 cardLibConfig = (ICardLibConfigurator2)_environment.QueryService(EnvironmentServiceEnum.CARD_LIB_CONFIGURATOR); (1)
(2)
cardLibConfig.RegisterPackage(
"E98E531F-D34C-41D6-9BCA-9972F46EB6DF", (3)
"22CE4047-0BA8-4014-9BBE-7D8C43FDE907", (4)
Path.Combine(AssemblyFolder, "NetstatSolutionClient.msi")); (5)
log.WriteMessage("Конфигурирование завершено");
return true; (6)
}
1 | Регистрация клиентского пакета установки. |
2 | Регистрация пакета установки. |
3 | Идентификатор пакета установки. |
4 | Код продукта. |
5 | Абсолютный путь к пакету установки клиентской части. |
6 | Если метод должен сообщить об ошибке, то необходимо вызвать исключение. В обычном случает, метод возвращает true . |
Реализация интерфейса "IDBInformation"
Данный интерфейс добавляет методы, предоставляющие Консоли настройки пути к CardPackage и SqlPackage.
Метод GetCardPackage
должен вернуть абсолютный путь к пакету CardPackage:
public string GetCardPackage()
{
return Path.Combine(AssemblyFolder, "CardPackage\\CardPackage.xml");
}
Метод GetScript(ScriptTypeEnum)
должен вернуть абсолютный путь к пакету SqlPackage, если запрашивается тип ScriptTypeEnum.INSTALL_TABLES
:
public string GetScript(ScriptTypeEnum type)
{
string result = string.Empty;
switch (type)
{
case ScriptTypeEnum.INSTALL_TABLES:
result = Path.Combine(AssemblyFolder, "Database\\NetstatSolutionInstall.xml");
break;
}
return result;
}
Также добавляется переменная ContainsCardLib
, которая определяет наличие у решения собственной библиотеки карточек.
public bool ContainsCardLib
{
get { return true; }
}
Реализация интерфейса IUninstallSnapIn
Данный интерфейс добавляет единственный метод Uninstall(Boolean)
, вызываемый при удалении расширения (и решения в целом).
Метод Uninstall
может, к примеру, удалять библиотеку карточек, а также настройки решения, как в данном случае:
public void Uninstall(bool removeSettings)
{
ILog log = (ILog)_environment.QueryService(EnvironmentServiceEnum.LOG);
ICardLibConfigurator cardLibConfig = (ICardLibConfigurator)_environment.QueryService(EnvironmentServiceEnum.CARD_LIB_CONFIGURATOR);
log.WriteMessage("Запущено удаление");
cardLibConfig.RemoveCardLib(LibraryID); (1)
if (removeSettings) (2)
{
using (RegistryKey key = Common.GetSubKey(Registry.LocalMachine, Common.NetstatSolutionKey))
{
key.DeleteValue(Common.EmailAdminRegName, false);
key.DeleteValue(Common.CheckIsEnabledRegName, false);
key.DeleteValue(Common.LicenseRegName, false);
}
}
log.WriteMessage("Записи реестра удалены");
}
1 | Удаление библиотеки карточек. |
2 | Удаление настроек модуля. |