PDA

View Full Version : چگونه برنامه فقط یک بار اجرا شود؟؟



Open-Source
دوشنبه 03 اسفند 1388, 15:52 عصر
من تو سی شارپ توی Program.cs اینطوری کد مینویسم و برنامه فقط یک بار اجرا میشود:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
/////
using System.Threading;

namespace PhoneBook
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{

bool instanceCountOne = false;

using (Mutex mtex = new Mutex(true,Application.ProductName, out instanceCountOne))
{
if (instanceCountOne)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new frmMain());
mtex.ReleaseMutex();
}
else
{
MessageBox.Show("این برنامه قبلا اجرا شده است", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
}



ولی تو وی بی نمیدونم کجا این کد رو بنویسم؟؟:متفکر:

milad.biroonvand
دوشنبه 03 اسفند 1388, 16:21 عصر
اگر که مخوای فقط یکبار بتونیم این پروژه را باز کنیم ، باید از کد زیر استفاده کنی.




Private Function PrevInstance() As Boolean
' Check to see if another existance of the assembly is found
If UBound(System.Diagnostics.Process.GetProcessesByNa me(System.Diagnostics.Process.GetCurrentProcess.Pr ocessName)) = 0 Then
' Yes, it was - return true
Return True
' No previous existance found - return false
Else
Return False
End If
End Function


و با کد زیر چکش کنی .




If PrevInstance() = True Then
' Display a message box if a previous existance exists
MessageBox.Show("The application is already running. Press OK to exit", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
' End the application (see note at bottom of header above)
End
End If

milad.biroonvand
دوشنبه 03 اسفند 1388, 16:26 عصر
اگر هم می خوای یکبار که اجراش کردی دیگه اجرا نشه می تونی از دستور savesetting استفاده کنی .

Netsky
دوشنبه 03 اسفند 1388, 17:41 عصر
اگر هم می خوای یکبار که اجراش کردی دیگه اجرا نشه می تونی از دستور savesetting استفاده کنی .
سلام .
منظور شما از دستور Save Setting اینه که یک مقدار در رجیستری بنویسم و عملیات چک کردن رو با اون انجام بدیم . اینطوری که خیلی امنیت پایین میاد . پس نمیشه روش حسابی باز کرد .

Open-Source
دوشنبه 03 اسفند 1388, 18:54 عصر
اگر که مخوای فقط یکبار بتونیم این پروژه را باز کنیم ، باید از کد زیر استفاده کنی.




Private Function PrevInstance() As Boolean
' Check to see if another existance of the assembly is found
If UBound(System.Diagnostics.Process.GetProcessesByNa me(System.Diagnostics.Process.GetCurrentProcess.Pr ocessName)) = 0 Then
' Yes, it was - return true
Return True
' No previous existance found - return false
Else
Return False
End If
End Function


و با کد زیر چکش کنی .




If PrevInstance() = True Then
' Display a message box if a previous existance exists
MessageBox.Show("The application is already running. Press OK to exit", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
' End the application (see note at bottom of header above)
End
End If


تو این مدل اگه نام فایل exe برنامت رو تغییر بدن ، برنامه اجرا میشه
این روش، روش خوبی نیست
:متعجب:

Open-Source
دوشنبه 03 اسفند 1388, 18:59 عصر
این روش که یه مقدار تو رجیستری یا تو یه فایل ذخیره کنی اصلا روش خوبی نیست.
آخه اگه برنامه غیر معقول بسته بشه (مثلا برق بره) مشکل پیش میاد.

من از Mutex استفاده میکردم در C#‎ ولی تو VB نمیدونم چطور استفاده کنم
:گریه:

Sharif Lotfi
دوشنبه 03 اسفند 1388, 19:15 عصر
در متد Load فرم شروعت اين كد رو بنويس

If (UBound(Diagnostics.Process.GetProcessesByName(Dia gnostics.Process.GetCurrentProcess.ProcessName)) > 0) Then
MsgBox("**اين برنامه اکنون در حال اجرا مي باشد** شما نمي توانيد نسخه ديگري از آن را اجرا کنيد.", MsgBoxStyle.OkOnly Or MsgBoxStyle.MsgBoxRight Or MsgBoxStyle.MsgBoxRtlReading Or MsgBoxStyle.Exclamation, "اخطار")
Beep()
Application.ExitThread()
Application.Exit()
End If

Open-Source
دوشنبه 03 اسفند 1388, 19:19 عصر
در متد Load فرم شروعت اين كد رو بنويس

If (UBound(Diagnostics.Process.GetProcessesByName(Dia gnostics.Process.GetCurrentProcess.ProcessName)) > 0) Then
MsgBox("**اين برنامه اکنون در حال اجرا مي باشد** شما نمي توانيد نسخه ديگري از آن را اجرا کنيد.", MsgBoxStyle.OkOnly Or MsgBoxStyle.MsgBoxRight Or MsgBoxStyle.MsgBoxRtlReading Or MsgBoxStyle.Exclamation, "اخطار")
Beep()
Application.ExitThread()
Application.Exit()
End If


اگه توی این روش نام فایل exe برنامت رو تغییر بدی برنامه دوباره اجرا میشه.
اصلا روش خوبی نیست.
این روش رو به هیچ کس پیشنهاد نمیدم.
:عصبانی++:
:متعجب:

Open-Source
دوشنبه 03 اسفند 1388, 19:21 عصر
من بالاخره از این تیکه کد برای اجرا شدن فقط و فقط یکبار برنامه استفاده کردم(البته توی formLoad)


Dim b As Boolean
Dim mt As New System.Threading.Mutex(True, Application.ProductName, b)

If b = False Then
MessageBox.Show("برنامه قبلا اجرا شده است؛ نمیتوانید آنرا دوباره اجرا کنید", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Process.GetCurrentProcess.Kill()
End If



روش خوبی هستش.
بای.
:لبخندساده:

sari-1369
سه شنبه 04 اسفند 1388, 08:13 صبح
به این مسیر برید :

Solution====>My Project=====> Application

اون پایین یه گزینه داره با عنوان Make single instance application ، اون رو تیک بزنید .

دیگه برنامه شما فقط یک بار اجرا میشه .