View Full Version : پاک کردن فایل در حال اجرا
delphi5
سه شنبه 23 بهمن 1386, 10:00 صبح
چطور میشه یه EXE رو وقتی که اجرا شده پاک کرد و بجای اون یه فایل جدید رو کپی کرد .
vcldeveloper
سه شنبه 23 بهمن 1386, 11:49 صبح
با تابعMoveFileEx
MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);
کد بالا فایل szDstFile را در ریست بعدی سیستم حذف میکنه و فایل szSrcFile را با آن جایگزین میکنه. توضیحاتش در Windows SDK اومده. این مثال هم از همونجا ست.
dkhatibi
سه شنبه 23 بهمن 1386, 12:47 عصر
احتمالا شما می خواید ورزن برنامه را Update کنید. پس با این تابع مشکل قبلی شما حل شد.
delphi5
پنج شنبه 25 بهمن 1386, 16:17 عصر
s1:=phone.exe';
s2:='c:\phone.exe';
pat:='';
pat:= GetCurrentDir;
pat:=pat+'\phone.exe';
MoveFileEx(pchar(pat),'', MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(pchar(s2),pchar(pat),MOVEFILE_DELAY_UNT IL_REBOOT);
ShowMessage('Please reboot your system ');
پس از بوت شدن سیستم هیچ تغییری ایجاد نمی شود . با این کار من قصد update کردن ورژن اجرائی رو دارم .
مشکل رو میتونید حدس بزنید ؟
vcldeveloper
پنج شنبه 25 بهمن 1386, 17:42 عصر
اگه Pat مسیر فایل برنامه رو نگه داری میکنه:
pat := Application.ExeName
delphi5
شنبه 27 بهمن 1386, 08:51 صبح
اگه Pat مسیر فایل برنامه رو نگه داری میکنه:
pat := Application.ExeName
متوجه منظورتون نمی شم .
delphi5
شنبه 27 بهمن 1386, 09:40 صبح
s2:=مسیر فایل جدید ;
pat:='';
pat:= ExtractFilePath(Application.ExeName);
pat:=pat+'\phone.exe';
MoveFileEx(pchar(pat),'', MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(pchar(s2),pchar(pat),MOVEFILE_DELAY_UNT IL_REBOOT);
ShowMessage('Please reboot your system ');
این عمل نمیکنه . میدونید چرا ؟
Mah6447
شنبه 27 بهمن 1386, 10:17 صبح
کد زیر را تست کردم و جواب داد . موفق باشید ....
pat:= Application.ExeName;
pat2:='مسیر فایل جدید'+'Phone.exe';
MoveFileEx(pchar(pat),pchar(pat2), MOVEFILE_REPLACE_EXISTING);
ShowMessage('Please reboot your system ');
delphi5
شنبه 27 بهمن 1386, 12:42 عصر
کد زیر را تست کردم و جواب داد . موفق باشید ....
pat:= Application.ExeName;
pat2:='مسیر فایل جدید'+'Phone.exe';
MoveFileEx(pchar(pat),pchar(pat2), MOVEFILE_REPLACE_EXISTING);
ShowMessage('Please reboot your system ');
من نتیجه نگرفتم :ناراحت:
Mah6447
شنبه 27 بهمن 1386, 13:15 عصر
توضیح بیشتری بدید که چکاری انجام دادید که نشد ؟
delphi5
شنبه 27 بهمن 1386, 13:40 عصر
pat:=Application.ExeName;
pat2:=c:\phone.exe';
MoveFileEx(pchar(pat),pchar(pat2),MOVEFILE_DELAY_U NTIL_REBOOT);
ShowMessage('Please reboot your system ');
pat ادرس فایل اجرائی را در خود ذخیره میکند
pat2 آدرس فایل جدید که می بایست با فایل اجرا شده تعویض گردد را در خود ذخیره میکند .
با این کار من قصد update کردن ورژن اجرائی رو دارم .
اگر راه دیگری هم بنظرتون میرسه خواهش میکنم راهنمائی کنید .
با تشکر
Mah6447
شنبه 27 بهمن 1386, 13:52 عصر
بجا MOVEFILE_DELAY_UNTIL_REBOOT کد MOVEFILE_REPLACE_EXISTING قرار دهید .
delphi5
شنبه 27 بهمن 1386, 14:03 عصر
بعد نیازی به reboot شدن سیستم دارم یا خیر ؟
Mah6447
شنبه 27 بهمن 1386, 14:11 عصر
سیستم نیاز به reboot ندارد . فقط کافیست برنامه را ریستارت کنید .
delphi5
شنبه 27 بهمن 1386, 14:12 عصر
جالبه . باز هم جواب نداد . لازم به توضیح است که برنامه اجرا شده است . یعنی امکان replace وجود ندارد
Mah6447
شنبه 27 بهمن 1386, 14:38 عصر
فایل زیر را دریافت و باز کنید . ابتدا فایل Oldver.exe را اجرا کنید . به ظاهر آن توجه کنید. Project2.exe فایل جدید می باشد و Oldver.exe فایل قدیم . Project2.exe را اجرا و کلید آپدیت را بزنید حال پوشه برنامه را نگاه کنید . خواهید دید که فایل Project2.exe وجود ندارد . حال فایل Oldver.exe را اجرا کنید . چه می بینید ? البته ببخشید که جملات دستوری شد .
delphi5
شنبه 27 بهمن 1386, 14:45 عصر
فایل خراب است :(
Mah6447
شنبه 27 بهمن 1386, 14:53 عصر
دوباره آزمایش کن فایل را دوبار در همان پست Attach کردم . موفق باشید ...
delphi5
شنبه 27 بهمن 1386, 15:17 عصر
با تشکر از لطف شما
اما اشتباه کردید .
من دو تا فایل دارم
pat و pat2
pat اجرا میشود . pat2 را از روی سرور بروی دستگاه دانلود میکند و با pat جایگزین میکند . و نهایتا pat2 فایل جدید میشود .شما فایلی که اجرا نشده بود را عوض کردید
delphi5
شنبه 04 اسفند 1386, 15:52 عصر
کسی نمیتونه در این مورد کمکم کنه ؟
dkhatibi
یک شنبه 05 اسفند 1386, 14:08 عصر
فرض کنید نام برنامه ی اصلی A هست این برنامه باید Update شود. فایل جدید بر روی دستگاه منتقل می شود . نام آن را B بگذارید.
یک فایل برنامه به نام C بسازید. کار این فایل اینه که چک می کند آیا B وجود دارد یا نه.
سپس برنامه پس از انتقال فایل B فایل C را اجرا کرده و خودش فایل A بسته می شود.(terminate)
فایل C اجرا شده و چک می کند...
در صورت وجود B فایل A را پاک می کند. ابتدا B را به A تغییر نام می دهد و سپس B قبلی که الان A شده را اجرا می کند.
خودفایل C نیز Terminate می شه!
با کمک یک فایل جانبی کاری که شما می خواهید شدنی است.
delphi5
دوشنبه 06 اسفند 1386, 09:47 صبح
حرف شما صحیح . اما من قصد دارم بدون نیاز به کاربر برنامه رو update کنم . شما لطف کردید و توضیح دادید اما اصل قضیه فرق میکنه . البته من به ابن نتیجه رسیدم که بایستی
برنامه اصلی اجرا شود .
چک کند که ورژن جدید موجود است یا خیر
در صورت وجود به کاربر پیغام update نشان داده شود .
برنامه دانلود شود
برنامه کمکی اجرا شود
برنامه اصلی از اجرا خارج شود
update برنامه .
اجرای برنامه اصلی
خروج برنامه کمکی
dkhatibi
دوشنبه 06 اسفند 1386, 11:02 صبح
خوب پس همه چیز حله نه؟!!
delphi5
دوشنبه 06 اسفند 1386, 12:02 عصر
مشکل اینجاست
اگه یه برنامه رو از توی برنامه ام صدا برنم و بعد برنامه ام رو terminate کنم میشه ؟
dkhatibi
دوشنبه 06 اسفند 1386, 17:46 عصر
اون برنامه خودش داره کار خودشو می کنه .
پس از اجرا برنامه ی خودتون رو terminate کنید و هیچ مشکلی هم نیست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.