PDA

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



habedijoo
چهارشنبه 16 فروردین 1385, 15:14 عصر
سلام به همه

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

Project --> properties--> Make single instance application

اما این روش را شخصا امتحان کردم و جواب نداد ( دلیلش را هم نمیدانم )

اما این کار را میتوان توسط کدنویسی انجام داد . این کد را در فرم لود قرار دهید



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("Another Running")
End
Else
' (There are no other instances running.)
End If

امیدوارم بکار دوستان بیاید .

taherbaghal
چهارشنبه 16 فروردین 1385, 15:59 عصر
دستتون درد نکنه
امتحانش میکنم ببینم جواب میده یا نه
راستی این کد تو 2003 هم جواب میده ؟

habedijoo
چهارشنبه 16 فروردین 1385, 16:01 عصر
نمی دونم . اگر کسی 2003 نصب داره بقیه رو خبر کنه

taherbaghal
چهارشنبه 16 فروردین 1385, 16:05 عصر
من خودم 2003 نصب دارم
چک میکنم به بقیه میگم

Hamedm
چهارشنبه 16 فروردین 1385, 21:50 عصر
سلام به همه

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

Project --> properties--> Make single instance application

اما این روش را شخصا امتحان کردم و جواب نداد ( دلیلش را هم نمیدانم )

اما این کار را میتوان توسط کدنویسی انجام داد . این کد را در فرم لود قرار دهید



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("Another Running")
End
Else
' (There are no other instances running.)
End If
امیدوارم بکار دوستان بیاید . ببین عزیز جان برای این کار باید از Application Framework استفاده کنی.
برای این کار باید این گزینه در تنظیمات پروژتون تیک خورده باشه.
برای جلوگیری از اجرای مجدد برنامه باید Make single instance application رو تیک برنی (هدایت جان کاملا درست کار میکنه).
برای کنترل بیشتر در مورد Application باید View Application Event رو بزنید تا وارد یک محیط کد نویسی جدا از برنامه بشید. از کبموباکس ClassName گزینه MyApplication Event رو انتخاب کنید. حالا Eventهای Application شما در کمبوباکس Method Name ظاهر میشه.
متد StartupNextInstance دقیقه همونیه که شما دنبالشید. از این طریق میتونید Instanceهایی که اجرا میشه رو کنترل کنید و یا با یک پیغام به کاربر بگید "برنامه قبلا اجرا شده است".

ببینید وقتی که Application Framework تیک خورده باشه (بصورت پیش فرض تیک خورده). دیگه نمیتونیم برای پروژه Sub Main بنویسیم و پروژه رو با Sub Main بالا بیاریم. برای حل این مشکل متد Startup در کمبوباکس Method Name وجود داره. دقیقا کدهایی که در این قسمت مینویسیم قبل از اجرا شدن برنامه (مشابه Sub Main در 2003 ) اجرا خواهد شد.

حتما بقیه متدهارر نگاهی کنید.

در پناه حق موفق باشید و پرتوان

MMAASS
چهارشنبه 16 فروردین 1385, 22:38 عصر
سلام
من 2003 دارم ، اون قسمتی رو هم که گفتین باید تیک بخوره ندیدم یعنی تو 2003 نیست و باید دستی چک بشه این هم همون کارو می کنه :


If UBound(Process.GetProcessesByName(Process.GetCurre ntProcess.ProcessName)) > 0 Then
bish az 1 noskhe az application run ast
Else
1 noskhe run ast

Hamedm
چهارشنبه 16 فروردین 1385, 23:03 عصر
سلام

سلام
من 2003 دارم ، اون قسمتی رو هم که گفتین باید تیک بخوره ندیدم یعنی تو 2003 نیستبله. Aplication Framework در 2005 اضافه شده.
در 2003 هم باید بوسیله کلاس Process میدیدیم Process برنامه درحال اجرا هست یا نه.

در پناه حق موفق باشید و پرتوان

habedijoo
پنج شنبه 17 فروردین 1385, 10:31 صبح
حامد جان سلام

ممنونم عزیز . الان جواب داد . یه چیز جالب اینه که تا وقتی Aplication Framework فعال نباشه گزینه Make single instance application خاموشه . من این کار رو کرده بودم ولی جواب نمیداد .
در ضمن من الان با Release امتحان کردم و جواب گرفتم . نمیدانم چرا با Debug کار نمیکنه . شما یه امتحان میکنی ؟

Hamedm
پنج شنبه 17 فروردین 1385, 11:03 صبح
سلام

در ضمن من الان با Release امتحان کردم و جواب گرفتم . نمیدانم چرا با Debug کار نمیکنه . شما یه امتحان میکنی ؟برای من برای DEBUG هم جواب میده.

در پناه حق موفق باشید و پرتوان

m-heidari
پنج شنبه 17 فروردین 1385, 15:12 عصر
از دوستان کسی میدونه فرق بین Debug و Release چی هست ؟ من اصلا تا به حال به این موضوع فکر نکرده بودم اما الان یه هو این سوال برام پیش اومد !!! اگه کسی میدونه بگه ما هم استفاده بکنیم.

MMAASS
جمعه 18 فروردین 1385, 13:36 عصر
به کامپایل نهایی می گن Release اگه برنامه در مد Release کامپایل بشه امکان تریس کردن برنامه نیست.
دوستان توضیحات بیشتر بدن. :لبخند:

Hamedm
جمعه 18 فروردین 1385, 16:29 عصر
سلام

دوستان توضیحات بیشتر بدن. ببینید وقتی که ما پروژه رو DEBUG میکنیم، IDE در .NET به ما اجازه Trace بصورت خط به خط میده. برای Traceکردن بصورت خط به خط نیاز به یک سری فایلهای Temp داره تا خطایابی برنامه راحتتر صورت بگیره. اما .قتی که پروژه رو Release میکنیم، این اطلاعاط اضافی دیگه تولید نمیشه یعنی ما نمیتوانیم برنامه رو Trace کنیم. بخاطر همین حجم فایل EXE زیاد میشه و اسمبلی تندتره.

این متن هم بهت میتونه اظلاعات خوبی بده:

Prior to .NET, a Visual Basic project had only one set of properties. There was no way to have one
properties for a debug build and a separate set for a release build. The result was that you had to manually
change any properties that were environment-specific before you built the application. This has
changed with the introduction of build configurations, which allow you to have different sets of project
properties for debug and release builds. Visual Studio also does not limit you to only two build configurations,
it is possible to create additional custom configurations. The properties that can be set for project
have been split into two groups: those that are independent of build configuration and therefore
apply to all build configurations, and those that apply only to the active build configuration. For example,
the Project Name and Project Location properties are the same irrespective of what build configuration
is active, whereas the code optimization options differ, depending on the active build configuration.
This isn’t a new concept and has been available to Visual C++ developers for some time, but .NET
the first time it was available for VB developers.
Currently under Visual Studio 2005, the default settings for Visual Basic developers do not include the
two build configuration settings in the project properties page. By default, Visual Basic applications
built in release mode, however if a project’s build type is changed, the Visual Basic developer is by default
unaware and unable to change the setting. To display these settings in Visual Studio, go to the Tools
and select the Options menu item. On the Options dialog, select the “Projects and Solutions” tree item,
and on the settings for projects and solutions, you need to select the “Show advanced build configurations”
check box. This will update the user interface to properly display the build configurations.


در پناه حق موفق باشید و پرتوان

MMAASS
جمعه 18 فروردین 1385, 16:42 عصر
آقای محمدی
منظورم تفاوتهای دیگه بود اگه وجود داره. :لبخند:
این تفاوت رو بلد بودم.

m-heidari
شنبه 19 فروردین 1385, 02:02 صبح
خیلی جالب بود .
من اونقدر رفتم تو عالم Class Library دات نت که اصلا به این جور مسائل فکر نمیکردم اما الان که شما گفتید روشنتر شدم اگه مقدور باشه بیشتر توضیح بدید.

ممنون میشم