Лучший подход к отображению диалогового окна активации лицензииC#

Место общения программистов C#
Ответить
Anonymous
 Лучший подход к отображению диалогового окна активации лицензии

Сообщение Anonymous »

У меня есть текстовый редактор, сейчас реализую поддержку лицензирования. Лицензии управляются на стороннем сервере (SAAS).
Желаемый процесс
  • Пользователь открывает редактор.
  • Если у них нет лицензии (при первом открытии):

    Появится диалоговое окно активации, сообщающее, что у них нет лицензии и им нужна для активации. У него есть три варианта: онлайн-активация, автономная активация и запрос 14-дневной пробной версии. Давайте сейчас сосредоточимся на пробной версии, так как она самая простая.
  • Когда они выбирают «Запросить пробную версию» и нажимают «Далее», запускается запрос к API лицензирования и отображается диалоговое окно «Успешно» с их серийным номером ( 0 для пробной версии), лицензионный ключ и кнопку «Начать работу» (ОК).
  • При нажатии кнопки «Начать работу» отображается основная форма.
    < /ul>
  • Если у них уже есть лицензия и пробная версия, я бы хотел, чтобы раз в день появлялось всплывающее сообщение, в котором говорилось что-то вроде: «У вас осталось 5 дней в вашем аккаунте». пробную версию, пожалуйста, рассмотрите возможность обновления», возможно, сразу же нажав кнопку «Обновить». После закрытия этого сообщения откроется основная форма.
  • Если у пользователя есть полностью активированная лицензия, откроется основная форма.
В главной форме также может отображаться диалоговое окно, позволяющее выбрать тип создаваемого документа. Это происходит, если соответствующий параметр включен (включен по умолчанию).
Что я пробовал
условное приложение.Run()
Первое, что пришло мне на ум, это вызов Application.Run() внутри условия if: если лицензии нет, запустить с диалогом активации, иначе показать основную форму . Отрывок из program.cs:

Код: Выделить всё

    var license = TryFetchCurrentLicense();

if (license is null) {
Log.Warning("License not found.");

Application.Run(new ActivationDialog());
}
Application.Run(new MainWindow());
И в моей форме ActivationResultDialog у меня есть:

Код: Выделить всё

    private void OkButton_Click(object sender, EventArgs e) {
var mainWindow = new MainWindow();
mainWindow.Show();
this.Close();
}
Это привело к интересному эффекту: основная форма была показана дважды, т. е. после нажатия кнопки ОК в диалоге ActivationResultDialog я получил «Выбрать тип документа», а затем, при его отправке, я получил это в другой раз. Диалоговое окно выбора типа документа открывается при загрузке основной формы:

Код: Выделить всё

private void MainWindow_Load(object sender, EventArgs e) {
if (Config.General.AfterStart == ActionAfterStart.SelectNewDocumentType) {
ShowSelectForm();
}
}
Метод ShowSelectForm() выполняет несколько функций, самая важная из которых — открытие диалогового окна и последующее создание нового дочернего окна MDI.
< h3>При загрузке или при отображении основной формы
Если я перенесу логику проверки лицензии в событие MainWindow_Load(), это приведет к странным проблемам, таким как отсутствие создания МДИ ребенок. Однако если я перенесу логику ShowSelectForm() в событие MainWindow_Shown(), я снова получу двойное главное окно.
Вопрос
Какой подход будет лучшим? Я чувствую, что что-то не так с вызовом MainWindow.Show() в конце потока. Какая альтернатива лучше и разумнее?

Я также рассматривал возможность выделения всей логики лицензии в отдельный исполняемый файл, например activator.exe, а затем использование именованных каналов для передачи данных. Однако как мне запретить пользователю видеть и использовать основную форму, пока он танцует танец активации? Кажется, мне здесь не хватает понимания.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-dialog
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»