PDA

View Full Version : مشکل اجرای برنامه های اجرایی با پسوند غیر اجرایی؟



MSK
جمعه 06 شهریور 1383, 17:00 عصر
ShellExecute و WinExec هردو برای اجرای یک برنامه محتاج پسوند اونند.
نتیجه اینکه یه برنامه با پسوند غیر اجرایی رو نمیشه بکمک اینا اجراکرد. :متفکر:
حالا اگه مثلا بخواهیم یه برنامه رو که خودمون ری نیمش کردیم اجرا کنیم چه باید
بکنیم :?:

orion188
جمعه 06 شهریور 1383, 19:08 عصر
1- دوباره Rename کنین
2- اجرا کنین
3- سه باره Rename کنین

منظورتونو درست فهمیده بودم؟

MSK
جمعه 06 شهریور 1383, 19:23 عصر
البته اینم راهیه ولی در واقع باید راه بهتری هم وجود داشته باشه؟ :قهر:
هدف من از اینکار جلوگیری از اجرای تصادفی توسط کاربر بوده ولی اینجوری یکم ناجوره. :|

orion188
جمعه 06 شهریور 1383, 19:41 عصر
فکر کنم بشه یه کارایی کرد.
مثلا" تو همون فایل اجرایی که میخواین اجراش کنین ، آرگومانهای ورودی رو چک کنین ، ببینین اگر اونهایی که شما میخواین توش هست (نشانه ای برای اینکه برنامه شما اون رو فرا خوانده) ، اونوقت اجازه اجرا بدین. در غیر این صورت از برنامه خارج بشین.

موفق باشین

MSK
جمعه 06 شهریور 1383, 22:34 عصر
میگن جوینده یابندست.
البته راههای مختلف زیادی برای حل این مشکل وجود داره. چند تاش اینایی که گفته شد ولی من برای رفع حاجت نیومده بودم. :shock:
این سوال رو مطرح کردم که یه چیزی به علممون اضافه بشه و ببینم واقعا یعنی راهی برای برای اجرای یه فایل با پسوند غیر اجرایی وجود نداره؟(این واقعا یه سوال شده برام)
البته از جوابای بی توقع شما هم خیلی ممنونم. 8-)

SalarSoft
شنبه 07 شهریور 1383, 09:09 صبح
راه چاره استفاده از تابع CreateProcess است!

این هم تابع برای این کار:

Function RunProcess(Const AppPath:String;MustWait:Boolean=False;AppParams:St ring='';Visibility:Word=SW_SHOWNORMAL):DWord;
Var
SI:TStartupInfo;
PI:TPROCessINFORMATION;
Proc:THandle;
zFileName:Array[0..Max_Path*2]of char;
zParams:Array[0..Max_Path]of char;
begin
FillChar(SI,SizeOf(SI),0);
SI.cb:=SizeOf(Si);
Si.wShowWindow:=Visibility;
If Not CreateProcess(strPCopy(zFilename,AppPath),
StrPCopy(zParams,APpParams),
nil,nil,False,NORMAL_PRIORITY_CLASs ,nil,nil,SI,PI) then
Raise EXCeption.CreateFmt('Failed to execute program '+
apppath+'.Error Code %d',[GetlastError]);
Proc:=PI.hProcess;
CloseHandle(Pi.HThread);
If MustWait then
If WaitForSingleObject(Proc,infinite)<>Wait_Failed then
GetExitCodeProcess(Proc,Result);
CloseHandle(Proc);
end;

SalarSoft
شنبه 07 شهریور 1383, 09:15 صبح
این هم مثال:

RunProcess ('c:\exe.ok');

MSK
شنبه 07 شهریور 1383, 16:51 عصر
آقا ایول. شاهکار کردی!
دستت درد نکنه! :تشویق:
:flower: :flower: :flower: