PDA

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



alirezabahrami
پنج شنبه 01 مرداد 1388, 08:43 صبح
با سلام
شايد براي دوستان پيش آمده باشد كه بنا به دلايلي برنامه خود را موقتاً مينيمايز نمايند . در اين حالت نام برنامه بر روي نوار وظيفه ويندوز قرار مي گيرد . و اگر سهواً بر روي شورتكات برنامه كليك شود مجدداً برنامه اجرا ميشود . حال سؤال اينجاست كه به چه صورت ميتوانيم از اجراي مجدد برنامه جلوگيري كنيم و با اجراي مجدد پيغام خطائي مبني بر اينكه هم اكنون برنامه در حال اجرا است و اجراي مجدد امكان پذير نيست صادر شود .
با تشكر

amirzazadeh
پنج شنبه 01 مرداد 1388, 09:04 صبح
با سلام
شايد براي دوستان پيش آمده باشد كه بنا به دلايلي برنامه خود را موقتاً مينيمايز نمايند . در اين حالت نام برنامه بر روي نوار وظيفه ويندوز قرار مي گيرد . و اگر سهواً بر روي شورتكات برنامه كليك شود مجدداً برنامه اجرا ميشود . حال سؤال اينجاست كه به چه صورت ميتوانيم از اجراي مجدد برنامه جلوگيري كنيم و با اجراي مجدد پيغام خطائي مبني بر اينكه هم اكنون برنامه در حال اجرا است و اجراي مجدد امكان پذير نيست صادر شود .
با تشكر
دوست عزيز به صورت معمول اگر بانك شما بر روي نوار وظيفه مينيمايز شده باشه ويندوز برنامه رومجددا اجرا نميكنه و بانك موجود روي نوار وظيفه رو ماكسيمايز ميكنه(البته در سيستم عامل WIN XP و اكسس 2003 امتحان كردم) .

alirezabahrami
پنج شنبه 01 مرداد 1388, 10:59 صبح
دوست عزيز به صورت معمول اگر بانك شما بر روي نوار وظيفه مينيمايز شده باشه ويندوز برنامه رومجددا اجرا نميكنه و بانك موجود روي نوار وظيفه رو ماكسيمايز ميكنه(البته در سيستم عامل WIN XP و اكسس 2003 امتحان كردم) .
با سلام خدمت جناب آقاي اميرزاده عزيز
در فايل هاي معمولي اكسس همينطور است كه شما فرموده ايد ولي بنده برنامه ام را اجرائي نموده ام و ظاهراً اين موضوع در خصوص فايل اجرائي اكسس صدق نميكند . قابل ذكر است كه من در قسمت ماژول فرم اوليه كنترل هاي مينيمايز ، ماكسيمايز و close ديتابيس را حذف نموده ام و وقتي از طريق كليد هاي تركيبي windows +d برنامه را مينيمايز مي نمايم و دوباره بر روي شورتكات برنامه كليك ميكنم فرم log on (فرم پسورد ) اجرا ميشود و قتي پسورد مربوطه را وارد مي كنم برنامه دوباره اجرا ميشود در حاليكه برنامه اجرا شده قبلي به همان صورت مينيمايز بر روي نوار وظيفه باقي مي ماند .
ضمناً مزيد امتنان خواهد بود چنانچه به تاپيك (قراردادن آيكن برنامه در كنار ساعت ويندوز ) كه در همين صفحه اول است و با اين تاپيك تا اندازه اي ارتباط دارد عنايتي داشته باشيد .
با تشكر فراوان

alirezabahrami
شنبه 03 مرداد 1388, 18:30 عصر
با سلام خدمت جناب آقاي اميرزاده عزيز
در فايل هاي معمولي اكسس همينطور است كه شما فرموده ايد ولي بنده برنامه ام را اجرائي نموده ام و ظاهراً اين موضوع در خصوص فايل اجرائي اكسس صدق نميكند . قابل ذكر است كه من در قسمت ماژول فرم اوليه كنترل هاي مينيمايز ، ماكسيمايز و close ديتابيس را حذف نموده ام و وقتي از طريق كليد هاي تركيبي windows +d برنامه را مينيمايز مي نمايم و دوباره بر روي شورتكات برنامه كليك ميكنم فرم log on (فرم پسورد ) اجرا ميشود و قتي پسورد مربوطه را وارد مي كنم برنامه دوباره اجرا ميشود در حاليكه برنامه اجرا شده قبلي به همان صورت مينيمايز بر روي نوار وظيفه باقي مي ماند .
ضمناً مزيد امتنان خواهد بود چنانچه به تاپيك (قراردادن آيكن برنامه در كنار ساعت ويندوز ) كه در همين صفحه اول است و با اين تاپيك تا اندازه اي ارتباط دارد عنايتي داشته باشيد .
با تشكر فراوان
با سلام
فايل ضميمه ، در محيط وي بي تهيه شده و موارد بالا (قرارگرفتن آيكن برنامه در كنار ساعت ويندوز و عدم اجراي مجدد برنامه ) در آن بكار برده شده است . با اندك آشنائي كه با برنامه نويسي در محيط vba دارم نتوانستم كد هاي بكار برده شده در آن را در محيط اكسس پياده كنم . بنظرم آمد شايد دوستان برنامه نويس كه در هر دو بخش اكسس و وي بي اشراف دارند توانستند با ايجاد تغييراتي در كد هاي فوق ، آن را در محيط اكسس نيز پياده كنند.
با تشكر

barnamenevis2008
یک شنبه 04 مرداد 1388, 09:48 صبح
با سلام
شايد براي دوستان پيش آمده باشد كه بنا به دلايلي برنامه خود را موقتاً مينيمايز نمايند . در اين حالت نام برنامه بر روي نوار وظيفه ويندوز قرار مي گيرد . و اگر سهواً بر روي شورتكات برنامه كليك شود مجدداً برنامه اجرا ميشود . حال سؤال اينجاست كه به چه صورت ميتوانيم از اجراي مجدد برنامه جلوگيري كنيم و با اجراي مجدد پيغام خطائي مبني بر اينكه هم اكنون برنامه در حال اجرا است و اجراي مجدد امكان پذير نيست صادر شود .
با تشكر

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

"X:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" /excl "x:\folder\file.mde"

البته مسیرهای بالا فرضی است و باید مسیر فایل اکسس و فایل برنامه خودتان باشد.

amirzazadeh
سه شنبه 06 مرداد 1388, 11:11 صبح
با سلام
شايد براي دوستان پيش آمده باشد كه بنا به دلايلي برنامه خود را موقتاً مينيمايز نمايند . در اين حالت نام برنامه بر روي نوار وظيفه ويندوز قرار مي گيرد . و اگر سهواً بر روي شورتكات برنامه كليك شود مجدداً برنامه اجرا ميشود . حال سؤال اينجاست كه به چه صورت ميتوانيم از اجراي مجدد برنامه جلوگيري كنيم و با اجراي مجدد پيغام خطائي مبني بر اينكه هم اكنون برنامه در حال اجرا است و اجراي مجدد امكان پذير نيست صادر شود .
با تشكر
لطفا فايل ضميمه را ببينيد در صورت اجراي مجدد فايل mde پيامي مبني بر در حال اجرا بودن برنامه صادر ميگردد. (كنترل اجراي مجدد در رويداد لود فرم قرار گرفته كه البته در ماكرو autoexec نيز قابل اجراست)
............................
موفق باشيد

nabeel
سه شنبه 06 مرداد 1388, 18:19 عصر
سلام barnamenevis2008

در پاسخ ارسالی 1 نکته وجود داره

شما با استفاده از سوییچ excl در واقع فایل رو در مد Exclusive باز میکنید . در این مد تنها اجازه ورود یک کاربر داده میشه و قاعدتاً در محیطهای چند کاربره جهت قفل شدن دسترسی سایر کاربران مورد استفاده قرار میگیره , پس به نظر میاد پاسخ ارسالی خالی از اشکال نیست ( ضمناً توجه شما رو به محدودیتهای اجرا در حالت Exclusive هم جلب میکنم )

راه حل ساده ای وجود داره تا در هر حالت کاربران دیگه هم بتونن بدون مشکل وارد سیستم بشن , و تنها یک کاربر نتونه دو بار برنامه رو روی سیستم خودش باز کنه ( جدا از اینکه فایل به صورت Share شده هست و یا نه )

اطلاعات باز و بسته شدن برنامه رو در داخل رجیستری ثبت کنید :

به طور مثال به کدهای زیر نگاه کنید :



Private Sub Form_Open(Cancel As Integer)
If Len(GetSetting("X", "xx", "xxx")) = 0 Then
SaveSetting "X", "xx", "xxx", 0
ElseIf GetSetting("X", "xx", "xxx") = 1 Then
DoCmd.Quit
End If
End Sub




Private Sub cmdQuit_Click()
SaveSetting "X", "xx", "xxx", 0
DoCmd.Quit
End Sub




Private Sub Form_Load()
SaveSetting "X", "xx", "xxx", 1
End Sub

در بخش Open وضعیت باز و بسته شدن رو چک میکنیم در صورت تشخیص باز نبودن برنامه برنامه وارد بخش Load میشه و در نهایت در هنگام خروج , کد نمایانگر بسته بودن برنامه در رجیستری ثبت میشه .

با توجه به اینکه به نظر میاد دوستمون alirezabahrami خودشون بتونن کدها رو به صورت مناسب در داخل یک پروژه اعمال کنن , زحمت بقیه کار رو به خودشون میسپورم .
توضیح اینکه در نوشتن کدها دقت به خرج ندادم و تنها به الگوریتم کلی اشاره کردم , پس ...
موفق باشید

nabeel
سه شنبه 06 مرداد 1388, 18:34 عصر
سلام amirzazadeh

روش مورد استفاده شما مبتنی بر Window Title و hWnd هستش . این روش یک نقیصه جزئی داره و اون هم اینکه اگه نام یکی از دو تا فایل تغییر پیدا کنه در اون صورت این روش ناکارآمد میشه .

این روش مزایا و معایب خاص خودش رو به همراه داره . در مجموع روش ارائه شد از سوی شما , منطقی تر از روش ارائه شده در پست شماره 5 هستش .

موفق باشید