The .Run method has a parameter
bWaitOnReturn
Optional. Boolean value indicating whether the script should wait for the program to finish executing before continuing to the next statement in your script. If set to true, script execution halts until the program finishes, and Run returns any error code returned by the program. If set to false (the default), the Run method returns immediately after starting the program, automatically returning 0 (not to be interpreted as an error code).
Use that to make sure that tmpOutput.txt is completely written and closed before the .ReadAll().
Untested speculation: The error "input past end" means that the file exists (that's all what you check for) but has no content yet.