Как се стартира програма и ...

5 отговора 213 прегледа
#1

Как се стартира програма и ...

Как мога да стартирам конзолно приложение и да му задам някакви параметри, както и да взема резултата, ако има такъв с моя програма.

Конзолното приложение, ако има значение май не е писано на Делфи.

Отговор
в отговор на NewsMonster #2

Re: Как се стартира програма и ...

Виж малко по-назад в темите. Има една "Резултат от програма"
[линк]

Отговор
в отговор на andrew_nikoloff #3

То ще прозвочи малко ...

То ще прозвочи малко тъпо ама не съм от босовете в областта. Не мога да разбера значението на всички аргументи.

Помагайте

Отговор
в отговор на NewsMonster #4

Re: То ще прозвочи малко ...

AppName - Името (евентуално с път) на програмата
AppArgs - аргументите, които искаш да й предадеш
Wait - колко милисекунди да чака (0 ако не искаш да чака)
Hide - дали да се показва при стартиране или да бъде скрито
ExitCode - резултатът от работата на приложението. Попълва се само, когато изчакваш приложението да завърши

Отговор
в отговор на NewsMonster #5

Re: Как се стартира програма и ...

аз ползвам това за резултат от конзолно app:

function ExecuteConsoleApp(const aFolderName, aExeName, aCMDLine:string; aResult:TStringList):Boolean;
var
lvSI:TStartupInfo; lvSA:TSecurityAttributes; lvPI:TProcessInformation;
lvTempName:string; lvHandle:THandle; lvRet:Cardinal;
begin
Result:=False;
try
lvTempName:='Test.tmp';
FillChar(lvSA, SizeOf(lvSA), #0);
lvSA.nLength:=SizeOf(lvSA);
lvSA.bInheritHandle:=True;
lvHandle:=CreateFile(PChar(lvTempName), Generic_Write, File_Share_Write,
@lvSA, Create_Always, File_Attribute_Normal, 0);
try
FillChar(lvSI, SizeOf(lvSI), #0);
lvSI.cb := SizeOf(lvSI);
lvSI.hStdOutput := lvHandle;
lvSI.dwFlags := StartF_UseStdHandles or StartF_UseShowWindow;
lvSI.wShowWindow := SW_HIDE; //SW_MINIMIZE;

If(CreateProcess(nil,
PChar(aExeName + ' ' + aCMDLine),
nil,
nil,
True,
0,
nil,
PChar(aFolderName),
lvSI,
lvPI))
then begin
SetPriorityClass(lvPI.hProcess, Idle_Priority_Class);
WaitForSingleObject(lvPI.hProcess, Infinite);
GetExitCodeProcess(lvPI.hProcess, lvRet);
Result:=(lvRet=0);
CloseHandle(lvPI.hThread);
CloseHandle(lvPI.hProcess);
CloseHandle(lvHandle);
{ Acquire console app result }
If(Assigned(aResult))then begin
aResult.LoadFromFile(lvTempName);
end;//If
DeleteFile(PChar(lvTempName));
end else begin
Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 'Error', MB_OK);
end;//If
except
Windows.CloseHandle(lvHandle);
DeleteFile(PChar(lvTempName));
raise;
end;//try-except
finally end;//try-finally
end;{ExecuteConsoleApp}

Сигурно има и решение без temp файл ама и това ми върши работа

Отговор
в отговор на nettle #6

Re: Как се стартира програма и ...

Аха, има. Вместо файл създаваш Pipe например. Всичко останало си е същото.

Отговор