PDA

View Full Version : سوال: چه طور برای برنامم تاریخ انقضا درست کنم؟



zayens
جمعه 01 مرداد 1389, 11:02 صبح
سلام
میخوام برای برنامم یه تاریخ انقضای مثلا یه ساله ایجاد کنم به طوری که بعد از یه سال فقط با اجازه ی من دوباره یه سال دیگه تمدید بشه.چه طور باید این کار را کرد؟
من توی کد نویسی مشکلی ندارم.
در واقع سوال من در رابطه با کد نیست و در مورد اینه که برنامه ی من با ساعت سیستم کار میکنه
خوب حالا برای بعضی شیطنت ها چی کار باید کرد؟
(فکرش را بکنید چند روز مونده به انقضای برنامه تاریخ سیستم را یه سال ببرن عقب)

انیشتین
جمعه 01 مرداد 1389, 17:42 عصر
سلام
یه کدی بنویس که هر باری که برنامه ات اجرا میشه تاریخ سیستم رو تو یک فایلی ذخیره کنه.
دفعه بعد که اجرا میشه تاریخ سیستم رو با تاریخی که تو فایل نوشته مقایسه کنه و اگر بزرگتر بود به کارش ادامه بده واگر کوچکتر بود معلومه که تقلب شده بنابراین اجرای برنامه متوقف بشه.

sobijoon
جمعه 01 مرداد 1389, 19:28 عصر
بطور کلی از هر راهی که بخوای مث تاریخ شمارش تعداد دفعات اجرای برنامه و....باید با یه شرط ویا حلقه کیس مورد نظرتو بررسی کنی.
الته همه اینها وقتی که اون مقدار رو تو یه جا مثلا دیتاییس ذخیره کرده باشی.

اگ کافی نیست بگو تا نمونه بزارم.
موفق باشی.

zayens
شنبه 02 مرداد 1389, 01:45 صبح
خیلی ممنون از راهنماییتون
فقط یه سوال دیگه
من تاریخ ها را به فرم 05/08/1389 ذخیره میکنم.
مقایسه بزرگی و کوچکی چه طور باید انجام بشه؟
اگر لازمه که تفکیک کنم چه طور این کار را بکنم؟
ممنون

vandermond
شنبه 02 مرداد 1389, 02:39 صبح
دوست عزيز
اگر فرمتي كه ذخيره كرديد به DateTime تبديل بشه كه خب بعدش ميتونيد به راحتي با DateTime1.Year و.... به چيزايي كه ميخواي برسي.
ولي اگه فرمت ذخيره شده قابليت تبديل به DateTime رو نداره ميتونيد از (.......)string.SubString استفاده كنيد.
قسمت نقطه چين رو خودتون با توجه به توضيحات VS ميفهميد.

ASKaffash
شنبه 02 مرداد 1389, 08:18 صبح
سلام
میخوام برای برنامم یه تاریخ انقضای مثلا یه ساله ایجاد کنم به طوری که بعد از یه سال فقط با اجازه ی من دوباره یه سال دیگه تمدید بشه.چه طور باید این کار را کرد؟
من توی کد نویسی مشکلی ندارم.
در واقع سوال من در رابطه با کد نیست و در مورد اینه که برنامه ی من با ساعت سیستم کار میکنه
خوب حالا برای بعضی شیطنت ها چی کار باید کرد؟
(فکرش را بکنید چند روز مونده به انقضای برنامه تاریخ سیستم را یه سال ببرن عقب)
سلام
این روش ها اصلا کارآمد نیست چون یک آدم معمولی یک برنامه می نویسد که تاریخ را به یک مقدار اولیه باز می گرداند بعد برنامه شما را اجرا میکند و در پایان دوباره تاریخ روز را تنظیم می کند برنامه شما از کجا بفهمد چی به چی شده ؟

zayens
شنبه 02 مرداد 1389, 09:14 صبح
سلام
این روش ها اصلا کارآمد نیست چون یک آدم معمولی یک برنامه می نویسد که تاریخ را به یک مقدار اولیه باز می گرداند بعد برنامه شما را اجرا میکند و در پایان دوباره تاریخ روز را تنظیم می کند برنامه شما از کجا بفهمد چی به چی شده ؟
شما چه روشی را پیشنهاد میکنید؟
بسیار ممنون

حجتی نیا
شنبه 02 مرداد 1389, 10:07 صبح
اگه سیستمی که روش برنامه نصبه، به اینترنت دسترسی داشته باشه میشه در داخل برنامه چک کرد که هروقت connect شد،برنامه از یه سایت (میتونه متعلق به خودتون باشه) تاریخ رو بگیره و چک کنه .. (خیلی از برنامه های بزرگ از همین روش داره استفاده میکنن)

ASKaffash
شنبه 02 مرداد 1389, 10:17 صبح
شما چه روشی را پیشنهاد میکنید؟
بسیار ممنون
سلام
برای چه نرم افزاری می خواهی استفاده کنی ؟

HAMRAHSOFT.IR
شنبه 02 مرداد 1389, 10:26 صبح
اگه سیستمی که روش برنامه نصبه، به اینترنت دسترسی داشته باشه میشه در داخل برنامه چک کرد که هروقت connect شد،برنامه از یه سایت (میتونه متعلق به خودتون باشه) تاریخ رو بگیره و چک کنه .. (خیلی از برنامه های بزرگ از همین روش داره استفاده میکنن)


نمونه برنامه سراغ داريد

يا كدي جهت اين كار؟

حجتی نیا
شنبه 02 مرداد 1389, 14:54 عصر
http://www.codeproject.com/Questions/72924/Trial-Version-in-Csharp.aspx
http://www.codeproject.com/KB/vb/daytime.aspx
http://www.codeproject.com/KB/datetime/DateValidator.aspx
اینا رو یه نگاه کن بخصوص دومی رو به احتمال زیاد کارتو راه میندازه..

zayens
شنبه 02 مرداد 1389, 16:18 عصر
سلام
برای چه نرم افزاری می خواهی استفاده کنی ؟
یه نرم افزار گزارش گیری از داده ها(حسابداری)

ricky22
شنبه 02 مرداد 1389, 17:42 عصر
NET Reactor

خودش مدیریت می کنه برای ساخت TRIAL و ....

zayens
یک شنبه 03 مرداد 1389, 00:08 صبح
سلام
یه کدی بنویس که هر باری که برنامه ات اجرا میشه تاریخ سیستم رو تو یک فایلی ذخیره کنه.
دفعه بعد که اجرا میشه تاریخ سیستم رو با تاریخی که تو فایل نوشته مقایسه کنه و اگر بزرگتر بود به کارش ادامه بده واگر کوچکتر بود معلومه که تقلب شده بنابراین اجرای برنامه متوقف بشه.
همین کار را میکنم

ASKaffash
یک شنبه 03 مرداد 1389, 07:42 صبح
یه نرم افزار گزارش گیری از داده ها(حسابداری)
سلام
ایجاد سال مالی را منوط به ارتباط و گرفتن نسخه جدید از خودت کن اینطوری سالی یکبار باید با شما ارتباط برقرار کنند

behrouz_n
یک شنبه 03 مرداد 1389, 10:28 صبح
وقتی که تاریخ اجرای برنامه رو توی یک فایل ذخیره میکنید یک مشکل پیش می آید و اون زمانی هست که تاریخ سیستم با تاریخ ذخیره شده برابر هست. برنامه هم فکر میکنه که هنوز در همان روز هست و تاریخ عوض نشده و اجازه اجرا میده.
حالا اگه تاریخ سیستم رو به تاریخ آخرین باری که برنامه را اجرا کردیم بر گردانیم، باز هم برنامه فکر میکنه که هنوز در همان روز هست و تاریخ روز تغییری نکرده، ولی نمیدونه که چند روز از تاریخ قبلی ممکنه گذشته باشه.

برای بر طرف شدن این مشکل میتونی ساعت ورود به برنامه و ساعت خروج از برنامه رو نیز ذخیره کنی.
اگه تاریخ سیستم با تاریخ ذخیره شده برابر بود باید چک کنی که ساعت سیستم در محدوده زمانی که ذخیره کردی نباشه. چون در یک محدوده زمانی فقط یکبار می تونی برنامه رو اجرا کرده باشی.

kimiya_63
دوشنبه 04 مرداد 1389, 09:38 صبح
میتونید کد این برنامه رو اینجا بنویسید آخه منم میخوام برای رمز عبور یه تاریخ انقضا تعریف کنم اما کدش روبلد نیستم بنویسم اگه ممکنه این کد برنامتونو بنویسید

zayens
شنبه 09 مرداد 1389, 16:23 عصر
کارهایی که کردم:
در sql server دوتا جدول ساختم:
1- جدول تاریخها: که همیشه قبل از بسته شدن برنامه تاریخ اون روز وارد این جدول میشه.
2- جدول تک تاریخ: فقط در اولین بار اجرای برنامه، تاریخ اون روز درونش وارد میشه(جهت تاریخ انقضا)

خوب حالا هر وقت برنامه اجرا میشه اول چک میکنه که تاریخ امروز با آخرین تاریخ جدول 1، مساوی یا بزرگترمساوی هست یا نه.
*اگر تاریخ امروز از آخرین تاریخ درون جدول 1 بزرگتر بود برنامه مشکلی نداره و در غیر اینصورت ارور میده.
کد زیر برای این مقایسه صورت میگیره:


// مقایسه تاریخ ها که اگر تاریخ امروز از

// آخرین تاریخ جدول1 کمتر بود خطا میگیرد
privatevoid checkdate(string dateNow, string LastDate)
{
//در برنامه ی من، تاریخ به فرم مثلا 05/02/1389 ذخیره میشود\\
DATE firstDate = newDATE();
firstDate.MaxDateSelect();
//"select Max(FIRSTDATE) as [FIRSTDATE] from DATE"\\
string maxDate=firstDate.DvDATE[0]["FIRSTDATE"].ToString();

if (int.Parse(dateNow.Substring(0, 4)) >= int.Parse(LastDate.Substring(0, 4)))
{
if (int.Parse(dateNow.Substring(5, 2)) >= int.Parse(LastDate.Substring(5, 2)))
// مقایسه ماه
if (int.Parse(dateNow.Substring(8, 2)) >= int.Parse(LastDate.Substring(8, 2)))
// مقایسه روز
ErrorDate = false;
}
else
{
ErrorDate = true;
// فرم زیر باعث میشه تا وقتی تاریخ درست نشه، ارور اجرا بشه
CHECKERROR frm = newCHECKERROR();
frm.ShowDialog();
}


البته تابع بالا را کامل نذاشتم چون میخوام الآن دربارش توضیح بدم و اون هم در مورد تاریخ انقضا است.
همونطور که گفتم جدول 2 فقط در اولین اجرا تاریخ میگیره.
البته من قفلی گذاشتم که هر سال رمز عبور بخواد. وقتی رمز عبور درست بود ، برنامه شرایط را طوری میکنه که
انگار بار اول است که اجرا میشه(البته داده ها پاک نمیشن و مشکلی پیش نمیاد) و وقتی برنامه فکر کنه که بار اوله که داره اجرا میشه دوباره درون جدول 2 تاریخ اون روز ریخته میشه.
این تاریخ ها برای اینه که هنگامی که تاریخ امروز با آخرین تاریخ در جدول 1 چک میشه(که قبلا دربارش بحث شد)
یه بار هم تاریخ امروز با آخرین تاریخ جدول 2 چک میشه(البته به آخرین تاریخ مثلا 1389 یه دونه اضافه میشه و با اون چک میشه یعنی 1390=1+1389)
روش کار
اگر تاریخ امروز با تاریخ مثلا 1390 مساوی بود برنامه شرایط را به حالت اول برمیگردونه و دوباره قفل جدید میخواد
این هم کدش:


if (int.Parse(dateNow.Substring(0, 4)) >= int.Parse(maxDate.Substring(0, 4)) + 1)
{//در کد بالا، مثلا تاریخ 1390=1+1389 با تاریخ امروز چک میشود=>برای مقایسه امروز با زمان انقضا
if (int.Parse(dateNow.Substring(5, 2)) >= int.Parse(maxDate.Substring(5, 2)))
// مقایسه ماه
if (int.Parse(dateNow.Substring(8, 2)) >= int.Parse(maxDate.Substring(8, 2)))
// مقایسه روز
MessageBox.Show("END of PROGRAM");
chk = newUSERS();
chk.LockPassUp("");// شبیه سازی به حالت اول برنامه
// فرم زیر کدی را درخواست میکند که تا کد وارد دیتابیس نشود برنامه اجرا نمیشود
CHECKLOCK CHL = newCHECKLOCK();
CHL.ShowDialog();
}

مطلب دیگه اینکه کدهای بالا پشت سر هم هستند و من برای توضیح در دو تگ نوشتم

.

vandermond
شنبه 09 مرداد 1389, 16:31 عصر
دوست عزيز
روش بدي نيست ولي براي برنامه هاي بزرگ باشه خوب نيست چون مثلا كاربر مياد و هر دفعه قبل از استفاده از برنامه تاريخ رو به همون تاريخ قبلي بر ميگردونه. اينطوري بينهايت بار ميتونه استفاده كنه و بينهايت سال. به نظر من چك كردن اينترنتي تاريخ راه حل بهتري هستش. گرچه گفتم براي برنامه هاي بزرگ اين مشكل هستش ولي اگه برنامه شما زياد بزرگ نيست و مثلا براي يكي دو شركت هستش، فكر نميكنم مشكلي پيش بياد.

zayens
شنبه 09 مرداد 1389, 16:43 عصر
دوست عزيز
روش بدي نيست ولي براي برنامه هاي بزرگ باشه خوب نيست چون مثلا كاربر مياد و هر دفعه قبل از استفاده از برنامه تاريخ رو به همون تاريخ قبلي بر ميگردونه. اينطوري بينهايت بار ميتونه استفاده كنه و بينهايت سال. به نظر من چك كردن اينترنتي تاريخ راه حل بهتري هستش. گرچه گفتم براي برنامه هاي بزرگ اين مشكل هستش ولي اگه برنامه شما زياد بزرگ نيست و مثلا براي يكي دو شركت هستش، فكر نميكنم مشكلي پيش بياد.
خب اولا کاربر از کجا بفهمه که برنامه چه طور کار میکنه یعنی به عقلش نمیرسه که تاریخ را
هر دفعه عقب نبره و فقط روی یه روز خاص نگه داره.
در ثانی برای حل این مشکل کافیه ساعت را هم ذخیره کنیم.
از اون جایی که همیشه قبل از بسته شدن برنامه تاریخ و زمان وارد دیتابیس میشه
با چک کردن ساعت دیگه هیچ مشکلی بوجود نمیاد.
در ضمن برای اینکه در اولین بار اجرای برنامه (یعنی قبل از اولین اجرا) زمان دستکاری نشه
کسی که برنامه را نصب میکنه از طرف شرکت خودمون هست.

NIK
شنبه 09 مرداد 1389, 16:56 عصر
خب اولا کاربر از کجا بفهمه که برنامه چه طور کار میکنه یعنی به عقلش نمیرسه که تاریخ را
هر دفعه عقب نبره و فقط روی یه روز خاص نگه داره.
در ثانی برای حل این مشکل کافیه ساعت را هم ذخیره کنیم.
از اون جایی که همیشه قبل از بسته شدن برنامه تاریخ و زمان وارد دیتابیس میشه
با چک کردن ساعت دیگه هیچ مشکلی بوجود نمیاد.
در ضمن برای اینکه در اولین بار اجرای برنامه (یعنی قبل از اولین اجرا) زمان دستکاری نشه
کسی که برنامه را نصب میکنه از طرف شرکت خودمون هست.

به نظر من هم روش خوبی نیست. بالاخره ممکنه یه نفر بفهمه و بین مشتریهاتون دهن به دهن بچرخه و برنامه فی سبیل الله بشه.
میتونید برای تکمیل این روش، یه محدودیت رکورد هم بزارین. یکی از جداول دیتابیس رو تحت نظر بگیرید و اگه رکورهاش مثلاً از 1500 بیشتر شد، برنامه از کار بیافته. با این روش مطمئن میشید که اگه تاریخ دستکاری شد، نهایتاً چند روز دیرتر برنامه از کار میافته .
میتونید این شمارش رکوردها رو هم هنگام شروع برنامه و هم طی یه بازه زمانی مثلاً 5 ساعته انجام بدید.

vandermond
شنبه 09 مرداد 1389, 16:59 عصر
خب اولا کاربر از کجا بفهمه که برنامه چه طور کار میکنه یعنی به عقلش نمیرسه که تاریخ را
هر دفعه عقب نبره و فقط روی یه روز خاص نگه داره.
در ثانی برای حل این مشکل کافیه ساعت را هم ذخیره کنیم.
از اون جایی که همیشه قبل از بسته شدن برنامه تاریخ و زمان وارد دیتابیس میشه
با چک کردن ساعت دیگه هیچ مشکلی بوجود نمیاد.
در ضمن برای اینکه در اولین بار اجرای برنامه (یعنی قبل از اولین اجرا) زمان دستکاری نشه
کسی که برنامه را نصب میکنه از طرف شرکت خودمون هست.
دوست عزيز
گفتم اگه برنامه بزرگ و با ارزش باشه. در اين حالت مطمئن باش كساني هستند كه بفهمن برنامه چه طور كار ميكنه.
ذخيره كردن ساعت هم فايده نداره وقتي شما تاريخ رو بزرگتر مساوي مقايسه ميكني.
قبل از خارج شدن هم كه ساعت ذخيره بشه خب كاربر هم قبل از اجرا و هم قبل از بستن برنامه تاريخ رو به حالت قبلي بر ميگردونه.
زمان اوليه (زمان نصب) هم اصلا مهم نيست چون كاربر ميتونه مثلا تاريخ سيستمش رو هر دفعه كه خواست اجرا كنه به همون زمان نصب برگردونه يا مثلا يكي دو روز بعد.
مهم اينه كه شما داريد با بزرگتر مساوي مقايسه ميكنيد. و با استفاده از اين روش اگه برنامه بزرگ باشه ميتونيد مثلا مدت كاركرد برنامه در هر اجرا و ... رو حداقل ذخيره كنيد كه بينهايت به خيلي زياد تبديل بشه.
در كل باز هم ميگم اين نكته هايي كه گفتم براي برنامه هاي بزرگ و باارزشي هست كه عده اي به دنبال كرك كردن و ... باشن و اگه كرك كنن ديگه نياز با كارهاي اضافه كاربر هم نخواهد بود.

vandermond
شنبه 09 مرداد 1389, 17:03 عصر
به نظر من هم روش خوبی نیست. بالاخره ممکنه یه نفر بفهمه و بین مشتریهاتون دهن به دهن بچرخه و برنامه فی سبیل الله بشه.
میتونید برای تکمیل این روش، یه محدودیت رکورد هم بزارین. یکی از جداول دیتابیس رو تحت نظر بگیرید و اگه رکورهاش مثلاً از 1500 بیشتر شد، برنامه از کار بیافته. با این روش مطمئن میشید که اگه تاریخ دستکاری شد، نهایتاً چند روز دیرتر برنامه از کار میافته .
میتونید این شمارش رکوردها رو هم هنگام شروع برنامه و هم طی یه بازه زمانی مثلاً 5 ساعته انجام بدید.
خب اگه كاربر دوست داشت 2000 بار برنامه رو اجرا كنه توي اين يك سال چي؟
اين روش هم به نظر من اصلا خوب نيست و يك محدوديت ايجاد ميكنه كه اصلا كاربر پسند نيست. اينطوري اگر باشه بايد به كاربر بگي كه اگه 1500 بار استفاده كني ديگه غيرفعال ميشه و مطمئنا كاربر مخالفت ميكنه با اين روش.
در ضمن اصلا قرار بر ايجاد محدوديت اضافي نبود.

multiman
شنبه 09 مرداد 1389, 17:18 عصر
خوب يه تاريخ انقضا واسه برنامه در يك جدول ذخيره ميكنيم بعد در يه جدول ديگه هر بار كه كاربر وارد برنامه ميشه تاريخ ورود كاربر به شرطي به روز بشه كه اين تاريخ از تاريخ قبلي كوچكتر و مساوي نباشد واز تاريخ انقضا هم بزرگتر نباشه، در اين صورت تاريخ به روز ميشه وبعد اين تاريخ با تاريخ انقضا كه قبلا در نظر گرفتيم چك ميكنيم كه اگه كوچكتر بود برنامه اجرا بشه.
فكر كنم اگه با اين شكل عمل كني، بهتر باشه ،امكان تقلب هم كمتر بشه

zayens
شنبه 09 مرداد 1389, 17:18 عصر
میتونید برای تکمیل این روش، یه محدودیت رکورد هم بزارین. یکی از جداول دیتابیس رو تحت نظر بگیرید و اگه رکورهاش مثلاً از 1500 بیشتر شد، برنامه از کار بیافته. با این روش مطمئن میشید که اگه تاریخ دستکاری شد، نهایتاً چند روز دیرتر برنامه از کار میافته .
میتونید این شمارش رکوردها رو هم هنگام شروع برنامه و هم طی یه بازه زمانی مثلاً 5 ساعته انجام بدید.
این بهترین کاره
برنامه ی من جوریه که هر روز نیاز به حداکثر دو بار اجرا داره و در طول روز معمولا برنامه در حال اجرا است و نباید بسته باشه.
بنابراین تاریخی که قبل از بسته شدن برنامه به جدول 1 میفرستاد را هنگام شروع چک میکنه که
بیشتر از 10 نباشه.


خب اگه كاربر دوست داشت 2000 بار برنامه رو اجرا كنه توي اين يك سال چي؟
اين روش هم به نظر من اصلا خوب نيست و يك محدوديت ايجاد ميكنه كه اصلا كاربر پسند نيست. اينطوري اگر باشه بايد به كاربر بگي كه اگه 1500 بار استفاده كني ديگه غيرفعال ميشه و مطمئنا كاربر مخالفت ميكنه با اين روش.
در ضمن اصلا قرار بر ايجاد محدوديت اضافي نبود.

محدودیتی برای دفعات در طول سال وجود نداره
محدودیت در طول روز است.
همونطور که گفتم برنامه ی من مدیا پلیر نیست که 500 دفعه در روز اجرا بشه و کارش ایجاب میکنه که کاربر مدت زیادی باهاش کار کنه و در طول روز حداکثر 2 یا 3 بار اون را میبنده.
منم که گذاشتم که اگر تا 10 بارم بسته شد مشکلی پیش نیاد.
حالا چی؟
همین کار را میکنم.

vandermond
شنبه 09 مرداد 1389, 17:32 عصر
منم که گذاشتم که اگر تا 10 بارم بسته شد مشکلی پیش نیاد.
حالا چی؟

براي اين برنامه خب روش خوبي هستش كه هر روز ... . ولي باز هم كاربر ميتونه 3650 بار برنامه رو اجرا كنه و به محدوديت زماني ربطي نداشته باشه. گرچه از بينهايت و خيلي زياد به متوسط رسيديم و اين خيلي خوبه، ولي هنوز محدوديت تاريخ قابل اعتماد نيست و اگه كاربر مثلا هر روز 2 بار برنامه رو اجرا كنه ميتونه 5 سال با برنامه كار كنه.
ببين من تمام اين نكته هايي كه ميگم براي اينه كه براي يك برنامه بزرگ اين روش نميتونه خوب باشه يا بايد يه تغييراتي بكنه. نميخام هر چي ميگي باهات مخالفت كنم، فقط براي اين ميگم كه بدوني روش هايي هستش كه كاربر حرفه اي بتونه سوء استفاده كنه. ميگم يه وقتي ناراحت نشي. فقط دارم مشكلات احتمالي آينده رو ميگم.

حجتی نیا
شنبه 09 مرداد 1389, 17:37 عصر
http://www.codeproject.com/KB/vb/daytime.aspx
این لینک رو قبلا هم قرار دادم ولی مورد توجه قرار نگرفت،روشیه برای هماهنگ کردن ساعت ویندوز با یه سایت.. البته اگه اون سیستم به اینترنت وصل شده باشه
اگه اون سیستم هیچ وقت به اینترنت وصل نشه،نمیشه فهمید کی انقضا برنامه تموم شده..واسه حله این مشکل میشه با یه روش دیگه که یکی از دوستان هم پیشنهاد داد ادغام کرد به اینصورت که اگه تعداد دفعات استفاده از برنامه به حدی رسید،برنامه از کار بیافته و کاربر رو مجبور کنه که برنامه رو آپدیت کنه (از یه سایت یا برنامه نویس) اگه از سایت باشه که براساس همون لینک میتونی تاریخ و زمان رو چک کنی و اگه بخواد آپدیت رو از برنامه نویس بگیره که دیگه معلومه ...

vandermond
شنبه 09 مرداد 1389, 17:44 عصر
http://www.codeproject.com/KB/vb/daytime.aspx
این لینک رو قبلا هم قرار دادم ولی مورد توجه قرار نگرفت،روشیه برای هماهنگ کردن ساعت ویندوز با یه سایت.. البته اگه اون سیستم به اینترنت وصل شده باشه

دوست عزيز
روش شما مورد توجه قرار گرفت و من هم همين رو گفتم به جناب zayens و الان داريم روي اون كدي كه ايشون نوشته بحث ميكنيم كه چه طور ميشه بدون اتصال به اينترنت و با تاريخ ويندوز كار رو درست كرد. فعلا خيلي بهينه شده ولي هنوز محدوديت زماني خوب اعمال نميشه و با روشهايي ميشه چندين سال از برنامه استفاده كرد. اگه روشي كه zayens گفتن (يعني بدون اتصال به اينترنت) بهينه تر بشه، روش مناسب تري هستش چون نياز به اتصال به اينترنت نداره. البته ديگه از يه جايي ديگه نميشه بهينه كرد. چون ديگه نميتونيم وقتي برنامه درحال اجرا نيست كنترل كنيم كه تاريخ رو عوض ميكنه (يا ساعت رو) يا نه.

حجتی نیا
شنبه 09 مرداد 1389, 18:09 عصر
اگه هرجوری واسه برنامه یه انقضا بزارین،بالاخره دست بالا دست زیاده و یکاریش میشه کرد که برنامه به کارش ادامه بده.. تو برنامه های بزرگ که بصورت عمومی منتشرشده دیده میشه که هک میشن و مثلا وقتی شما به ایترنت وصل میشین،برنامه از کار میفته..
(بنظر من)اینکه شما داخل برنامه بخواین تاریخو مقایسه کنین،چونکه مبنای مقایسه رو میشه عوض کرد راه تضمین شده ای نیست..
تو برنامه های خاص(برای جای خاصی نوشته شده) میشه کارایی برهمین اساس کرد،بعنوان مثال جناب zayens واسش تعداد دفعات استفاده رو گذاشتن و حداکثر در روز 10بار تعیین کرد،ممکنه چندروز دیرتر از کار بیافته اما بالاخره شدنیه
اما در برنامه هایی که بصورت عمومی منتشر میشه،بنظر من استفاده از اینترنت بهترین راه حله درضمن اینطوری میشه به تعداد کسایی که داره از برنامه داره استفاده میکنن پی برد یا اگه برنامه کرک شد، میتونیم متوجه شیم و اونارو از کار بندازیم..

mmd2009
شنبه 09 مرداد 1389, 18:11 عصر
اما در برنامه هایی که بصورت عمومی منتشر میشه،بنظر من استفاده از اینترنت بهترین راه حله درضمن اینطوری میشه به تعداد کسایی که داره از برنامه داره استفاده میکنن پی برد یا اگه برنامه کرک شد، میتونیم متوجه شیم و اونارو از کار بندازیم..

با سلام

میشه در مورد این حرفتون یه کم بیشتر توضیح بدید!

zayens
شنبه 09 مرداد 1389, 22:04 عصر
براي اين برنامه خب روش خوبي هستش كه هر روز ... . ولي باز هم كاربر ميتونه 3650 بار برنامه رو اجرا كنه و به محدوديت زماني ربطي نداشته باشه. گرچه از بينهايت و خيلي زياد به متوسط رسيديم و اين خيلي خوبه، ولي هنوز محدوديت تاريخ قابل اعتماد نيست و اگه كاربر مثلا هر روز 2 بار برنامه رو اجرا كنه ميتونه 5 سال با برنامه كار كنه.
ببين من تمام اين نكته هايي كه ميگم براي اينه كه براي يك برنامه بزرگ اين روش نميتونه خوب باشه يا بايد يه تغييراتي بكنه. نميخام هر چي ميگي باهات مخالفت كنم، فقط براي اين ميگم كه بدوني روش هايي هستش كه كاربر حرفه اي بتونه سوء استفاده كنه. ميگم يه وقتي ناراحت نشي. فقط دارم مشكلات احتمالي آينده رو ميگم.

یه راه پیدا کردم که دیگه ردخور نداره
یه نفر را استخدام میکنیم که که هر چندوقت یه بار بره به برنامه سر بزنه و تاریخ را چک کنه.
یواشکی هم اینکار را بکنه که کاربر نفهمه. اگر دید تاریخ امروز درست نیست بزنه فک یارو را بیاره پایین. اینجوری اگر بقیه کاربر ها بفهمن میترسن و از خیر دستکاری زمان میگذرن. چطوره؟ :لبخند:

FastCode
شنبه 09 مرداد 1389, 22:27 عصر
یه راه پیدا کردم که دیگه ردخور نداره
یه نفر را استخدام میکنیم که که هر چندوقت یه بار بره به برنامه سر بزنه و تاریخ را چک کنه.
یواشکی هم اینکار را بکنه که کاربر نفهمه. اگر دید تاریخ امروز درست نیست بزنه فک یارو را بیاره پایین. اینجوری اگر بقیه کاربر ها بفهمن میترسن و از خیر دستکاری زمان میگذرن. چطوره؟ :لبخند:

به جای این کار میتونی یه هاست و دامین بگیری و تاریخ رو توی برنامه ازش بخوای.
اگر با تاریخ سیستم بیشتر از 12 ساعت اختلاف داشت:بوم.همه سیستم رو پاک کنه.
فقط یادت باشه که این کار حتما" باید در لحظه اول انجام بشه و عملیات بوم باید Async باشه, تا با deep freeze دچار مشکل نشه.
برای جلوگیری از packet sniffing هم میتونی از SSL استفاده کنی.
راه زیاده.همت و وقت میخواد.

vandermond
شنبه 09 مرداد 1389, 22:44 عصر
یه راه پیدا کردم که دیگه ردخور نداره
یه نفر را استخدام میکنیم که که هر چندوقت یه بار بره به برنامه سر بزنه و تاریخ را چک کنه.
یواشکی هم اینکار را بکنه که کاربر نفهمه. اگر دید تاریخ امروز درست نیست بزنه فک یارو را بیاره پایین. اینجوری اگر بقیه کاربر ها بفهمن میترسن و از خیر دستکاری زمان میگذرن. چطوره؟ :لبخند:
نه بابا اين چه كاريه. همه كه نميدونن برنامه با چه روشي كار ميكنه.(البته خيلي ها ميدونن:متفکر:). اي طوري همه ميفهمن و يه جورايي سعي ميكنن سرت كلاه بزارن. درضمن اگه قراره يه نفر استخدام بشه كه خب سر سال بفرستش و بگو شارژ كنه و الا ميزني سيستم رو داغون ميكني:لبخند:.
به نظر من همون روش اينترنتي خوب هستش. نياز نيست هميشه وصل باشه. فقط هر وقت وصل شد تاريخ سيستمش رو درست ميكني و از اون به بعد نميتونه تاريخ رو از اون عقب تر ببره. و اگه وصل نشه به روش خودت كه هر روز 10 تا و.... . البته قبلا Babylon براي من با اينترنت مشكل داشت و هر وقت ميخاستم وصل بشم خب اونو غيرفعال ميكردم. وصل ميشدم و ... . ميگم يعني اگه كاربر حرفه اي بخاد كرك كنه. زياد سخت نيست براش.
نظر من اينه كه مدت زمان اجراي برنامه رو حتما هر دفعه ذخيره كني و زمان خروج ببيني كه زمان رو در حين برنامه تغيير نداده باشه. به اين صورت حداقل اينه كه نميتونه به عنوان تاريخ يك روز بيشتر از 24 ساعت كار كنه.

FastCode
شنبه 09 مرداد 1389, 23:04 عصر
ولی تاریخ غیر منصفانست.
من چند روز پیش داشتم با GetSystemTime و SetSystemTime کار میکردم ببینم چطوریه.
عینک نزده بودم.به خاطر همین به جای wminute نوشتم wmonth.(امون از intellisense)
تمام برنامه هام از کار افتاد.حتی آنتی ویروسی که 3 روز قبل فعال کرده بودم.
اگر به روز کار طرف بخوابه تا آخر عمرش بهت فحش میده.توی قضیه تاریخ حواست رو جمع کن که مشکلی که من با آنتی ویروسم پیدا کردم ایجاد نشه.
یعنی اگر تاریخ نمیخوند ترتیب همه چیز رو نده.یه فرصت بده(مثلا" برنامه بگه که تاریخ فعال سازی گذشته و اگر امروز فعال نشه bye bye) و تاریخ رو از time.windows.com یا هر time server ی که بهش اعتماد داری(از لحاظ غیر معمول بودن) چک کن و تاریخ سیستم رو درست کن.

zayens
شنبه 09 مرداد 1389, 23:51 عصر
راستی در مورد روشی که گفتم(تاریخ یک روز را بیش از مثلا 10 بار نمیتواند وارد کند)
اگر کاربر زمان را چند روز نگه داره از اونجایی که نمیدونه حداکثر دفعات اتصال در یک روز 10 تا است بنابراین برنامه
پیشتر از این اجازه ی کار به اون نمیده.
در واقع برنامه تا اطلاع ثانوی (تا صدور اجازه ی شرکت) متوقف خواهد شد.
در یکی از پست ها آمده بود...

براي اين برنامه خب روش خوبي هستش كه هر روز ... . ولي باز هم كاربر ميتونه 3650 بار برنامه رو اجرا كنه و به محدوديت زماني ربطي نداشته باشه. گرچه از بينهايت و خيلي زياد به متوسط رسيديم و اين خيلي خوبه، ولي هنوز محدوديت تاريخ قابل اعتماد نيست و اگه كاربر مثلا هر روز 2 بار برنامه رو اجرا كنه ميتونه 5 سال با برنامه كار كنه.
که در جواب گفتم که کاربر دفعات محدودیت را نمیدونه و نیز اگر تعداد زمان های تکراری به 10 رسید برنامه متوقف خواهد شد.

در ضمن گفته شده بود

برای برنامه های بزرگ روش اینترنتی مناسب است
منظور از برنامه بزرگ چیه؟
منظور قیمتیه که در انتها باید نصیب شرکت سازنده بشه را میگین یا تعداد برنامه هایی که باید فروش بره؟
فرض کنین حدود 100 یا 200 تا از این برنامه با قیمت تقریبا 500 هزار در مراکز مورد نظر فروش بره.
آیا این برنامه را شما بزرگ میدونین؟

vandermond
یک شنبه 10 مرداد 1389, 00:04 صبح
دوست عزيز
اينكه اگه 11 بار در روز برنامه رو اجرا كنه شما كل برنامه رو متوقف كني به نظر من جالب نيست. مگر اينكه حداقل اين نكته رو يه جوري بهشون بگي. چون برنامه اي كه به خاطر اجرا شدن بيش از حد از كار بيفته، فكر ميكنم كاربر رو نسبت به خودش ناراضي ميكنه.(البته روش بدي هم نيست به شرطي كه ارتباط با شركت و فعالسازي مجدد اون و كلا پشتيباني شركت فعال باشه و سريع و راحت عمل كنه)
برنامه هم نسبتا بزرگ هستش ولي با توجه به اينكه برنامه حسابداري هستش فكر ميكنم دسترسي به اينترنت راه خوبي نباشه. روشي كه جناب ASKaffash قبلا گفته بودن هم خوبه:

یجاد سال مالی را منوط به ارتباط و گرفتن نسخه جدید از خودت کن اینطوری سالی یکبار باید با شما ارتباط برقرار کنند
البته چون برنامه حسابداري هستش يه كار هم ميشه كرد و اونم اينه كه تاريخ هاي توي برنامه رو از تاريخ سيستم بگيري و غيرقابل ويرايش. با اين روش ديگه كاربر تاريخ رو عوض نميكنه. چون تاريخ چكها و... به هم ميخوره.

NIK
یک شنبه 10 مرداد 1389, 08:04 صبح
خب اگه كاربر دوست داشت 2000 بار برنامه رو اجرا كنه توي اين يك سال چي؟
اين روش هم به نظر من اصلا خوب نيست و يك محدوديت ايجاد ميكنه كه اصلا كاربر پسند نيست. اينطوري اگر باشه بايد به كاربر بگي كه اگه 1500 بار استفاده كني ديگه غيرفعال ميشه و مطمئنا كاربر مخالفت ميكنه با اين روش.
در ضمن اصلا قرار بر ايجاد محدوديت اضافي نبود.



شما متوجه نشدید. بنده عرض نکردم تعداد دفعاتی که کاربر برنامه رو باز و بسته میکنه محاسبه کنید. گفتم یکی از جداول اصلی دیتابیس رو تحت نظر بگیرید که کاربر بیش از مثلاً 1500 رکورد نتونه وارد کنه.
من یه برنامه حسابداری خیلی ساده برای فروشگاه برادرم نوشتم. خیلی از دوستان همکار برادرم از من خواستند که نسخه ای آزمایشی از برنامه هم به اونها بدم.
محدودیت 1000 رکورد رو برای جدول اصلی دیتابیس (جدول فروش اجناس) قرار دادم. وقتی تعداد فروش از 1000 بیشتر بشه برنامه پیغام میده و دیگه کار نمیکنه. اگه هم بخوان دوباره برنامه رو نصب کنن، دیتابیس از ری رایت میشه و اطلاعات 1000 فروش قبلیشون (تقریباً معادل 45 روز) از بین میره.

انیشتین
یک شنبه 10 مرداد 1389, 09:41 صبح
با سلام
همین روش مناسب هست،یعنی همین روشی با هاش کد نوشتی:
1-اگر ساعت هم جزئ تاریخ باشه یعنی دقیقه و ثانیه اجرای قبلی هم ثبت بشه و برنامه در هنگام اجرای مجدد مقید به زمان بزرگتر از زمان قبلی باشه،دقت کنید،فقط بزرگتر و نه مساوی ،
اونوقت واقعا دستکاری کردن زمان برای کاربر کار سختی خواهد بود.
2-تاریخ کامپیوتر در زمان نصب برنامه که اهمیتی نداره،با هر تاریخی برای اولین بار اجرا بشه با همون کار رو ادامه میده.تو خود برنامه براش تاریخ انقضا بگذارید،مستقل از ویندوز،اولین بار که اجرا شد،تاریخ ویندوز رو به اضافه یکسال یا 6 ماه در جایی ذخیره کنه و تا اون تاریخ کار کنه.

3-اگه خیلی برنامه با ارزشی هست همون طور که دوستمون گفتند از یه سایت تاریخ و زمان رو بگیره.
4-کاربر علم غیب نداره که بخواد با این وسواس تاریخ رو جابجا کنه ، یک دفعه تاریخ رو3ماه، 6 ماه یا یکسال عقب میکشه،برنامه هم که از کا میفته.
5-امنیت صد در صد غیر ممکنه.الان ویندوز مایکرو سافت رو سر کوچه ما 1000 تومان میفروشند.:لبخند:

FastCode
یک شنبه 10 مرداد 1389, 10:21 صبح
اطلاعات 1000 فروش قبلیشون (تقریباً معادل 45 روز) از بین میره.

بستگی به مشتری داره.
من آمار نجومی ای توی همین ایران دیدمه که هزار تا فروش خوراک 1 روزشه.
و عکس اون شرکتی که 1000 تا برای 2 سالش هم زیاده.
توی این بازار باید یه روش دیگه باشه.
مثلا" تعداد فروش ها از تعداد مشتریان بیشتر نشه.
این کار باعث میشه کاربر دیوانه بشه.

vandermond
یک شنبه 10 مرداد 1389, 10:43 صبح
شما متوجه نشدید. بنده عرض نکردم تعداد دفعاتی که کاربر برنامه رو باز و بسته میکنه محاسبه کنید. گفتم یکی از جداول اصلی دیتابیس رو تحت نظر بگیرید که کاربر بیش از مثلاً 1500 رکورد نتونه وارد کنه.
من یه برنامه حسابداری خیلی ساده برای فروشگاه برادرم نوشتم. خیلی از دوستان همکار برادرم از من خواستند که نسخه ای آزمایشی از برنامه هم به اونها بدم.

دوست عزيز اين نسخه اي كه جناب zayens ميخاد بده بيرون فكر نميكنم آزمايشي باشه. اين خيلي بد هستش كه به خريدار بگي تا يك سال برنامه كار ميكنه و بعد از اينكه مثلا جدول فروش يا .... پر شد برنامه ديگه كار نكنه. براي اينكه فقط يك سال اجرا بشه اصلا روش خوبي نيست. همون 10 بار در روز نسبت به اين خيلي بهتر هستش.

-اگر ساعت هم جزئ تاریخ باشه یعنی دقیقه و ثانیه اجرای قبلی هم ثبت بشه و برنامه در هنگام اجرای مجدد مقید به زمان بزرگتر از زمان قبلی باشه،دقت کنید،فقط بزرگتر و نه مساوی ،
اونوقت واقعا دستکاری کردن زمان برای کاربر کار سختی خواهد بود.

اين هم تاثير خاصي نداره. خب كاربر زمان سيستم رو يك ثانيه يا يك دقيقه يا يك ساعت ميبره جلو و دوباره كار ميكنه.

4-کاربر علم غیب نداره که بخواد با این وسواس تاریخ رو جابجا کنه ، یک دفعه تاریخ رو3ماه، 6 ماه یا یکسال عقب میکشه،برنامه هم که از کا میفته.
خب اون ويندوزي كه شما داري 1000 ميخري مگه امنيتش كم بود؟ يك عده ميان و روش كار ميكنن و شما بايد فكر كني كه علم غيب دارن(البته براي برنامه هاي بزرگ كه ارزش كرك و .. داشته باشه)

zayens
یک شنبه 10 مرداد 1389, 17:49 عصر
اگر ساعت هم جزئ تاریخ باشه یعنی دقیقه و ثانیه اجرای قبلی هم ثبت بشه و برنامه در هنگام اجرای مجدد مقید به زمان بزرگتر از زمان قبلی باشه،دقت کنید،فقط بزرگتر و نه مساوی ،
اونوقت واقعا دستکاری کردن زمان برای کاربر کار سختی خواهد بود.




اين هم تاثير خاصي نداره. خب كاربر زمان سيستم رو يك ثانيه يا يك دقيقه يا يك ساعت ميبره جلو و دوباره كار ميكنه.


من با گزینه ی اول موافقم
جناب vandermond دقت نکردند به این که اگر مثلا برنامه ساعت 8 صبح اجرا و 12 ظهر بسته بشه اگر کاربر در فردای اون روز تاریخ را به روز قبل تغییر بده نمیتونه تا قبل از ساعت 12 کار کنه و باید ساعت را هم بعد از 12 تنظیم کنه.
خوب در این صورت کاربر (به فرض اینکه فهمیده که اگه تاریخ را فقط به یه روز قبل برگردنه میشه با برنامه کار کرد) مجبوره که از 12 تا 4 بعد از ظهر کار کنه و این همون محدودیتیه که لازم داریم

دقت کنید،فقط بزرگتر و نه مساوی ،
چون برنامه هنگام بسته شدن، زمان ها را به دیتابیس میفرسته اگر مساوی باشه هم مشکلی پیش نمیاد چون در زمان مثلا 12:01:56 ثانیه ملاک اصلی ساعتیه که گذشته و اگر ثانیه خود56 باشه یا 57 باشه مهم نیست
این را هم در نظر بگیرین که کاربر از هیچی خبر نداره و اگر توی دستکاری تاریخ یه اشتباه کنه باید با شرکت تماس گرفته بشه
(امیدوارم شماها آنتن بازی در نیارین:لبخند:)
روش استفاده از تاریخ به علاوه ی ساعت همونطور که منم در یکی از پست ها گفته بودم عالیه.

vandermond
یک شنبه 10 مرداد 1389, 18:05 عصر
من با گزینه ی اول موافقم
جناب vandermond دقت نکردند به این که اگر مثلا برنامه ساعت 8 صبح اجرا و 12 ظهر بسته بشه اگر کاربر در فردای اون روز تاریخ را به روز قبل تغییر بده نمیتونه تا قبل از ساعت 12 کار کنه و باید ساعت را هم بعد از 12 تنظیم کنه.
خوب در این صورت کاربر (به فرض اینکه فهمیده که اگه تاریخ را فقط به یه روز قبل برگردنه میشه با برنامه کار کرد) مجبوره که از 12 تا 4 بعد از ظهر کار کنه و این همون محدودیتیه که لازم داریم
این را هم در نظر بگیرین که کاربر از هیچی خبر نداره و اگر توی دستکاری تاریخ یه اشتباه کنه باید با شرکت تماس گرفته بشه
(امیدوارم شماها آنتن بازی در نیارین:لبخند:)
روش استفاده از تاریخ به علاوه ی ساعت همونطور که منم در یکی از پست ها گفته بودم عالیه.
اين آنتن چيه كه بچه ها بهم ميگن هي :لبخند:. (شوخي كردم.)
بدون ساعت و دقيقه (و حتي ثانيه) كه اصلا امكان نداره.(يعني خيلي داغونه:چشمک:) من فرضم توي تمام پستهايي كه دادم اين بود كه ساعت و دقيقه (و حتي ثانيه) هم چك بشه. در ضمن گفتم كه مدت اجراي برنامه رو به اضافه تاريخ اجرا كنه و نزاره كه از اون عقب تر بر گرده.
با اينكه كاربر نميدونه يا نميفهمه (يا ...بيييييب....:لبخند:) كاملا مخالف هستم. برنامه اي كه ارزش كرك كردن و .. داشته باشه، مطمئن باش روش كارش لو ميره. مهم اينه كه روش طوري باشه كه با فهميدن كاربر هم مشكلي پيش نياد(البته به نظر من!!!).
تا اينجا نتيجه اينه كه كاربر ميتونه نهايتا 24*365=8760 ساعت با برنامه كار كنه. از اين بهينه تر نشده هنوز. و براي كاربر حرفه اي به تاريخ ربطي نداره.( من محدوديت 1500 كه گفته شد رو در نظر نميگيرم. چون روش خوبي نيست به نظر من)
ببين دوست عزيز هدف شما محدوديت يك ساله هستش ديگه. تا حالا ولي هيچ تضميني براي اين نيست كه يك ساله باشه. ميتونه 1 ساله باشه. ميتونه 1000000000000000 ساله:متعجب: باشه. به نظر من سال مالي بهترين روش براي اين برنامه هستش.

FastCode
یک شنبه 10 مرداد 1389, 19:33 عصر
من یه برنامه نوشتم به اسم Freeze.exe
این برنامه با interval خیلی پایین ساعت رو ثابت میکنه.روی بازی ها که خوب اثر میکنه.روی روش شما چطور.
برنامه من راه دور زدن داره ولی نمیگم که یکم فکر کنید.

vandermond
یک شنبه 10 مرداد 1389, 19:55 عصر
من یه برنامه نوشتم به اسم Freeze.exe
این برنامه با interval خیلی پایین ساعت رو ثابت میکنه.روی بازی ها که خوب اثر میکنه.روی روش شما چطور.
برنامه من راه دور زدن داره ولی نمیگم که یکم فکر کنید.
بستن برنامه Freeze.exe اينم راه دور زدن:لبخند:.
خب ميشه برنامه مدت زمان اجرا رو خودش محاسبه كنه و اگه مشكلي بود .....(اين راه رو جدي گفتم ديگه)

FastCode
یک شنبه 10 مرداد 1389, 20:46 عصر
بستن برنامه Freeze.exe اينم راه دور زدن:لبخند:.
خب ميشه برنامه مدت زمان اجرا رو خودش محاسبه كنه و اگه مشكلي بود .....(اين راه رو جدي گفتم ديگه)


خب اسمش رو عوش میکنم یا کدش رو تزریق میکنیم به خود برنامه.
راه دوم جواب نمیده.
راهش اینه که یه ترد درست کنید و با interval پنجاه میلی ثانیه sleep ش کنید.اگر زمان قبل و بعد از Sleep با interval بیش از 17 میلی ثانیه اختلاف داشت یعنی یه خبراییه.

vandermond
یک شنبه 10 مرداد 1389, 21:50 عصر
خب اسمش رو عوش میکنم یا کدش رو تزریق میکنیم به خود برنامه.
راه دوم جواب نمیده.
راهش اینه که یه ترد درست کنید و با interval پنجاه میلی ثانیه sleep ش کنید.اگر زمان قبل و بعد از Sleep با interval بیش از 17 میلی ثانیه اختلاف داشت یعنی یه خبراییه.
راه جالبي بود. ولي چرا 17؟

HadiGN
دوشنبه 11 مرداد 1389, 03:48 صبح
باید از چند روش امنیتی همزمان استفاده کنید!
یه سرویس بسازید که با نصب شدن برنامه اجرا شه و از اینترنت تاریخ روز رو بگیره
داخل برنامه اصلی همیشه کوچکترین تاریخ سیستم رو ذخیره نگه دارید.
و چند روش دیگر (همزمان با هم)

zayens
دوشنبه 11 مرداد 1389, 15:02 عصر
باید از چند روش امنیتی همزمان استفاده کنید!
یه سرویس بسازید که با نصب شدن برنامه اجرا شه و از اینترنت تاریخ روز رو بگیره
داخل برنامه اصلی همیشه کوچکترین تاریخ سیستم رو ذخیره نگه دارید.
و چند روش دیگر (همزمان با هم)
مشکل ما اتصال به اینترنته
اگر کاری کنیم که کاربر نیاز باشه هر چند وقت یه بار به اینترنت وصل بشه و ساعت دقیق را بگیره ، اون وقت برنامه دیگه هیچ مشکلی نداره.
و در این صورت اصلا نیازی به روش های دیگهی امنیتی نیست.

حجتی نیا
دوشنبه 11 مرداد 1389, 16:45 عصر
تو برنامه هایی مثه حسابداری و ادارات و ... که در تراکنش ها باید تاریخ روز اعمال بشه، هیچ وقت کسی نمیاد تاریخ رو دستکاری کنه فقط بخاطر اینکه چندروز بیشتر از برنامه استفاده کنه چون در صورت دستکاری، کل محاسبات مالی و... اونا بهم میخوره .
واسه برنامه های دیگه که تاریخ دراونا اهمیت زیادی نداره، میشه بعد از تعداد مشخصی ثبت در دیتابیس(طبق نظر دوستان) برنامه از کار بیفته و کاربر مجبور بشه که به اینترنت متصل بشه و باقی ماجرا ... بالاخره باید با یه بهانه ای کاربر رو مجبور بکنیم که کاری رو انجام بده که ما میخوایم:چشمک:

FastCode
دوشنبه 11 مرداد 1389, 16:59 عصر
راه جالبي بود. ولي چرا 17؟


منتظر ۱۷ بودم.
چون سیستم عامل ویندوز زمان رو در slice های ۱۶ میلی ثانیه ای بین thread ها تقسیم میکنه.
http://stackoverflow.com/questions/307582/how-frequent-is-datetime-now-updated-or-is-there-a-more-precise-api-to-get-the

vandermond
دوشنبه 11 مرداد 1389, 16:59 عصر
تو برنامه هایی مثه حسابداری و ادارات و ... که در تراکنش ها باید تاریخ روز اعمال بشه، هیچ وقت کسی نمیاد تاریخ رو دستکاری کنه فقط بخاطر اینکه چندروز بیشتر از برنامه استفاده کنه چون در صورت دستکاری، کل محاسبات مالی و... اونا بهم میخوره .
واسه برنامه های دیگه که تاریخ دراونا اهمیت زیادی نداره، میشه بعد از تعداد مشخصی ثبت در دیتابیس(طبق نظر دوستان) برنامه از کار بیفته و کاربر مجبور بشه که به اینترنت متصل بشه و باقی ماجرا ... بالاخره باید با یه بهانه ای کاربر رو مجبور بکنیم که کاری رو انجام بده که ما میخوایم:چشمک:
با شما موافقم. قبلا هم گفته بودم كه چون برنامه حسابداري و... هستش اگه تاريخ امروز(+ساعت و دقيقه و حتي ثانيه) برنامه رو از كامپيوتر كاربر بگيريم و غيرقابل ويرايش توسط كاربر هم باشه، مشكل تا حد زيادي حل ميشه.

zayens
دوشنبه 11 مرداد 1389, 17:27 عصر
پس از نتایج فراوان و بحث و تبادل نظر به نتیجه ی زیر رسیدم
در کد زیر همه چیز مشخصه ولی اگر کسی توضیح خواست بگه


//مقایسه تاریخ ها که اگر تاریخ سیستم
// از آخرین تاریخ جدول کمتر بود خطاست
private void checkdate(string dateNow, string LastDate,int HOUR)
{
//در برنامه ی من، تاریخ به فرم مثلا 1389/02/05 ذخیره میشود\\
if (int.Parse(dateNow.Substring(0, 4)) == int.Parse(LastDate.Substring(0, 4))& //مقایسه سال
int.Parse(dateNow.Substring(5, 2)) == int.Parse(LastDate.Substring(5, 2))&//مقایسه ماه
int.Parse(dateNow.Substring(8, 2)) == int.Parse(LastDate.Substring(8, 2))&//مقایسه روز
DateTime.Now.Hour >= HOUR)//اگر تاریخ کاملا مساوی بود یعنی در امروز هستیم پس حالا باید ساعت چک بشه
{
ErrorDate = false;
}
else if (int.Parse(dateNow.Substring(0, 4)) >= int.Parse(LastDate.Substring(0, 4))&
int.Parse(dateNow.Substring(5, 2)) >= int.Parse(LastDate.Substring(5, 2)) &//مقایسه ماه
int.Parse(dateNow.Substring(8, 2)) > int.Parse(LastDate.Substring(8, 2)))//مقایسه روز
{
ErrorDate = false;
}
else
{
ErrorDate = true;
//این فرم ارور است که بعد از اجرا اجازه ی کار گرفته میشود و برنامه بسته میشود
CHECKERROR frm = new CHECKERROR();
frm.ShowDialog();
}
//برای انقضا
firstDate = new DATE();
firstDate.MaxDateSelect();
string maxDate=firstDate.DvDATE[0]["FIRSTDATE"].ToString();
//maxDate اولین تاریخی که به برنامه وارد میشه در قرار میگیره در
if (int.Parse(dateNow.Substring(0, 4)) >= int.Parse(maxDate.Substring(0, 4)) + 1)
{//در کد بالا ، مثلا تاریخ 1390=1+1389 با تاریخ امروز چک میشه
if (int.Parse(dateNow.Substring(5, 2)) >= int.Parse(maxDate.Substring(5, 2)))
//مقایسه ماه
if (int.Parse(dateNow.Substring(8, 2)) >= int.Parse(maxDate.Substring(8, 2)))
//مقایسه روز
MessageBox.Show("END of PROGRAM");
chk = new USERS();
chk.LockPassUp("");//شبیه سازی حالت اول برنامه
//این فرم ارور است که بعد از اجرا اجازه ی کار گرفته میشود و برنامه بسته میشود
CHECKLOCK CHL = new CHECKLOCK();
CHL.ShowDialog();
}

mjelecom
دوشنبه 11 مرداد 1389, 17:38 عصر
سلام
البته در هر صورتی و با هر روشی که کار کنیم، بالاخره میشه برنامه رو کرک کرد. اما اگه بخوایم
یه کار در سطح متوسط انجام بدیم:
میشه تعداد تیک ها رو شمرد و ضبط کرد. بسته به نوع برنامه، اگه ما این برنامه رو برای یه
فروشگاه می نویسیم که ماکزیمم 15 ساعت (8 صبح تا 11 شب) بازه می نویسیم کافیه ماکزیمم
زمان رو محاسبه و مورد بررسی برنامه قرار بدیم.
در واقع ما برنامه رو ثانیه ای می فروشیم. مثل اکانت اینترنت. کاملا هم برای ملت جا افتاده است.
یکسال= 31536000 تیک.

zayens
سه شنبه 12 مرداد 1389, 23:27 عصر
سلام
البته در هر صورتی و با هر روشی که کار کنیم، بالاخره میشه برنامه رو کرک کرد. اما اگه بخوایم
یه کار در سطح متوسط انجام بدیم:
میشه تعداد تیک ها رو شمرد و ضبط کرد. بسته به نوع برنامه، اگه ما این برنامه رو برای یه
فروشگاه می نویسیم که ماکزیمم 15 ساعت (8 صبح تا 11 شب) بازه می نویسیم کافیه ماکزیمم
زمان رو محاسبه و مورد بررسی برنامه قرار بدیم.
در واقع ما برنامه رو ثانیه ای می فروشیم. مثل اکانت اینترنت. کاملا هم برای ملت جا افتاده است.
یکسال= 31536000 تیک.
من که متوجه نشدم.
تیک دیگه چیه؟

2ndesigner
چهارشنبه 13 مرداد 1389, 03:43 صبح
به نظر من برای قفل گذاری حرفه ای باید یه مدت زمانی (مثلا چند ساعت یا چند دقیقه) رو در نظر گرفت و با یه تایمر داخل برنامه از مقدار اون کم کنیم.

من یه چیزی پیدا کردم شاید به درد بخوره.
http://www.codeproject.com/KB/cs/Trial_Maker.aspx

اگه مطالب تکراری گذاشتم منو ببخشید چون وقت نکردم مطالب قبلی رو بخونم...

javad_r_85
چهارشنبه 13 مرداد 1389, 07:38 صبح
من تاریخ ها را به فرم 05/08/1389 ذخیره میکنم.
مقایسه بزرگی و کوچکی چه طور باید انجام بشه؟
اگر لازمه که تفکیک کنم چه طور این کار را بکنم؟




اگر تاریخ را به صورت رشته دریافت کنید و تایخ را به این صورت وار د نمایید می تو نید مقایسه کنید
1389/08/05

طول مقادیر باید برابر باشند مثلا اگر به جای 05 کاربر 5 وارد کند به مشکل بر میخورید البته می تونید از کمبو باکس استفاده کنید

mjelecom
چهارشنبه 13 مرداد 1389, 07:40 صبح
من که متوجه نشدم.
تیک دیگه چیه؟


میشه تعداد تیک ها رو شمرد و ضبط کرد.
در واقع ما برنامه رو ثانیه ای می فروشیم. مثل اکانت اینترنت.


سلام
عزیزم منظور اینه که ما کاری به کار تاریخ و روز و ماه و ... نداریم. بلکه به تعداد ثانیه هایی که
برنامه بازه نگاه می کنیم. اینجوری همه چیز توی برنامه ات درونیه و در واقع شما به خریدار،
نرم افزار رو ثانیه ای می فروشید.
مثلا برنامه ای که با لایسنس 10368000 ثانیه فروخته میشه، در واقع برنامه ای است که 4 ماه
بصورت فول تایم کار می کند.
اگه فکر می کنی ممکنه این کار حلال نباشه (که هست) میتونی شمارش رو بعد از اولین
تراکنش انجام بدید، نه به محض باز شدن برنامه.

zayens
چهارشنبه 13 مرداد 1389, 09:13 صبح
سلام
عزیزم منظور اینه که ما کاری به کار تاریخ و روز و ماه و ... نداریم. بلکه به تعداد ثانیه هایی که
برنامه بازه نگاه می کنیم. اینجوری همه چیز توی برنامه ات درونیه و در واقع شما به خریدار،
نرم افزار رو ثانیه ای می فروشید.
مثلا برنامه ای که با لایسنس 10368000 ثانیه فروخته میشه، در واقع برنامه ای است که 4 ماه
بصورت فول تایم کار می کند.
اگه فکر می کنی ممکنه این کار حلال نباشه (که هست) میتونی شمارش رو بعد از اولین
تراکنش انجام بدید، نه به محض باز شدن برنامه.
روش خوبیه اما نه برای برنامه ای که دقیقا یک سال لازمه کار کنه
همونطور که گفتین برنامه به صورت فول تایم 4 ماه کارمیکنه.
خوب اگر به طور متوسط کاربر روزی 8 ساعت کار کنه دقیقا بعد یه سال برنامه به انتها می رسه. اما اگر روزی 4 ساعت شد زمان دو برابر میشه.یعنی کاربر 2 سال با برنامه میتونه کار کنه.
برای من مهم نیست کاربر بعد از نصب برنامه چقدر میخواد با برنامه کار کنه.برای ما مهم اینه که انقضای برنامه را 1 ساله در نظر بگیریم.