Вверх ↑
Главный модератор
Ответов: 2997
Рейтинг: 395
#1: 2020-01-19 15:00:27 ЛС | профиль | цитата
    Демо-версия элемента

  На основе класса провайдера лицензий LicFileLicenseProvider можно реализовать простой режим демо-версии элемента. Для этого нам нужно создать класс провайдера лицензий, который будет наследником LicFileLicenseProvider и перекроет метод GetLicense(). Добавим в ресурсы сборки файл с именем wfDemoLicenseProvider.cs и следующим содержанием:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace ElementVirtual
{
internal class DemoLicenseProvider : LicFileLicenseProvider
{
public override License GetLicense(LicenseContext context, Type type, object instance, bool allowExceptions)
{
string text = "You are using demo version of the Example element.\n"
+ "To get full version please visit:\n\nhttp://hiasm.ddns.net/hiasm.net/license.html";
MessageBox.Show(text, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return new DemoLicense("granted");
}
}
internal class DemoLicense : License
{
private string m_LicenseKey;
public override string LicenseKey { get { return m_LicenseKey; } }
public DemoLicense(string license)
{
m_LicenseKey = license;
}
public override void Dispose() { }
}
}
  Установим его свойство Build Action в значение Compile:

  Заменим в атрибуте LicenseProvider провайдера лицензий LicFileLicenseProvider нашим провайдером DemoLicenseProvider:
[LicenseProvider(typeof(DemoLicenseProvider))]
public class Example : ElementClass
{
...
}
   И перенесём вызов проверки правильности лицензии из конструктора элемента в метод подготовки элемента к запуску, который вызывается только при запуске проекта Шаблоны (Templates):
public override void prepareForRun(ref Element parent)
{
...
License license = LicenseManager.Validate(this.GetType(), this);
}
  Давайте посмотрим, что изменится в поведении нашего элемента после изменений:
Demo


  Теперь, вне зависимости от наличия или отсутствия файла лицензии, наша схема проекта Шаблоны (Templates) открывается, но при запуске схемы на выполнение отображается окно с информацией о демо-режиме данного элемента.

  Теперь сделаем демо-режим элемента для проекта Windows Forms. Для этого внесём необходимые изменения в скрипт RTCG.NET файла wfExample.cs:
public class Example : ElementClass
{
public override bool init(object entry)
{
Debug.WriteLine("{0}.init()".fString(this.codename));
sys.add_use("System.ComponentModel");
sys.add_use("ElementVirtual");
sys.useClass("DemoLicenseProvider");
string license = "[LicenseProvider(typeof(DemoLicenseProvider))]";
if (!sys.blk_class_attr.astext().Contains(license))
{
sys.blk_class_attr.println(license);
sys.blk_init.println("License license = LicenseManager.Validate(this.GetType(), this);");
}
...
  В скрипте мы подключаем необходимые пространства имён, добавляем к проекту приложения класс провайдера лицензий DemoLicenseProvider, устанавливаем атрибут LicenseProvider для главной формы приложения и вставляем код проверки лицензии в конструкторе главной формы. Чтобы избежать дублирования кода проверки лицензии при наличии в схеме более одного элемента Example в скрипте проверяется блок атрибутов класса на присутствие в нём кода с установкой атрибута LicenseProvider.

  Проверим демо-режим элемента в проекте Windows Forms:
Demo


  Можете скачать полный код проекта элемента: MyElementCore.zip
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Редактировалось 3 раз(а), последний 2020-01-19 21:05:58