سلام
جواب شما به نوعی شامل دو بخش میشود.
اول) انتقال و نگهداری امن و غیر قابل تغییر لایسنز برنامه
اینکه چه بخش هایی در برنامه باید فعال باشند و در چه بازه زمانی و...
دوم) مشکل تشخیص تاریخ روز
به فرض من تاریخ پایان کار نرم افزار را قطعی و امن داشته باشم.
چطور بفهمم امروز چه تاریخی است؟ واز تاریخ موعود عبور کرده ام یا نه؟
بخش اول با یک فایل XML
(یا JSON) و مفاهیم امضاء دیجیتال به راحتی و با اطمینان بالا قابل حل است.
اما بخش دوم در شرایط مختلف ، حالات و امکان پیاده سازی متفاوتی دارد.
پس اجازه دهید ابتدا بخش دوم را بررسی و تحلیل کنیم...
راه حل اول) اگر طوری باشد که برنامه نیاز مدام به اینترنت و آنلاین بودن داشته باشد، به راحتی میتوان زمان فعلی را از سرور گرفت
(مانند برنامه های شبکه های اجتماعی ، برنامه های بانک ها، بازی های آنلاین و...و...)
اگر برنامه آفلاین باشد و بدون نیاز به اینترنت کار کند به ناچار باید تاریخ را از خود رایانه بگیرید.
ولی مشکل آنجاست که کاربر میتواند تاریخ رایانه را به عقب باز گرداند !
راه حل دوم) اگر برنامه آفلاین باشد ولی تاریخ محور باشد بطوریکه تاریخ در ثبت اطلاعات آن نقش اساسی داشته باشد میتوان تغییر تاریخ توسط کاربر را نادیده گرفت ...!
مانند یک برنامه حسابداری که درج تاریخ سند در آن مهم است.
یا برنامه مدیریت خرید و فروش و فاکتور و...
در همچین برنامه ای کافی است در ورودی های فیلد تاریخ ، برنامه فقط اعداد بازه مورد نظرخود را قبول کند.
در این حالت اگر کاربر تاریخ رایانه را به عقب برگرداند، تمام اطلاعات با تاریخ های اشتباه در برنامه ثبت میشوند و عملا برنامه کارایی خود را از دست میدهد.
فرض کنید برنامه حسابداری خریده ام که فقط 1397.09 الی 1397.10 فعال است.
اگر من تاریخ رایانه را دستکاری کنم، تمام اطلاعات مالی من ، خرید ها و فروش ها و... فقط در بین بازه فوق قابلیت ثبت شدن دارند و من نمیتوانم به همین شکل برای یکسال از این برنامه استفاده کنم، برنامه دیگر برایم ارزشی ندارد.
راه حل سوم) اگر برنامه آفلاین است و تاریخ محور هم نیست، کار کمی سخت میشود.
باید بجز معیار زمان، برای محکم کاری بیشتر یک معیار "تعداد اجرا" هم داشته باشید.
نیاز نیست به کاربران بگویید ، ولی اگر برنامه ای قرار است 30 روز کار کند، شما یک محدودیت 1000 باز اجرا هم برای آن قرار دهید.
باید یک فایل رمزنگاری شده نگاه دارید که همواره آخرین تاریخ اجرای برنامه و همچنین تعداد دفعات اجرای برنامه را نگاه دارد.
این فایل با هر اجرا باید update شود.
برنامه باید به محض اینکه یکبار کشف کرد ، تاریخ سیستم expire شده یا تعداد دفعات اجرای برنامه گذشته است، باید مورد را در فایل ذخیره کند.
ودر نهایت هم همواره امکان دارد که کاربر فایل فوق را backup گرفته و restore کند تا برنامه مجدد به کار ادامه دهد.
برنامه باید تاریخ های created/modified/accessed را هم درون خود فایل نگهداری کند وبا مقادیر خود سیستم فایل مقایسه کند.
برای اطمینان بیشتر میتوانید در چند محل دیگر هم اطلاعاتی ذخیره کنید،
مثلا کلیدی را در registry هم نگاه دارید! برای اطمینان بیشتر، برنامه میتواند هرزمان اجرا بود و اینترنت گیرآورد
( با لجاجت و پررویی تمام!
) یکبار هم زمان و لایسنز را از اینترنت/سرور خودش بررسی کند.
و...
و...
میتواند به یک حد نسبی از رضایت برسید ولی برنامه آفلاین ، زمان-دار، همواره امکان استفاده طولانی مدت را دارد.
فقط باید کسی وقت بگذارد و راهش را پیدا کند.
=====
بجای وابسته کردن برنامه به زمان ، میتوانید برنامه را به قابلیت های مختلف در آن وابسته کنید.
یعنی کسی که 1 تومان بدهد، میتواند با 5 ویژگی/feature برنامه کار کند.
کسی که 5 تومان بدهد، میتواند با 10 ویژگی/feature برنامه کار کند.
و...
در نهایت هم میتوانید با امکانات بیشتر ، کاربر را برای نسخه ها وبروز رسانی های بعدی و فروش نسخه های بعدی ، ترقیب کنید.
این موارد از نظر فنی با درصد اطمینان بیشتری قابل انجام است.
فقط کافیست زمان را حذف کنید!
اجازه دهید اگر من نسخه v1/Home برنامه تان را خریدم، تا هر وقت خواستم آن را داشته باشم.
بجایش با امکانات بیشتر ، من را به خرید v2 یا نگارش Pro و... ترقیب کنید. موفق باشید.