PDA

View Full Version : اجرای برنامه پس از خروج از برنامه



dkhatibi
شنبه 20 خرداد 1385, 20:38 عصر
فرض کنید دو نسخه از یک برنامه داریم یکی در درایو C: ودیگری در درایو D برنامه ی موجود در درایو اول را اجرا می کنیم می خواهیم با اجرای آن برنامه ی دوم شجرا شده و اجرای برنامه ی اول متوقف شود.
با توجه به اینکه برنامه اجازه ی اجرای مجدد به خود را نمی دهد.یعنی حاوی تابعی است که در حال اجرا بودنش را چک می کند
به نظر شما چه کار باید کرد؟

Mahmood_M
شنبه 20 خرداد 1385, 23:02 عصر
سلام ...
می تونید در هنگام اجرا شدن برنامه اول اون رو ببندید و در رویداد ONClose فرم اصلی برنامه اول ، برنامه دوم رو اجرا کنید ...
توجه : این کدی که در رویداد OnClose فرم اصلی برنامه اول قرار داره نباید توی همون رویداد در برنامه دوم باشه ...
موفق باشید ...

Hamid_PaK
یک شنبه 21 خرداد 1385, 03:59 صبح
برنامه که شما قصد اجرای مجدد آن را دارید را خودتان نوشته اید یا برنامه ای بدون سورس است ؟؟؟

babak869
یک شنبه 21 خرداد 1385, 07:02 صبح
بهترین روش استفاده از دستور ShellExecute در رویداد OnCloseQuery است که با بستن برنامه اولی دستور اجرای برنامه دوم را صادر کرده و با دستور Close در ادامه کد بالا برنامه اولی را ببندید

dkhatibi
یک شنبه 21 خرداد 1385, 16:32 عصر
فکر کنم منظور منو به درستی متوجه نشده باشید
دو برنامه دقیقا یکی هستن(کاملا یکی)

shobair
یک شنبه 21 خرداد 1385, 18:58 عصر
فکر کنم منظور منو به درستی متوجه نشده باشید
دو برنامه دقیقا یکی هستن(کاملا یکی)

سلام
هیچ فرقی نمیکنه. چه هر دوبرنامه یکسان باشند و چه نباشند، الگوریتم کار یکی هستش. با دستور ShellExecute میتونید، همونطوری که دوستمون گفت.

شبیر

dkhatibi
یک شنبه 21 خرداد 1385, 21:39 عصر
فکر کنم من گفتم که برنامه ها اجرا بودن خود را چک می کنند
و لذا این دستور نتیجه ای نخواهد داد.

babak869
یک شنبه 21 خرداد 1385, 22:14 عصر
این کار شما عملی نخواهد بود چون روال کار شما ایراد دارد.اگه در برنامه کدی هست که از اجرا شدن مجدد برنامه در حال اجرا جلوگیری میکنه خودتون بگید چطور میشه اونو اجرا کرد؟پس جواب سوالتون رو دارید اما به مساله توجه نکردید

Hamid_PaK
دوشنبه 22 خرداد 1385, 04:26 صبح
اگر اجرا در مسیر خاصی مد نظرتون هست باز می شه در مورد صحبت کرد ...

یا حق ...

mzjahromi
دوشنبه 22 خرداد 1385, 06:11 صبح
فکر کنم من گفتم که برنامه ها اجرا بودن خود را چک می کنند
و لذا این دستور نتیجه ای نخواهد داد.
دوست عزیز:
اجرا بودن خود رو از چه طریقی چک میکنه؟
می تونی به یه طریقی به اونیکی اطلاع بدی که این برنامه داره بسته میشه.(مثل پیغام یا ...)
یا یه مقدار تاخیر در کنترل اینکه برنامه دیگری در حال اجرا هست بذاری که برنامه اول بعد از اجرای برنامه دوم فرصت آزاد شدن داشته باشه
یا اگه از Mutex استفاده میکنی ، قبل از اینکه برنامه دوم رو اجرا کنی Mutex رو آزاد کن

dkhatibi
دوشنبه 22 خرداد 1385, 10:03 صبح
من می خوام برای بار اولی که برنامه اجرا می شه این برنامه خودشو به یک مسیر تعریف شده کپی کنه و بعد برنامه ی کپی شده بلافاصله اجرا گردد.
همچنین در دفعات بعدی کاربر قادر به این نباشه که برنامه ی کپی شده را چند بار اجرا کنه
با اون چیزهایی که گفتید می شه این کار رو کرد؟

Mahmood_M
دوشنبه 22 خرداد 1385, 15:24 عصر
خوب دوست من اگه برنامه اول شما خودش رو کپی کنه مطمئنا کپی ای که از اون درست می شه بعد از اجرا دوباره خودش رو کپی خواهد کرد که این مسلما مشکل ایجاد می کنه و پیغام خطا ظاهر می شه ... ( پس چند تا از کدهای برنامه اول نباید توی برنامه دوم باشه )
و همون راه اولی که بهتون گفتم هم عملی هست و همین طور راهی که دوستان گفتند ( از طریق ShellEexcue ) و راه حل کامل تر رو هم که آقای ذولقدر اشاره کردند ...
موفق باشید ...

mzjahromi
دوشنبه 22 خرداد 1385, 16:10 عصر
خوب دوست من اگه برنامه اول شما خودش رو کپی کنه مطمئنا کپی ای که از اون درست می شه بعد از اجرا دوباره خودش رو کپی خواهد کرد که این مسلما مشکل ایجاد می کنه و پیغام خطا ظاهر می شه ...
این قابل کنترله

همچنین در دفعات بعدی کاربر قادر به این نباشه که برنامه ی کپی شده را چند بار اجرا کنه
با اون چیزهایی که گفتید می شه این کار رو کرد؟
شما نگفتید که چطوری کنترل میکنید که برنامه دوبار اجرا نشه

dkhatibi
دوشنبه 22 خرداد 1385, 19:32 عصر
من از Mutex استفاده می کنم.
ضمنا اگر فایل ایجاد شده در درایو مورد نظر باشه یا رونویسی می شه یا هیچ

Mahmood_M
دوشنبه 22 خرداد 1385, 22:35 عصر
دوست من بازم سلام ...
یه راهی به نظرم رسیده شاید کمکت کنه ...
می تونی در هنگام اجرای برنامه محل ( آدرس ) برنامت رو بدست بیاری و بعد اگه آدرس همون آدرس مشخصی بود که برنامت اونجا کپی شده ، کد مربوط به Mutex رو اجرا نکنی ولی اگه نبود اجرا کنی که با یه شرط ساده این کار عملی ...

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

mzjahromi
سه شنبه 23 خرداد 1385, 06:46 صبح
من از Mutex استفاده می کنم.
ضمنا اگر فایل ایجاد شده در درایو مورد نظر باشه یا رونویسی می شه یا هیچ
همونطور که قبلا هم گفتم اگه قرار شد ShellExecute رو اجرا کنی Mutex رو آزاد کن(Signal بده)
فلسفه سمافور و Mutex رو که میدونی چیه.

dkhatibi
سه شنبه 23 خرداد 1385, 11:40 صبح
آقای مهری با تشکر فکر می کنم صحبتهای شما به شرطی درست باشه که برنامه هنگام اجرای مجدد چک کند که محل اجرای برنامه ی قبلی کجاست؟
به این ترتیب برنامه ی قبلی را از حافظه خارج کرده و خودشو اجرا می کنه(یا...)
اما آقای ذوالقدر می شه بگید چه جوری آزادش کنم؟

Hamid_PaK
سه شنبه 23 خرداد 1385, 20:07 عصر
خیلی ساده است مسیر برنامه رو چک کن ببین در کجاست اگر در جای کپی شده بود که دیگه نیازی به کپی نیست اگر هم Mutex گفت برنامه اجراست از برنامه خارج شو ...

یا حق ...

Mahmood_M
سه شنبه 23 خرداد 1385, 23:28 عصر
خیلی ساده است مسیر برنامه رو چک کن ببین در کجاست اگر در جای کپی شده بود که دیگه نیازی به کپی نیست اگر هم Mutex گفت برنامه اجراست از برنامه خارج شو ...

خوب آقا حمید این رو که من هم گفته بودم ...

آقای مهری با تشکر فکر می کنم صحبتهای شما به شرطی درست باشه که برنامه هنگام اجرای مجدد چک کند که محل اجرای برنامه ی قبلی کجاست؟
به این ترتیب برنامه ی قبلی را از حافظه خارج کرده و خودشو اجرا می کنه(یا...)
تقریبا یه چیزی تو همین مایه ها ، ولی ...
منظور من این بود که برنامه اجرا شده مسیر خودش رو بدست بیاره و اگه همون مسیر مربوط به کپی بود بعد از خارج شدن خودش رو حذف کنه ( Delete ) ، تا دوباره نشه اون رو اجرا کرد.
یه چیز دیگه :
بعد از خروج از برنامه دوم ، برنامه اول دوباره اجرا باید بشه ؟
اگه این طوریه توی برنامه اول چک کنید که برنامه دوم توی مسیر کپی هست یا نه و اگه بود اون رو حذف کنید ( البته اگه دیگه مورد استفاده قرار نمی گیره ) ...
امیدوارم کمکتون کرده باشم ...
موفق باشید ...

dkhatibi
چهارشنبه 24 خرداد 1385, 18:17 عصر
باز هم فکر می کنم منظور من را متوجه نشده باشید.
اگر ممکن است یک برنامه بنویسد تا این عملیات را پیاده سازی کند تا ببینیم واقعا شما منظورتان چیه؟

mzjahromi
چهارشنبه 24 خرداد 1385, 18:44 عصر
فکر میکنم شما جوابها رو به درستی نمی خونید.
یا هر جاش واسه تون سخته عمل نمیکنید
به نظر من یه سری توضیحات کاملا روشنه

خیلی ساده است مسیر برنامه رو چک کن ببین در کجاست اگر در جای کپی شده بود که دیگه نیازی به کپی نیست اگر هم Mutex گفت برنامه اجراست از برنامه خارج شو ...

و ...

dkhatibi
چهارشنبه 24 خرداد 1385, 18:48 عصر
برنامه ی من تو درایو C هست روی اون کلیک می کنم
اون به درایو D کپی می شه بلافاصله برنامه ی موجود در درایو C باید بسته شده و برنامه ی موجود در درایو D اجرا بشه
آیا صحبتهای گفته شده همنیه که من می خوام؟

mzjahromi
چهارشنبه 24 خرداد 1385, 18:50 عصر
دقیقا همینه

Mahmood_M
چهارشنبه 24 خرداد 1385, 20:49 عصر
شما اون راهی رو که من گفتم امتحان کنید اگه موفق نشدید من یه برنامه نمونه واستون می فرستم ...
موفق باشید ...