PDA

View Full Version : فایل exe فقط یکبار اجرا شود



Samsam2010
پنج شنبه 10 شهریور 1390, 14:57 عصر
سلام
سوالم یه نمول فرق داره تا آخر بخونید!

دوستان من میخوام یه فایل exe بسازم که فقط یه بار اجرا بشه ! از بابتی نگران اینم که حالا من یه فایل exe ساختم که یه بار اجرا بشه ! اگر قبلش کسی که میخواد استفاده کنه بیاد ازش چند تا کپی بگیره چی ؟ مثلا ده تا کپی بگیره بعد اجرا کنه ! اینجوری بد بخت میشم ! راهی هست فایل exe من یه شناسه خاص داشته باشه جوری که با این شناسه از باز شدن مکررش جلو گیری کنم ؟

ArashRoshan
پنج شنبه 10 شهریور 1390, 16:13 عصر
سلام ، من خیلی دقیق متوجه نشدم ولی من خودم وقتی بخوام برنامم یک بار باز شه ، میرم داخل Properties پروژم , داخل سر برگ Application ، یک گزینه به نام Make Single Instance Application رو فعال می کنم .

Samsam2010
پنج شنبه 10 شهریور 1390, 16:27 عصر
حق با شماست ! اما من Make Single Instance Application رو فعال می کنم . خب ! کاربری که میخواد فایل exe من رو اجرا کنه ! قبلش میره یه کپی از فایل exe من میگیره! فایل exe میشه exe 1 و exe 2 خب
فایل exe 1 رو باز میکنه کارش که تموم شد exe 2 رو باز میکنه ! من میخوام تحت هر شرایطی در هر سیستمی فقط و فقط فایل exe من یک بار اجرا بشه!

bnnoor
پنج شنبه 10 شهریور 1390, 19:27 عصر
برای اینکار بهتره از یک مقدار در رجیستر استفاده کنید به این صورت که بعد از اولین خروج مقدار مثلا صفر بشه و در هر ورود به برنامه چک بشه در صورتی که صفر بود وارد برنامه نشه به این صورت هر چندتا کپی هم که داشتید همون مقدار رجیستر رو بررسی میکنه و چون صفره وارد نمیشه . که البته اینم روش داره برای اینکه بشه برنامه رو اجرا کرد. باید اینو در نظر بگیرید که هرحقه ای هم استفاده کنید بالاخره راه حلی داره .

Samsam2010
جمعه 11 شهریور 1390, 00:38 صبح
باید اینو در نظر بگیرید که هرحقه ای هم استفاده کنید بالاخره راه حلی داره .

100% باهات موافقم
اما جواب 2+2 راحت تره یا 100*25-54+2/3*1.5 !!!
رجیستری رو به کسی معرفی نمیکنم ! چون اگر طرفی که میخواد برنامه رو اجرا کنه یه هوک ساده روی رجیستری بندازه راحت ردتو میزنه ! من خودم میخوام از اینترنت استفاده کنم ! برنامه قبل از اینکه اجرا بشه خودش رو روی اینترنت چک کنه ! اما یه مشکل دارم !

من میتونم یه کاری کنم که فایل exe فقط روی یه سیستم باز بشه مثلا به همین روش رجیستری ! اما اگر طرف همون فایل exe رو بده به کس دیگه ای چی؟ من فقط میخوام فایل Exe در یک سیستم و فقط برای یکبار اجار بشه !!!!! حتی اگر فایل exe رو به کس دیگه ای هم داد روی سیستم اون طرف باز نشه!

alimanam
جمعه 11 شهریور 1390, 01:23 صبح
با سلام

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

موفق باشید ./

Samsam2010
شنبه 12 شهریور 1390, 01:38 صبح
داداش کارت حرفت همش درست منم همین کار رو کردم !

اما مشکل من اینجاست فایل exe که میدم به کاربر برای کاربر کلید تولید میکنه اگر اون فایل exe دست یکی دیگه بیفته فاتحه برنامه خونده شده ! من میخوام فایل Exe بعد از اجرا شدن تحت هیچ شرایطی در هیچ کامپیوتر دیگه ای باز نشه ! این روشی که شما در بالا گفتی فقط از باز شدن در سیستم یک کاربر جلو گیری میکنه در صورتی که فایل exe به یک سیستم دیگه منقل بشه باز هم کار میکنه ! من میخوام فایل Exe بعد از اجرا خودشو ثبت کنه نه مشخصات سیستم کاربر رو !

mohsencom
شنبه 12 شهریور 1390, 03:01 صبح
عزیز من کاری نداره که...شما در فرم ورود به برنامتون باید یه شرط خاص رو اول چک کنید...مثلا چک کنید اگه اسم یوزر این کامپیوتر فلان چیز هست یا هر چیزی که مختص اون کامپیوتر مورد نظرتون هست بیاد مثلا یه پیغامی نشون بده و از برنامه خارج بشه

شما وقتی میخواید روی یه کامپیوتر خاص اجرا بشه خب حتما باید مشخصات خاص اون کامپیوترو که متمایز هست با کامپیوترهای دیگه رو بدونید و یا توجه به این دانستتون یک شرط بذارید برای فرم ورود به برنامه

موفق باشید./

MohsenPS
شنبه 12 شهریور 1390, 03:57 صبح
سامان جان منظور شما رو دو جور مختلف میشه فهمید:

1) شما می خوای یه فایل اجرایی داشته باشی که کلا در کل هستی قراره یک بار اجرا بشه:
خب اگه اینطوره که حتا به بانک رو هاست هم احتیاج نداری. کافیه یه متغیر رو هاست تعریف کنی و به محض اولین اجرا مقدار اون رو تغییر بدی و والسلام.

2) شما می خوای چند تا فایل اجرایی مشابه عرضه کنی که هر کدوم فقط یک بار اجرا بشه:
در این صورت برای هر کدوم از این فایلها باید یک Serial Number خاص قرار بدی, هر فایل به محض اجرا شدن سریال خودش رو توی بانکت ثبت میکنه و دیگه نمیتونه اجرا بشه.

Behzad_MCP
شنبه 12 شهریور 1390, 12:47 عصر
دوستان پاسخهای جالبی دادند ولی کلاسی برای این کار وجود داره که اجازه میده فقط یک اینستنس از برنامه ران بشه به اسم Mutex لطفا کد زیر را توی لود فرم اصلیتون بنویسید دیگه برنامتون فقط یکبار اجرا میشه

Imports System.Threading
Dim oneMutex As Mutex = Nothing
Const MutexName As String = "RUNMEONLYONCE"
Try ' Try and open the Mutex
oneMutex = Mutex.OpenExisting(MutexName)
Catch ex as WaitHandleCannotBeOpenedException
' Cannot open the mutex because it doesn't exist
End Try
' Create it if it doesn't exist
If oneMutex Is Nothing Then
oneMutex = New Mutex(True, MutexName)
Else
' Close the mutex and exit the application
' because we can only have one instance
oneMutex.Close()
Return
End If

Samsam2010
شنبه 12 شهریور 1390, 13:03 عصر
دوستان پاسخهای جالبی دادند ولی کلاسی برای این کار وجود داره که اجازه میده فقط یک اینستنس از برنامه ران بشه به اسم Mutex لطفا کد زیر را توی لود فرم اصلیتون بنویسید دیگه برنامتون فقط یکبار اجرا میشه

Imports System.Threading
Dim oneMutex As Mutex = Nothing
Const MutexName As String = "RUNMEONLYONCE"
Try ' Try and open the Mutex
oneMutex = Mutex.OpenExisting(MutexName)
Catch ex as WaitHandleCannotBeOpenedException
' Cannot open the mutex because it doesn't exist
End Try
' Create it if it doesn't exist
If oneMutex Is Nothing Then
oneMutex = New Mutex(True, MutexName)
Else
' Close the mutex and exit the application
' because we can only have one instance
oneMutex.Close()
Return
End If
دست درد نکنه داداش اما من زدم ! 10 بار اجرا شد !!!!! :لبخند: باید تغییر خاصی بدم توی کد ؟
http://xpx.lx10.net/images/h7shy93ixvctxb7ksl0.png

Samsam2010
شنبه 12 شهریور 1390, 13:05 عصر
ببینید دوستان من بزارید براتون اینجوری داستان رو تعریف کنم !

من یه برنامه نوشتم ! این برنامه به تعداد n فروش رفته ! هر کدام از این برنامه ها هنگام خرید لایسنس به سایت مراجعه میکنند و پس از پرداخت یک فایل exe میگیرند (یک فایل exe مشترک ) این فایل exe قرار است یک کلید برای کار با برنامه تولید کند ! اما فقط یکبار !

حالا بریم توی سناریو !

من رفتم فایل exe رو گرفتم !
قبل از باز کردن ! یه کپی میگیرم ازش میدم به ممد آقا :بامزه: میگم ممد آقا تو نرو این برنامه رو بخر فقط برو این فایل exe رو اجرا کن کلید رو بگیر بعد برو حالشو ببر !

خب ! هر کدوم از این فایل exe ها فقط یکبار اجرا میشن اما توی n سیستم ! من میخوام فایل exe ام فقط در یک سیستم ! و فقط برای یک بار اجرا شود !

روشی که شما دوستان عزیز میفرمایید ! فقط یک بار اجرا میشود اما در همه سیستم ها !

هر سیستم یه شناسه خاص داره ! درسته مثلا ! همین CPU ID و Serial HDD و ...

حالا روشی هست که هر فایل exe یه شناسه خاص داشته باشه !؟؟ من شناسه اون فایل exe رو در اینترنت ثبت کنم تمومه دیگه هیچ جای دنیا نمیشه اجراش کرد !

Behzad_MCP
شنبه 12 شهریور 1390, 14:27 عصر
دوست عزیز فقط باید یه خط کد بهش اضافه میشد لطفا دانلود کن :)

Samsam2010
شنبه 12 شهریور 1390, 14:47 عصر
ببینید دوستان من بزارید براتون اینجوری داستان رو تعریف کنم !

من یه برنامه نوشتم ! این برنامه به تعداد n فروش رفته ! هر کدام از این برنامه ها هنگام خرید لایسنس به سایت مراجعه میکنند و پس از پرداخت یک فایل exe میگیرند (یک فایل exe مشترک ) این فایل exe قرار است یک کلید برای کار با برنامه تولید کند ! اما فقط یکبار !

حالا بریم توی سناریو !

من رفتم فایل exe رو گرفتم !
قبل از باز کردن ! یه کپی میگیرم ازش میدم به ممد آقا :بامزه: میگم ممد آقا تو نرو این برنامه رو بخر فقط برو این فایل exe رو اجرا کن کلید رو بگیر بعد برو حالشو ببر !

خب ! هر کدوم از این فایل exe ها فقط یکبار اجرا میشن اما توی n سیستم ! من میخوام فایل exe ام فقط در یک سیستم ! و فقط برای یک بار اجرا شود !

روشی که شما دوستان عزیز میفرمایید ! فقط یک بار اجرا میشود اما در همه سیستم ها !

هر سیستم یه شناسه خاص داره ! درسته مثلا ! همین CPU ID و Serial HDD و ...

حالا روشی هست که هر فایل exe یه شناسه خاص داشته باشه !؟؟ من شناسه اون فایل exe رو در اینترنت ثبت کنم تمومه دیگه هیچ جای دنیا نمیشه اجراش کرد !

آقا بهزاد برای کدت ازت ممنونم ! بازم برام کار نکرد ! چند بار اجرا میشه !

برای این سناریویی که گفتم روشی سراغ دارید؟

Behzad_MCP
شنبه 12 شهریور 1390, 14:55 عصر
بیخیال دوست عزیز نمیشه من تستش کردم درسته !!!!

این کلاس Mutex با ابجکتهای Kernel ویندوز سینک میشن و در سطح سیستم عامل شناخته میشن


Synchronization with Windows Kernel Objects At the operating-system level, there
are three kernel objects—Mutex, Semaphore, and Event—whose job is to allow you to
perform thread synchronization.

alimanam
شنبه 12 شهریور 1390, 20:25 عصر
با سلام

آخر داستان چرا اینجوری تموم شد !!! من که آخرش متوجه نشدم کدوم یکی از اتفاقات زیر باید میافتاد !!!!

1- برنامه فقط یک بار بر روی سیستم اجرا بشه ! ( یعنی اینکه بعد از اجرای برای بار اول دیگه رو همون سیستم هم اصلاً اجرا نشه ! حتی اگه سیستم عامل هم عوض بشه !!! )
2- برنامه فقط یک پروسه در حافظه داشته باشه ( برنامه در حالت اجرا یکتا باشه یعنی exe دیگه ایی از اون برنامه هنگامی که exe اولی بسته نشده قابل اجرا نباشه )
3- برنامه فقط روی یک سیستم قابلیت اجرا داشته باشه یعنی روی هر سیستم دیگه ایی به هیچ وجه من الوجود قابل اجرا نباشه .
4 - گزینه هیچکدام :اشتباه:

حالا کدومشه خدا عالمه ! آخه این دوستمون توی پستهاش اگه یه نگاهی بندازین هر پستش نزدیک به یکی از این موارد اشاره شده در بالاست !!!



دوست عزیز فقط باید یه خط کد بهش اضافه میشد لطفا دانلود کن :) آقا بهزاد واسه اینکار که احتیاجی به کد نویسی نیست میشد خیلی راحت یه تیک ساده رو بزنی !

http://20uploads.com/images/1390/shahrivar/13150947201.jpg

موفق باشید ./

omid-vbAuto
شنبه 12 شهریور 1390, 20:34 عصر
با سلام

آخر داستان چرا اینجوری تموم شد !!! من که آخرش متوجه نشدم کدوم یکی از اتفاقات زیر باید میافتاد !!!!

1- برنامه فقط یک بار بر روی سیستم اجرا بشه ! ( یعنی اینکه بعد از اجرای برای بار اول دیگه رو همون سیستم هم اصلاً اجرا نشه ! حتی اگه سیستم عامل هم عوض بشه !!! )
2- برنامه فقط یک پروسه در حافظه داشته باشه ( برنامه در حالت اجرا یکتا باشه یعنی exe دیگه ایی از اون برنامه هنگامی که exe اولی بسته نشده قابل اجرا نباشه )
3- برنامه فقط روی یک سیستم قابلیت اجرا داشته باشه یعنی روی هر سیستم دیگه ایی به هیچ وجه من الوجود قابل اجرا نباشه .
4 - گزینه هیچکدام :اشتباه:

حالا کدومشه خدا عالمه ! آخه این دوستمون توی پستهاش اگه یه نگاهی بندازین هر پستش نزدیک به یکی از این موارد اشاره شده در بالاست !!!

موفق باشید ./

علی داداشی شما ناراحت نشو.

این مواردی هم که خودتون مطرح کردین خیلی عالیه هستش .هر کدومو بلدین توضیح بدین.مخصوصا گزینه 4 .:بامزه:

Samsam2010
شنبه 12 شهریور 1390, 21:06 عصر
با سلام

آخر داستان چرا اینجوری تموم شد !!! من که آخرش متوجه نشدم کدوم یکی از اتفاقات زیر باید میافتاد !!!!

1- برنامه فقط یک بار بر روی سیستم اجرا بشه ! ( یعنی اینکه بعد از اجرای برای بار اول دیگه رو همون سیستم هم اصلاً اجرا نشه ! حتی اگه سیستم عامل هم عوض بشه !!! )
2- برنامه فقط یک پروسه در حافظه داشته باشه ( برنامه در حالت اجرا یکتا باشه یعنی exe دیگه ایی از اون برنامه هنگامی که exe اولی بسته نشده قابل اجرا نباشه )
3- برنامه فقط روی یک سیستم قابلیت اجرا داشته باشه یعنی روی هر سیستم دیگه ایی به هیچ وجه من الوجود قابل اجرا نباشه .
4 - گزینه هیچکدام :اشتباه:

حالا کدومشه خدا عالمه ! آخه این دوستمون توی پستهاش اگه یه نگاهی بندازین هر پستش نزدیک به یکی از این موارد اشاره شده در بالاست !!!


آقا بهزاد واسه اینکار که احتیاجی به کد نویسی نیست میشد خیلی راحت یه تیک ساده رو بزنی !

http://20uploads.com/images/1390/shahrivar/13150913601.jpghttp://20uploads.com/images/1390/shahrivar/13150913601.jpghttp://20uploads.com/images/1390/shahrivar/13150913601.jpg

موفق باشید ./


گزینه یک حلش کردم !

برای گزینه دو هم راحته :
' Get the full name of the process for the current application.

Dim ModuleName, ProcessName As String

ModuleName = Process.GetCurrentProcess.MainModule.ModuleName

ProcessName = System.IO.Path.GetFileNameWithoutExtension(ModuleN ame)



' Check for other processes with this name.

Dim Proc() As System.Diagnostics.Process

Proc = Process.GetProcessesByName(ProcessName)

If Proc.Length > 1 Then

' (There is another instance running.)
MsgBox("There is another instance running.")
Application.Exit()


End If

گزینه سه ! من گیر همینم تو رو خدا راهی وجود داره بهم بگید !
گزینه چهار !؟!!؟! :متعجب:

alimanam
شنبه 12 شهریور 1390, 21:40 عصر
گزینه سه ! من گیر همینم تو رو خدا راهی وجود داره بهم بگید !

میتونی از مشخصات سیستم هدف استفاده کنی و کدی بنویسی که برنامه با توجه به اون مشخصات اجرا بشه فقط برای هرکاربر باید یک نسخه جدید ( کلید داخلی که در کد برنامه گذاشتی استفاده کنی ) کامپایل کنی ! برای به دست اوردن مشخصات سیستم کاربر هم میتونی از برنامه کمکی استفاده کنی .

موفق باشید ./

Samsam2010
یک شنبه 13 شهریور 1390, 05:20 صبح
علی آقا روشم رو عوض کردم اون چیزی که من میخواستم تقریبا غیر ممکن بود! اگر خدا بخواد بعد از ریلیز کردن برنامه ! یه آموزش خوب در زمینه قفل نرم افزاری میزارم تا دوستانی که میخواهند برنامه برای فروش عموم بنویسند بتونن ازش استفاده کنن

Mani_rf
یک شنبه 13 شهریور 1390, 10:46 صبح
دوست عزیز فقط باید یه خط کد بهش اضافه میشد لطفا دانلود کن :)

من هم تست کردم چند بار اجرا میشه.

Behzad_MCP
یک شنبه 13 شهریور 1390, 11:12 صبح
آقا بهزاد واسه اینکار که احتیاجی به کد نویسی نیست میشد خیلی راحت یه تیک ساده رو بزنی !

دوست عزیز یه جاهایی لازمه که کد بنویسیم چون یه وقتا اون تیکا رو نمیشه زد

74806



من هم تست کردم چند بار اجرا میشه.

نمیدونم چرا رو سیستم عامل شما چند بار اجرا میشه ولی MicroSoft میگه نباید بشه مثالی که زده بودم از کتابه MCTS-.Net Framework Foundation انتشار خود MS بود و رو سیستم عامل خودم فقط یک بار اجرا میشه !!!!