سلام خدمت اساتید
بنده یه برنامه ساختم که بصورت سرور کار میکنه
حالا اولا که برای جلوگیری از اجرای مجدد سرور از طریق زیر انجام میدم

function StopLoading() : boolean;
var
Mutex : THandle;
begin
Mutex := CreateMutex(nil,false,'NoExec');
Result := (Mutex = 0) or (GetLastError = ERROR_ALREADY_EXISTS);
end;


در formcreat هم به این طریق انجام میشه
if StopLoading then Halt;

و درست کار میکنه

حالا چون سرور همیشه جلو دستم نیست و وقتی که برنامه سرور رو تغییرات میدم میخام
1- از راه دور سرور رو ببندم
2- برنامه جدید رو به کامپیوتر سرور انتقال بدم
3- برنامه رو مجدد از راه دور اجرا کنم
تبصره 3 - اگر برنامه توسط کاربر یا هر دلیل دیگه (غیر از راه دور) بسته شده بود دوباره اجرا بشه

خب برای سوال اول یه برنامه سرور دیگه درست کردم روی پورت دیگه که در صورت دریافت دستور بستن میاد و برنامه سرور اصلی رو با دستور
KillTask('srvr1.exe');

میبنده
برای سوال دوم فعلا نتونستم برنامه ای بنویسم و راحتترین راهم استفاده از یه اف تی پی سرور هست و کارم رو راه میندازه ولی اگه بشه میخام خودم با دلفی برنامه مشابه اف تی پی سرور راه بندازم

سوال سوم هم با ارسال دستور میتونم بصورت زیر برنامه رو اجرا کنم

var
Address:string;
begin
Address:='d:\srvr1.exe';
if FileExists(Address) then
ShellExecute(Handle,'open',PChar(Address),nil,nil, SW_SHOWNORMAL)
else
showmessage('فایل مربوطه پیدا نشد.');
end;

در تبصره به این شکل میباشد که هر دو برنامه سرور باید همدیگه رو چک کنن تا در صورت بسته شدن هر یک ، دیگری بتونه اون یکی برنامه رو اجرا کنه
خب میدونم که باید تایمر بسازم و با تایمر اجرا بودن برنامه مورد نظر رو چک کنم
حالا چطور میتونم در حال اجرا بودن یک برنامه رو چک کنم
ضمنا هر دوبرنامه در استارآپ ویندوز قرار دارن
با تشکر