Желаемый процесс
- Пользователь открывает редактор.
- Если у них нет лицензии (при первом открытии):
Появится диалоговое окно активации, сообщающее, что у них нет лицензии и им нужна для активации. У него есть три варианта: онлайн-активация, автономная активация и запрос 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());
Код: Выделить всё
private void OkButton_Click(object sender, EventArgs e) {
var mainWindow = new MainWindow();
mainWindow.Show();
this.Close();
}
Код: Выделить всё
private void MainWindow_Load(object sender, EventArgs e) {
if (Config.General.AfterStart == ActionAfterStart.SelectNewDocumentType) {
ShowSelectForm();
}
}
< h3>При загрузке или при отображении основной формы
Если я перенесу логику проверки лицензии в событие MainWindow_Load(), это приведет к странным проблемам, таким как отсутствие создания МДИ ребенок. Однако если я перенесу логику ShowSelectForm() в событие MainWindow_Shown(), я снова получу двойное главное окно.
Вопрос
Какой подход будет лучшим? Я чувствую, что что-то не так с вызовом MainWindow.Show() в конце потока. Какая альтернатива лучше и разумнее?
Я также рассматривал возможность выделения всей логики лицензии в отдельный исполняемый файл, например activator.exe, а затем использование именованных каналов для передачи данных. Однако как мне запретить пользователю видеть и использовать основную форму, пока он танцует танец активации? Кажется, мне здесь не хватает понимания.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-dialog
Мобильная версия