View Full Version : سوال: رو نویسی نسخه جدید برنامه؟
  
mbshareat
شنبه 21 اردیبهشت 1398, 22:35 عصر
سلام
برنامه ای توی شبکه موجود هست که کاربران یه کپی بر می دارند و اجرا می کنند..میخوام اگر حجم برنامه که کاربر میخواد اجرا کنه با حجم برنامه موجود در شبکه فرق داشت، برنامه کاربر حذف بشه و برنامه تغییر یافته و به روز شده جایگزین بشه.
آیا راهی هست که برنامه خودش رو حذف کنه و در همون مسیر نسخه جدید رو نویسی کنه بعد اجرا بشه؟
mbshareat
یک شنبه 22 اردیبهشت 1398, 01:55 صبح
تو اینترنت گشتم چیزی پیدا نکردم.شاید آخرین راه حل بچ فایل باشه.
دو تا برنامه نوشتم:یکی برنامه اصلی (bad.exe) و یکی برنامه جایگزین کننده برنامه با نسخه به روز(C:\Bad.exe)با نام(CopyBad.exe).ولی افتضاح شد.یه نگاه به کد میندازید؟
این کد برنامه ای که نیاز به آپدیت داره:
function FileSize(fileName : wideString) : Int64;
var
sr : TSearchRec;
begin
  if FindFirst(fileName, faAnyFile, sr ) = 0 then
    result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) + Int64(sr.FindData.nFileSizeLow)
  else
    result := -1;
  FindClose(sr);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
  SourceFile:String;
begin
  SourceFile:='C:\'+ExtractFileName(Application.ExeN ame);
  if FileSize(Application.ExeName)<>FileSize(SourceFile) then
  Begin
    Application.Terminate;
    WinExec(PChar('CopyBad.exe'),SW_SHOWNORMAL );
  End;
end;
این هم کد برنامه جایگزین کننده نسخه به روز(که توسط برنامه اصلی اجرا میشه!)
procedure TForm1.FormCreate(Sender: TObject);
begin
  Sleep(2000);
  DeleteFile('Bad.exe');
  CopyFile('C:\Bad.exe','Bad.exe',false);
  WinExec('Bad.exe',SW_SHOWNORMAL    );
  Application.Terminate;
end;
چرا مثل ویروس تکثیر میشه؟مشکل چیه؟
mbshareat
یک شنبه 22 اردیبهشت 1398, 05:24 صبح
جواب رو فهمیدم.WinExec تا زمانی که برنامه CopyBad هنوز در حال اجراست، اجازه خروج از Bad.exe رو نمیده.بر خلاف ShellExecute!
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.