PDA

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



asgarkz
شنبه 08 اسفند 1388, 22:01 عصر
با سلام
آيا غير از استفاده از فايلهاي batch راهي وجود دارد كه از داخل يك برنامه مجددا همان برنامه را اجرا كرد. منظور همان reset شدن برنامه است.
با تشكر

majid_ramak
یک شنبه 09 اسفند 1388, 19:21 عصر
procedure TForm1.Button1Click(Sender: TObject);
var
FExeAddress: string;
begin
FExeAddress:= ExtractFileDir(Application.ExeName);
ShellExecute(Handle, 'Open', PChar((FExeAddress) + '\Project1.exe'), nil, nil, SW_SHOW);
end;




منظور از Project.exe عنوان Exe شماست که میخواین اجرا بشه.
در قسمت Uses هم باید ShellAPI رو Use کنید.

Felony
یک شنبه 09 اسفند 1388, 20:17 عصر
procedure TForm1.Button1Click(Sender: TObject);
var
FExeAddress: string;
begin
FExeAddress:= ExtractFileDir(Application.ExeName);
ShellExecute(Handle, 'Open', PChar((FExeAddress) + '\Project1.exe'), nil, nil, SW_SHOW);
end;




منظور از Project.exe عنوان Exe شماست که میخواین اجرا بشه.
در قسمت Uses هم باید ShellAPI رو Use کنید.

منظور ایشون ریست شدن برنامه هست ، مثل Firefox که وقتی با مشکل مواجه میشه یه پیغام میده و در صورت تائید توسط کاربر برنامه بسته و دوباره باز میشه .

میتونید مثلا تو دکمه Reset برنامه اول برنامه جاریتون رو مخفی کنید و بعد برنامه رو یک بار دیگه اجرا کنید و تو رویداد فعال سازی فرم برنامه دوم چک کنی نسخه قبلی برنامه که مخفی هست رو ببندید .

Mahmood_M
دوشنبه 10 اسفند 1388, 07:34 صبح
مي تونيد اول با يك تابع API مثل ShellExecute برنامه رو اجرا كنيد و بعد برنامه رو ببنديد ، مثال :
var
PName : PChar;
begin
PName := PChar(Application.ExeName);
ShellExecute(Handle,'OPEN', PName, nil, nil, SW_SHOWNORMAL);
Application.Terminate;
end;
نكته ي آخر اينكه براي استفاده از ShellExecute يونيت ShellAPI رو به قسمت Uses اضافه كنيد ...

موفق باشيد ...

majid_ramak
دوشنبه 10 اسفند 1388, 11:27 صبح
میتونید مثلا تو دکمه Reset برنامه اول برنامه جاریتون رو مخفی کنید و بعد برنامه رو یک بار دیگه اجرا کنید و تو رویداد فعال سازی فرم برنامه دوم چک کنی نسخه قبلی برنامه که مخفی هست رو ببندید .
دوست عزیز میتونه اول Shell Execute رو استفاده کنه به Applicatio .Terminate این کار سری انجام میشه و نیازی به مخفی کردن فرم نداره.

Felony
دوشنبه 10 اسفند 1388, 12:50 عصر
دوست عزیز میتونه اول Shell Execute رو استفاده کنه به Applicatio .Terminate این کار سری انجام میشه و نیازی به مخفی کردن فرم نداره.

این هم شدنیه .

asgarkz
شنبه 15 اسفند 1388, 15:45 عصر
با تشكر فراوان از توضيحات دوستان
ظاهرا من سوال رو درست مطرح نكرده ام.
من مي خوام برنامه ي در حال اجراي من نسخه جديد خودش رو دريافت كنه (تا اينجا مشكلي نيست) و با بستن خودش و اجراي دوباره خودش برنامه جديد رو اجرا كنه. (توضيح اينكه برنامه جاري و جديد بايد دريك مسير كپي شده و همنام باشند)
حالا قسمت مربوط به بستن و باز كردن برنامه جديد رو مي توان با فايلهاي batch حل كرد ولي مي خواستم ببينم روش ديگري هم براي اين كار وجود دارد يا نه؟

khazaie01
شنبه 15 اسفند 1388, 16:02 عصر
سلام دوستان
اگر منظور آپدیت کردن نرم افزار است که میتوانید به این شکل عمل کنید :
نسخه جدید نرم افزار را دانلود کرده و در کنار فایل اجرایی با نام Project-New.exe ذخیره کنید .
بعد از تمام شدن دانلود،Project-New.exe را اجرا کرده و برنامه فعلی را Close کنید.
در رویداد OnCreate فرم برنامه Project-New.exe ، نسخه قبلی نرم افزار را حذف کنید و بعد نام Project-New.exe را به نام اصلی نرم افزار تغییر دهید.
Rename کردن فایل اجرایی ،در زمان اجرای همان فایل هم امکانپذیر است و مشکلی پیش نخواهد آمد.

vcldeveloper
شنبه 15 اسفند 1388, 22:55 عصر
نسخه جدید نرم افزار را دانلود کرده و در کنار فایل اجرایی با نام Project-New.exe ذخیره کنید .


برنامه ایی که بخواد توی ویستا یا ویندوز 7 همچین کاری کنه، باید دسترسی Admin داشته باشه، که به طور عادی برنامه ها همچین دسترسی ندارند.

برنامه ایی که می خواد خودش را آپدیت کنه، باید فایل آپدیت را در یکی از پوشه های متعلق به کاربر، مثل پوشه Temp کاربر، دانلود کنه، و بعد از دانلود، برنامه آپدیت کننده را با دسترسی Admin اجرا کنه، تا اون برنامه بتونه فایل های فعلی را با فایل های دانلود شده تعویض کنه.

Felony
یک شنبه 16 اسفند 1388, 10:28 صبح
برای اضافه کردن قابلیت به روز رسانی به برنامتون بهتره از DLL ها استفاده کنید .

asgarkz
دوشنبه 17 اسفند 1388, 18:34 عصر
منظورتون از استفاده از DLL ها چيه؟
مي شه يه كم بيشتر توضيح بدين؟
با تشكر.

alinikaein
سه شنبه 18 اسفند 1388, 00:13 صبح
منظور از استفاده از dllها اينه كه:

شما قسمت‌هاي مختلف برنامه را به صورت dll طراحي كنيد. در اين صورت برنامه‌ي شما، قسمت‌بندي شده و براي به روز رساني، كافيه dll مورد نظر را جايگزين كنيد.

در اين صورت كار شما راحت‌تر مي‌شه و در صورتي كه از dllها به صورت ديناميك استفاده كرده باشيد، الزامي به بستن برنامه نخواهيد داشت.


يا علي... موفق باشيد...