>>I assume you've already done something to try playing with SetErrorMode() to see if you can get the critical error not to trap out at the OS?
>
>Unfortunately, I don't know anything about it. Is it an API function?
Yes - it determines whether Windows traps certain errors or passes them along to the app for it to deal with:
SetErrorMode
The SetErrorMode function controls whether the system will handle the specified types of serious errors, or whether the process will handle them.
UINT SetErrorMode(
UINT uMode // process error mode
);
Parameters
uMode
[in] Specifies the process error mode. This parameter can be one or more of the following values.
My guess is if it's going to help, you'll want to pass it the critical error handler flag:
DECLARE INTEGER SetErrorMode IN Kernel32 INTEGER Flags
=SetErrorMode(1)
You can use this to bypass having the OS trap out I/O errors to simplify handling some tests for missing floppies, for example:
DECLARE INTEGER SetErrorMode IN Kernel32 INTEGER Flags
nOldValue=SetErrorMode(0x8001)
? DISKSPACE('A:')
=SetErrorMode(nOldValue)
? DISKSPACE('A:')