Deactivate windows MessageBox dialog on exception
Gregor Mückl
gregormueckl at gmx.de
Wed Aug 28 12:59:49 UTC 2019
On Wednesday, 28 August 2019 at 12:19:54 UTC, Andre Pany wrote:
> Hi,
>
> I call another process using function pipeShell and
> Redirect.all.
>
> In case the child process(also D application) throws an
> exception (str to int conversion exception), the child process
> shows a message box on windows.
>
> I found the source code within DRuntime but I do not see a way
> to hide this MessageBox.
>
> https://github.com/dlang/druntime/blob/25c8c1506183699758ca3bc323bb2a84a1d93f40/src/rt/dmain2.d#L644
>
> I would like to have the exception text available in stdout or
> stderr of the pipe.
> Why the exception isn't just written to the pipe?
>
> (I do not want to implement a catch all in the source code of
> the child process).
>
> The actual 2 D applications causing the dialog on windows:
> https://forum.dlang.org/post/usfmuabytdoludeuldts@forum.dlang.org
>
> Kind regards
> Andre
The check in druntime could be changed to query the type of file
handle that stdout/stderr point to. If they are a console or a
file redirection, the error could be written there.
The following stack overflow question gives a possible test
whether stdout/stderr exists:
https://stackoverflow.com/questions/9021916/how-do-i-check-if-my-delphi-console-app-is-redirected-to-a-file-or-pipe
The documentation for GetStdHandle and GetFileType looks good,
but I haven't tried it. I could probably write a quick proof of
concept tonight.
An (IMO ugly) alternative would be to extend
pipeShell/pipeProcess to launch the child process attached to a
console on top of the redirects.
Gregor
More information about the Digitalmars-d-learn
mailing list