protected override ActionResult DoWork()
        {
            // Заполняем ComboBox серверами.
              WixComboItem[] servers = (from s in Session.GetService<ISessionServerInfoExtension>().GetServerInfos()
                                select new WixComboItem(s.Name, s.Name)).ToArray();
              WixComboBox combo = new WixComboBox(Session, sessionProp.ControlProperty);
              combo.ClearItems();
              if (servers.Length > 0)
              {
            combo.AddItems(servers);
            combo.SelectedValue = servers[0].Value;
              }
              else
            combo.SelectedValue = "";

              return ActionResult.Success;
        }
        private void Deleting()
        {
            string server;
              string database;
              // Получаем имена сервера и базы данных.
              NameViewConverter.ParseNameView(sessionProp.SelectedDatabase, out server, out database);

              // Получаем информацию об этой базе.
              DatabaseInfo info = Session.GetService<ISessionDatabaseInfoExtension>().GetDatabaseInfos().FirstOrDefault(v => v.Server == server && v.Name == database);

              // Если база данных существовала (т.е. не добавлена пользователем),
              // то запомним ее в специальном списке существующих баз данных (в элементе управления).
              // Так как это структура, то если ничего не будет найдено в запросе LINQ, поле Server не будет проинициализирован.
              if (!string.IsNullOrEmpty(info.Server) && !info.IsNew)
              {
            // Для вывода элемента будем использовать имя, версию и признак поддержки.
            // Для значения сохраним, в виде строки, сериализованный DatabaseInfo в CustomActionData.
            WixComboBox combo = new WixComboBox(Session, sessionProp.ExistControlProperty);
            // Здесь аккуратнее, так как ComboBox не отображает некоторые символы.
            string displayedName = sessionProp.SelectedDatabase + " " + info.Version + (info.IsRequiringUpdate ? "" : " (не поддерживается)");
            CustomActionData customActionData = new CustomActionData();
            customActionData.AddObject<DatabaseInfo>(typeof(DatabaseInfo).ToString(), info);
            combo.AddItem(new WixComboItem(displayedName, customActionData.ToString()));

            // Значение по умолчанию.
            combo.SelectedValue = combo.Items.Count > 0 ? combo.Items[0].Value : "";
              }

              Session.GetService<ISessionDatabaseInfoExtension>().DeleteDatabaseInfo(server, database);
        }
        private void AddingExisting()
        {
            // Для существующего добавления, информацию по базе данных получаем из списка существующих баз.
              WixComboBox combo = new WixComboBox(Session, sessionProp.ExistControlProperty);
              string value = combo.SelectedValue;
              if (value != "")
              {
            CustomActionData customActionData = new CustomActionData(value);
            DatabaseInfo info = customActionData.GetObject<DatabaseInfo>(typeof(DatabaseInfo).ToString());
            // Затем данную позицию удаляем из списка сущестующих баз.
            combo.RemoveItem(combo.SelectedValue);

            // Значение по умолчанию.
            combo.SelectedValue = combo.Items.Count > 0 ? combo.Items[0].Value : "";

            // Полученную информацию добавляем в сессию.
            Session.GetService<ISessionDatabaseInfoExtension>().AddDatabaseInfo(info);
              }
        }