PDA

View Full Version : سوال: رو نویسی نسخه جدید برنامه؟



mbshareat
شنبه 21 اردیبهشت 1398, 21:35 عصر
سلام
برنامه ای توی شبکه موجود هست که کاربران یه کپی بر می دارند و اجرا می کنند..میخوام اگر حجم برنامه که کاربر میخواد اجرا کنه با حجم برنامه موجود در شبکه فرق داشت، برنامه کاربر حذف بشه و برنامه تغییر یافته و به روز شده جایگزین بشه.
آیا راهی هست که برنامه خودش رو حذف کنه و در همون مسیر نسخه جدید رو نویسی کنه بعد اجرا بشه؟

mbshareat
یک شنبه 22 اردیبهشت 1398, 00: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, 04:24 صبح
جواب رو فهمیدم.WinExec تا زمانی که برنامه CopyBad هنوز در حال اجراست، اجازه خروج از Bad.exe رو نمیده.بر خلاف ShellExecute!