Что нового

Получить код ошибки консольного приложения

gora

Знающий
Сообщения
315
Репутация
19
Имеется функция:
Код:
Func _TestArch7Zip($nmAr)
	$sLog = ''
	$pid = Run('"' & $path7Zip & '7z.exe" l -slt "' & $nmAr & '"', '', @SW_HIDE, $STDOUT_CHILD)
	While 1
	    $sLog &= StdoutRead($pid)
	    If @error Then ExitLoop
	    If StringLen($sLog) > 1536 Then ExitLoop
	    Sleep(10)
	WEnd
	If ProcessExists($pid) Then ProcessClose($pid)
	$sLog = StringLeft($sLog, 1536)
	Return $sLog
EndFunc	;==> _TestArch7Zip()
Переменные $path7Zip, $nmAr (путь к архиватору и путь к архиву) заданы вне функции.
Как можно получить код ошибки (завершения) консольного архиватора?
Спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Сразу же после вызова Run() вызываешь _WinAPI_OpenProcess():

Код:
If _WinAPI_GetVersion() >= 6.0 Then
	$hProcess = _WinAPI_OpenProcess(0x1000, 0, $PID) ; PROCESS_QUERY_LIMITED_INFORMATION
Else
	$hProcess = _WinAPI_OpenProcess(0x0400, 0, $PID) ; PROCESS_QUERY_INFORMATION
EndIf


Этим ты припятствуешь принудительному закрытию процесса после его выполнения. Далее в любое время можешь получить код возврата с помощью функции

Код:
$iExitCode = _WinAPI_GetExitCodeProcess($hProcess)


Если эта функция возвращает значение 259, то значит процесс еще не завершился. По окончании нужно вызывать функцию

Код:
_WinAPI_CloseHandle($hProcess)


для окончательной выгрузки процесса.

P.S

Тебе потребуется библиотека WinAPIEx.au3 версии 3.2 или выше.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Вот здесь обсуждалась похожая тема.
 
Верх