PDA

View Full Version : یکبار مصرف کردن برنامه



dele_ghamgin_2008
چهارشنبه 17 اردیبهشت 1393, 23:20 عصر
من کدهای زیادی در این سایت جستجو کردم ولی هیچکدومش کار نکرد . دستوری که فقط برنامه را برای یکبار اجرا کند را می خواستم . لطفاً اگر اطلاعاتی از خودتان دارید در اختیارم بگذارید چون کدهای موجود در این سایت کار نکرد. متشکرم

ordebehesht
چهارشنبه 17 اردیبهشت 1393, 23:58 عصر
یعنی ژی اگه منظورت اینه که با کلیک روی ایکن برنامه برنامه اجرا بشه و اگه مجددا این کار رو کردیم احرا نشه چون قبلا یک نسخه از اون رو اجرا کردیم به سایت csharp.ir یه سر بزن

hidden68
پنج شنبه 18 اردیبهشت 1393, 01:58 صبح
من کدهای زیادی در این سایت جستجو کردم ولی هیچکدومش کار نکرد . دستوری که فقط برنامه را برای یکبار اجرا کند را می خواستم . لطفاً اگر اطلاعاتی از خودتان دارید در اختیارم بگذارید چون کدهای موجود در این سایت کار نکرد. متشکرم

ببین برای این کار
تنها یک راه وجود داره
اونم اینه که شما یه متغییر میگیری
در ابتدا مقدارش رو true میزاری
وقتی برنامه اجرا شد اون مقدارو false میکنی
هر بارم قبل اجرای برنامه چک میکنی اگه true بود اجرا شه
اگه نه اجرا نشه
و این متغییرم در بانک ذخیره میکنی
ازونجایی که برای همچین الگوریتم ساده ایی تاپیک زدی
حتم دارم کار با بانک رو بلد نیستی
پیشنهادم به شما دوست عزیز کار با بانک اطلاعاتیه sql servere
موفق باشید

سوداگر
پنج شنبه 18 اردیبهشت 1393, 03:44 صبح
من کدهای زیادی در این سایت جستجو کردم ولی هیچکدومش کار نکرد . دستوری که فقط برنامه را برای یکبار اجرا کند را می خواستم . لطفاً اگر اطلاعاتی از خودتان دارید در اختیارم بگذارید چون کدهای موجود در این سایت کار نکرد. متشکرم

راه اصولی اینکار استفاده از Mutex هست:
فایل program.cs را باز کنید و به using ها using System.Threading رو اضافه کنید و سپس به جای کد:
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

از این کد استفاده کنید:

static String _mutexID = "a8b65a4f-9ffb-46fd-a432-bdd3338c423e";
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);

Boolean _isNotRunning;
Mutex _mutex = new Mutex(true, _mutexID, out _isNotRunning);
if (_isNotRunning)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("برنامه هم اکنون در حال اجراست");
return;
}

()Form1 نام فرم اصلی برنامه است

موفق باشید

khokhan
پنج شنبه 18 اردیبهشت 1393, 09:49 صبح
من کدهای زیادی در این سایت جستجو کردم ولی هیچکدومش کار نکرد . دستوری که فقط برنامه را برای یکبار اجرا کند را می خواستم . لطفاً اگر اطلاعاتی از خودتان دارید در اختیارم بگذارید چون کدهای موجود در این سایت کار نکرد. متشکرم

........................................... singleton
http://www.codeproject.com/Articles/25901/Singleton-application-in-C-with-redirection-of-arg

dele_ghamgin_2008
پنج شنبه 18 اردیبهشت 1393, 10:11 صبح
راه اصولی اینکار استفاده از Mutex هست:
فایل program.cs را باز کنید و به using ها using System.Threading رو اضافه کنید و سپس به جای کد:
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

از این کد استفاده کنید:

static String _mutexID = "a8b65a4f-9ffb-46fd-a432-bdd3338c423e";
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);

Boolean _isNotRunning;
Mutex _mutex = new Mutex(true, _mutexID, out _isNotRunning);
if (_isNotRunning)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("برنامه هم اکنون در حال اجراست");
return;
}

()Form1 نام فرم اصلی برنامه است

موفق باشید

ممنون از این کد . ولی این کد همون کدی بود که گفتم هرجا گشتم همه اینو دادن . این کد واسه اینه که برنامه رو نشه دوبار همزمان اجراش کرد . نه من اینو نمی خوام . من می خواهم کاری کنم نرم افزار یکبار مصرف باشه . یعنی یکبار بازش کرد و ازش استفاده کرد و برنامه رو بست . دیگه نشه ازش استفاده کرد. تا اینکه من خودم اجازشو بدم .

dele_ghamgin_2008
پنج شنبه 18 اردیبهشت 1393, 10:17 صبح
........................................... singleton
http://www.codeproject.com/Articles/25901/Singleton-application-in-C-with-redirection-of-arg

این هم جواب نداد

Ali.hitter
پنج شنبه 18 اردیبهشت 1393, 13:10 عصر
دوست عزیز استفاده از بانک اطلاعاتی رو بلدی؟

dele_ghamgin_2008
پنج شنبه 18 اردیبهشت 1393, 14:22 عصر
دوست عزیز استفاده از بانک اطلاعاتی رو بلدی؟

خیر. نیازی هم به بانک ندارم چون نباید در بانک ذخیره شود.

از طریق رجیستری مشکلم را حل کردم . متشکرم

محمد آشتیانی
پنج شنبه 18 اردیبهشت 1393, 14:26 عصر
سلام
این ایده شاید کمک کنه


توضیح:
تو فولدری که آپلود کردم 3 تا فایل اجرایی موجوده به نام های TestApp که مثلا برنامه اصلی شما هست ، Lock که وظیفه قفل کردن فایل اجرایی رو داره و Activator که با کد فعالسازی برنامه رو مجددا فعال میکنه (البته من تو ساده ترین حالت ممکن درست کردم تا ایده رو انتقال بدم)

فایل TestApp بعد از اولین اجرا غیر قابل استفاده میشه و راه اجرایی کردن مجدد اون اینه که برنامه Activator باز بشه و بعد از وارد کردن کد فعالسازی که شما به مشتری میدی برنامه TestApp رو مجددا فعال میکنه (البته اینجا کد فعالسازی واقعی استفاده نکردم - عدد 1234 رو وارد کنید)
البته واضحه که با اجرای مجدد TestApp برنامه قفل میشه ، راه حل اینه که برنامه Activator بعد از فعالسازی یه فایل متنی رمز شد هم تو مسیر برنامه بسازه و برنامه اصلی چک کنه که اگر اون فایل وجود داشت دیگه قفل نشه.


* کدهای کامپایل شده هر سه پروژه رو توی یک فولدر کپی و اجرا کنید.

فایل های ضمیمه TestVB سورس هست و TestEXE فایل اجرایی


موفق باشید

سوداگر
پنج شنبه 18 اردیبهشت 1393, 18:04 عصر
از طریق رجیستری مشکلم را حل کردم . متشکرم

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

behnam-soft
پنج شنبه 18 اردیبهشت 1393, 18:42 عصر
دوست عزیز خودت رو اینقدر اذیت نکن، شما چرا از پراپرتیز خود برنامه ات استفاده نمی کنی؟ یه متغیر در اونجا تعریف کن، بعد از اجرای برنامه مقدارش رو فالس کن و خلاص ! خیلی ساده و شیک و مجلسی و بدور از پیچیدگی !! سر جم 2 تا خط کد نمیشه !!!

dele_ghamgin_2008
یک شنبه 21 اردیبهشت 1393, 12:15 عصر
دوست عزیز خودت رو اینقدر اذیت نکن، شما چرا از پراپرتیز خود برنامه ات استفاده نمی کنی؟ یه متغیر در اونجا تعریف کن، بعد از اجرای برنامه مقدارش رو فالس کن و خلاص ! خیلی ساده و شیک و مجلسی و بدور از پیچیدگی !! سر جم 2 تا خط کد نمیشه !!!
میشه لطف کنید و بگید که چگونه این کار امکان پذیر است ؟ چون نمی دونم کدام پروپرتی رو میشه بعد اجرا تبدیل به false و ترو کرد که در حافظه باقی بماند. ممنون میشم کد را ارسال نمایید.