SCREEN=OFF SYSMENU=OFF RESOURCE=OFFFWIW, the pertinent code from the main PRG file looks like:
#INCLUDE DEFAULTS.H PRIVATE goApp goApp = CREATEOBJECT('AppManager') IF VARTYPE(goApp) <> [O] MESSAGEBOX([Application initialization error.],16,[Error!]) QUIT ENDIF ON ERROR goApp.LogError(ERROR(), MESSAGE(), MESSAGE(1), PROGRAM(), LINENO()) ON SHUTDOWN goApp.KillEvents() DO FORM OraDBMain READ events ON ERROR goApp.Release() QUIT DEFINE CLASS AppManager as Custom PROTECTED lKilled PROTECTED PROCEDURE Init This.SetEnvironment() ENDPROC PROCEDURE Release IF NOT This.lKilled This.KillEvents() ENDIF RELEASE This ENDPROC PROCEDURE Destroy This.ReleaseObjects() CLEAR DLLS ON ERROR ON ESCAPE CLOSE TABLES CLOSE DATABASES ON SHUTDOWN ENDPROC PROCEDURE LogError LPARAMETERS tnError, tcMsg1, tcMsg2, tcProg, tnLine LOCAL lcString lcString = [Error: ] + TRANSFORM(tnError) + VFP_CRLF ; + [Msg1 : ] + TRANSFORM(tcMsg1 ) + VFP_CRLF ; + [Msg2 : ] + TRANSFORM(tcMsg2 ) + VFP_CRLF ; + [Prog : ] + TRANSFORM(tcProg ) + VFP_CRLF ; + [Line : ] + TRANSFORM(tnLine ) + VFP_CRLF STRTOFILE(lcString, [ErrorLog.txt], 1) THIS.KillEvents() ENDPROC PROTECTED PROCEDURE SetEnvironment _screen.Visible = .F. close tables all close databases close all set bell off set century on set cpdialog off set deleted on set exclusive off set escape off set exact off set head off set hours to 24 set memowidth to 80 set multilocks on set notify off set safety off set status off set talk off set unique off clear if version(2) = 2 set escape on on escape endif ENDPROC PROCEDURE KillEvents CLEAR EVENTS This.lKilled = .t. ENDPROC ... ENDDEFINE