Domanda

Abbiamo un componente COM Delphi 2007 in corso di esecuzione da un'applicazione ISAPI. Il componente COM è appeso l'applicazione perché sta tentando di visualizzare un MessageBox (). La chiamata a MessageBox () deve essere verificando nel Delphi RTL becase non è nel nostro codice utente.

Gli si blocca app, naturalmente, perché non c'è nessuno connesso al server per cancellare il MessageBox ().

Come possiamo configurare il nostro progetto Delphi in modo che la Delphi RTL non tenta di visualizzare MessageBox () su un'eccezione?

È stato utile?

Soluzione

Ho creato un'unità di agganciare MessageBox / MessageDlg chiama (tramite una deviazione), in modo da poter sopprimere queste chiamate in un servizio di Windows (per evitare "appeso" del mio servizio dll a causa di qualche codice stupido di qualcun altro con un chiamata MessageBox in esso). Se lo vuoi, posso cercare l'unità e inviarlo a voi.

Altri suggerimenti

Scrivi la tua gestore di eccezioni e allegarlo alla manifestazione Application.OnException. Se un gestore di eventi OnException è presente, Application non utilizzerà la sua routine predefinita MessageBox. La firma è definito come:

TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;

Se questo è un server, probabilmente si vorrà per scrivere le informazioni eccezione a un registro, e, eventualmente, tornare un po 'di errore all'utente.

Che cosa dice la messagebox dice? Sto assumendo che è un'eccezione. Perché non mettere un gestore di eccezioni in tutto il codice nel componente COM, e accede l'eccezione in un modo diverso? (Ad esempio, utilizzando il registro eventi). E / o risolvere il problema che sta portando ad eccezione, in primo luogo.

Non so di alcun modo diretto in Delphi, ma cosa si può fare è scrivere un piccolo script in AutoIt / AutoHotKey e mantenere lo script in esecuzione nel vassoio di sistema, in modo che si chiuderà automaticamente la MessageBox.

Credetemi è molto semplice.

  

http://www.autoitscript.com/autoit3/index.shtml

     

http://www.autohotkey.com/

HTH

E 'possibile compilare l'applicazione come una console app? Non sono sicuro se si può fare questo e ancora averlo contiene oggetto COM, ciò impedirebbe dialoghi dei messaggi vengano visualizzati sono sicuro.

Solo un pensiero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top