برنامه های محدود به زمان و قفل سخت افزاری

برنامه های محدود به زمان و قفل سخت افزاری

برنامه های محدود به زمان و قفل سخت افزاری
با نوشتن چند خط کد، می توانید برنامه خود را پس از یک تاریخ تعیین شده منقضی کنید و برنامه را روی سخت افزار خاصی قفل کنید.
نمونه فایل MPH مورد استفاده در این بخش در گالری برنامه در https://www.comsol.com/model/70151 موجود است.
حفاظت از رمز عبور
تنظیمات یک برنامه کاربردی را می توان در اصل توسط کاربر از سیستم فایل خواند، از جمله کد روش. با محافظت از رمز عبور برنامه برای ویرایش، کد روش دیگر قابل خواندن نخواهد بود. این تنظیم از گره ریشه در درخت مدل یا درخت برنامه در دسترس است، همانطور که در شکل زیر نشان داده شده است.
قبل از اجرای محدودیت زمانی یا قفل سخت افزاری، همانطور که در زیر توضیح داده شده است، مطمئن شوید که برنامه شما از رمز عبور محافظت شده است. حفاظت از رمز عبور برای اجرای برنامه برای این منظور مورد نیاز نیست.
برنامه با زمان محدود
برای اینکه یک برنامه پس از یک تاریخ خاص منقضی شود، روشی به شرح زیر ایجاد کنید:
java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(“yyyy-MM-dd”);
//java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(“MM/dd/yyyy”);
ok = false;
try {
  java.util.Date d = f.parse(timeoutDate);
  long currentTime = timeStamp();
  long timeoutTime = d.getTime()+24*60*60*1000; // To allow running until the end         of the day
  if (currentTime < timeoutTime) {
    ok = true;
  }
}
catch (java.text.ParseException e) {
  debugLog(“Failed to parse timeout date “+timeoutDate);
  debugLog(e.getMessage());
}
در این روش باید در مورد قالب تاریخ تصمیم بگیرید. دو نمونه قالب نشان داده شده است و می‌توانید خط مربوط به قالبی را که می‌خواهید استفاده کنید لغو نظر کنید. برای جزئیات بیشتر در مورد قالب‌های موجود، به مستندات Java® برای SimpleDateFormat مراجعه کنید. این متد دارای یک آرگومان ورودی رشته، timoutDate ، و یک آرگومان خروجی بولی، ok است، همانطور که در زیر نشان داده شده است.
تاریخ انقضا به عنوان یک متغیر رشته ای، trial_date ، در Declarations>String تعریف می شود، همانطور که در زیر نشان داده شده است.
نرم افزار قفل شده با سخت افزار
برای قفل کردن یک برنامه به آدرس MAC یک کارت شبکه خاص در رایانه، روشی را به شرح زیر ایجاد کنید:
ok = false;
try {
  java.util.List < java.net.NetworkInterface > nis = java.util.Collections.list(java.net.NetworkInterface.getNetworkInterfaces());
  for (java.net.NetworkInterface ni : nis) {
    StringBuilder macString = new StringBuilder();
    byte[] macBytes = ni.getHardwareAddress();
    if (macBytes != null && macBytes.length > 0) {
      for (byte b : macBytes) {
        if (macString.length() > 0) {
          macString.append(“:”);
        }
        macString.append(String.format(“%02x”, b));
      }
      if (contains(allowedAddresses, macString.toString())) {
        ok = true;
        break;
      }
    }
  }
}
catch (java.net.SocketException e) {}
برای بررسی آدرس MAC هنگام اجرای یک برنامه، باید در قسمت امنیت در تنظیمات برگزیده ، اجازه دسترسی به سوکت های شبکه را فعال کنید . با این حال، برای یک برنامه کامپایل شده، هیچ تغییر امنیتی لازم نیست.
این روش دارای یک آرگومان ورودی رشته 1 بعدی آرایه، allowAddresses ، و یک آرگومان خروجی بولی، ok است، همانطور که در زیر نشان داده شده است.
آدرس MAC به عنوان یک آرایه رشته ای mac_addresses در Declarations>Array 1D String تعریف می شود، همانطور که در زیر نشان داده شده است.
توجه داشته باشید که می‌توانید فهرستی از آدرس‌های MAC را برای استفاده در رایانه‌ای با چند کارت شبکه یا چندین رایانه ارائه کنید.
بررسی تاریخ مجاز و سخت افزار
برای بررسی آدرس MAC و تاریخ، یک روش check_allowed_to_run به صورت زیر ایجاد کنید:
if (!check_mac_address(mac_addresses)) {
  alert(“You are not allowed to run this application on this computer.”,     “COMSOL”);
  exit();
}
if (!check_date(trial_date)) {
  alert(“The trial for this application has expired “+trial_date, “COMSOL”);
  exit();
}
شکل زیر این روش را در Method Editor نشان می دهد.
می‌توانید این نوع روش را در هنگام راه‌اندازی برنامه، برای مثال، به‌عنوان رویداد On load برای فرم اصلی برنامه فراخوانی کنید. در برنامه مثال Tuning Fork، موجود در Application Library of COMSOL Multiphysics، یک روش p_init_application وجود دارد که به عنوان یک رویداد On load برای فرم اصلی اجرا می شود. در این مورد، روش p_init_application را می توان به صورت زیر ویرایش کرد:
check_allowed_to_run();
if (model.sol(“sol1”).isEmpty()) {
  solution_state = “nosolution”;
}
else {
  solution_state = “solutionexists”;
}
zoomExtents(“graphics1”);
به فراخوانی متد check_allowed_to_run در خط اول توجه کنید. شکل زیر این روش را در Method Editor نشان می دهد.
سپس متد p_init_application به عنوان رویداد On load فراخوانی می شود. همانطور که در شکل زیر نشان داده شده است در پنجره تنظیمات فرم اصلی مشخص شده است.