Moin,
bitte entschuldigt den Doppelpost, aber ich glaube im englischsprachigen Forum versteht man nicht worauf ich hinaus will ...
Also, ich möchte ein externes Tool starten und StderrREad & StdoutRead benutzen um die Ausgaben zu verwerten.
Wenn ich es als Script laufen lasse funktioniert es komischerweise einwandfrei, aber wenn ich es kompiliere, dann bleibt es hängen !
Der Fehler ist, wenn StderrRead keine Message erhält, dann pausiert das Script !
Das soll es aber nicht !!!
Ich habe in der Hilfe etwas über das "peek" Argument gelesen, aber verstehe nicht so recht wie ich den nutzen kann, bzw. ob es überhaupt die Lösung des Problems ist.
Spoiler anzeigen
Func _UnRAR_Archive($sArchiveDir, $sArchive, $sPassword = '', $sDirectory = '')
If FileExists($sArchiveDir & '\' & $sArchive) Then
Select
Case $sPassword = '' And $sDirectory = ''
$pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ "' & $sArchiveDir & '\' & $sArchive & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
_Stream_Read($pidUnRAR)
If @error = 3 Then Return SetError(1) ; Password required.
Case $sPassword = '' And $sDirectory <> ''
$pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ "' & $sArchiveDir & '\' & $sArchive & '" "' & $sDirectory & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
_Stream_Read($pidUnRAR)
If @error = 3 Then Return SetError(1) ; Password required.
Case $sPassword <> '' And $sDirectory = ''
$pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ -p"' & $sPassword & '" "' & $sArchiveDir & '\' & $sArchive & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
_Stream_Read($pidUnRAR)
If @error = 2 Then Return SetError(2) ; Password incorrect.
Case $sPassword <> '' And $sDirectory <> ''
$pidUnRAR = Run(@ScriptDir & '\UnRAR.exe x -o+ -p"' & $sPassword & '" "' & $sArchiveDir & '\' & $sArchive & '" "' & $sDirectory & '"', $sArchiveDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
_Stream_Read($pidUnRAR)
If @error = 2 Then Return SetError(2) ; Password incorrect.
EndSelect
EndIf
EndFunc ;==>_UnRAR_Archive
[/autoit] [autoit][/autoit] [autoit]Func _Stream_Read($PID)
While 1
$line = StdoutRead($PID)
If @error Then
ExitLoop
ElseIf StringInStr($line, 'No files to extract') Then
;Return SetError(1)
ElseIf StringInStr($line, 'All OK') Then
Return
EndIf
WEnd
While 1
$line = StderrRead($PID)
If @error Then
ExitLoop
ElseIf StringInStr($line, 'password incorrect') And Not StringInStr($line, 'Enter password (will not be echoed)') Then
Return SetError(2)
ElseIf StringInStr($line, 'Enter password (will not be echoed)') Then
Return SetError(3)
EndIf
WEnd
EndFunc ;==>_Stream_Read
Gruß
Greenhorn