PDA

View Full Version : سوال: جلوگیری اجرای دوباره برنامه



iradata
سه شنبه 19 مرداد 1389, 19:27 عصر
سلام

چطور میشه در vb2008 جلوگیری کرد از اجرای دوباره برنامه

r00tkit
سه شنبه 19 مرداد 1389, 19:33 عصر
سلام
راه اول:

System.Threading.Mutex

راه دوم: WMI

راه سوم: Searching the process table

فقط یه سرچ ساده نیاز داری

Saman_12
سه شنبه 19 مرداد 1389, 19:34 عصر
سلام.
خیلی ساده هست کافیه توی تنظیمات ایجاد فایل گزینه ی Make single instance appliction رو تیک بزنید.
توضیح بیشتر :
توی پنجره ی Solution Explorer بالای My Project اسم فایلت هست روی اون راست کلیک کن و گزینه ی پروپرتیس رو انتخاب ,بعد هم توی صفحه ی اول میتونی اون گزینه رو ببینی.

iradata
سه شنبه 19 مرداد 1389, 19:41 عصر
سلام.
خیلی ساده هست کافیه توی تنظیمات ایجاد فایل گزینه ی Make single instance appliction رو تیک بزنید.
توضیح بیشتر :
توی پنجره ی Solution Explorer بالای My Project اسم فایلت هست روی اون راست کلیک کن و گزینه ی پروپرتیس رو انتخاب ,بعد هم توی صفحه ی اول میتونی اون گزینه رو ببینی.

خیلی ممنون از جواب خوبت چطور میشه در زمان اجرای برنامه اگر برنامه دوباره اجرا شد یک msgbox به نمایش دربیاد که بگه برنامه در حال اجرا است

smgraphic
سه شنبه 19 مرداد 1389, 20:30 عصر
سایت گرفتم و کارم میکنه


' 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
MsgBox("There is another instance running.")
Close()
Else
MsgBox("There are no other instances running.")
End If
End Sub

smgraphic
سه شنبه 19 مرداد 1389, 20:31 عصر
راستی کد بالا رو تو قسمت FormLoad برنامه کپی کن.
موفق باشی عزیز

Saman_12
چهارشنبه 20 مرداد 1389, 00:04 صبح
روش های ابتکاری هم جواب میده مثلا.(این توی فورم لود) :


If GetSetting(My.Application.Info.AssemblyName, "Show", "Show", False) = True Then _
MsgBox("This Program Is Running", MsgBoxStyle.Critical, "Worning") : End
SaveSetting(My.Application.Info.AssemblyName, "Show", "Show", True)

این هم توی Closeing :


SaveSetting(My.Application.Info.AssemblyName, "Show", "Show", False)

Saman_12
چهارشنبه 20 مرداد 1389, 00:56 صبح
سایت گرفتم و کارم میکنه


' 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
MsgBox("There is another instance running.")
Close()
Else
MsgBox("There are no other instances running.")
End If
End Sub

در ضمن اینو یادم رفت بگم که لازم نیست 12 خط کد نویسی انجام بشه و تنها با این کد که کار همان کد شما رو میکنه هم میشه این کار رو انجام داد.(این کد در اصل کد اصلاح شده شماست) توی فورم لود :


Dim proce As System.Diagnostics.Process = Process.GetCurrentProcess
If proce.ProcessName = My.Application.Info.AssemblyName Then _
MsgBox("This Program Is Running", MsgBoxStyle.Critical, "Worning") : End

hero4000
چهارشنبه 20 مرداد 1389, 08:51 صبح
روش های ابتکاری هم جواب میده مثلا.(این توی فورم لود) :


If GetSetting(My.Application.Info.AssemblyName, "Show", "Show", False) = True Then _
MsgBox("This Program Is Running", MsgBoxStyle.Critical, "Worning") : End
SaveSetting(My.Application.Info.AssemblyName, "Show", "Show", True)

این هم توی Closeing :


SaveSetting(My.Application.Info.AssemblyName, "Show", "Show", False)


خوب دوست من ميشه بگي اگه يک وقت درحال اجراي برنامه برق رفت بعد برنامه چجوري اجرا ميشه :متفکر:

Saman_12
چهارشنبه 20 مرداد 1389, 10:12 صبح
خوب روش های ابتکاری مشکلات خودشون رو دارند.:لبخند:

hero4000
چهارشنبه 20 مرداد 1389, 14:47 عصر
البته بيشتر بستگي به مبتکرش داره دوست عزيز :لبخند:

vbworm
چهارشنبه 20 مرداد 1389, 15:11 عصر
سلام.
خیلی ساده هست کافیه توی تنظیمات ایجاد فایل گزینه ی Make single instance appliction رو تیک بزنید.
توضیح بیشتر :
توی پنجره ی Solution Explorer بالای My Project اسم فایلت هست روی اون راست کلیک کن و گزینه ی پروپرتیس رو انتخاب ,بعد هم توی صفحه ی اول میتونی اون گزینه رو ببینی.

وقتی به همین راحتی میشه این کار رو کرد، دیگه کد نویسی برای چی آخه؟ سری که درد نمیکنه رو که دستمال نمیبندند!!!

Saman_12
چهارشنبه 20 مرداد 1389, 16:13 عصر
شاید یه نفر به خواد به کاربر بگه :
نکن این کار را که میفهمم من * زه زیرکی خود در شک نیم من
ای که تازه به دوران رسیده ای * هنوز که به خانه تان نرسیده ای
آن ویروس درنده نتواند کند کار * زه ایکیوییه هوش خود شک بدار
:قهقهه:قطعه ی بالا هیچ معنی و ارزشی ندارد و فقط محض خنده شما دوست عزیز می باشد.:قهقهه:
اینم یه راه دیگه که مبتکرش خیلی باحاله :کف: :


Dim Proce As Process = Process.GetProcessesByName(My.Application.Info.Ass emblyName).First
If Proce.Handle Then MsgBox("This Program Is Running", MsgBoxStyle.Critical, "Worning") : Proce.Kill()

Saman_12
پنج شنبه 21 مرداد 1389, 04:40 صبح
این یکی هم یه راه دیگه که ابتکاری هستش :


Dim proc() As Process = Process.GetProcesses
For Each Pc As Process In proc
Application.DoEvents()
If Pc.ProcessName = My.Application.Info.AssemblyName Then
MsgBox("This Program Is Running", MsgBoxStyle.Critical, "Worning") : Pc.Kill()
End If
Next Pc