Domanda

Ogni sviluppatore di Windows è fin troppo familiare con un avviso del tipo:

  

foo.exe ha riscontrato un problema e deve chiudere.

Sono rassegnato a mie applicazioni di soffiaggio di volta in volta (solo durante lo sviluppo, naturalmente), ma quando lo fanno, io non voglio vedere "foo.exe" qui. Voglio vedere un nome "amichevole", come "FooBrowser ™".

Ho cercato la documentazione MSDN alta e bassa per un modo per ignorare questa stringa e non l'ho trovato. E ho condotto un sacco di esperimenti per vedere se riuscivo a inciampare attraverso il meccanismo senza alcuna fortuna. Tuttavia, quando faccio una ricerca sul web per "ha riscontrato un problema e deve chiudere", vedo un sacco di gente parlano di casi precedute da un nome, e dubito che sono tutti sostituire l'intero avviso con il proprio. : -)

Ho bisogno di questo per lavorare per le applicazioni Win32 native; NET non è un'opzione. La serie di esempi che vedo discusso sul web include Microsoft Internet Explorer (un'applicazione nativa) e Microsoft Works (che presumo è ancora un'applicazione nativa anche se è stato quattro eoni da quando l'ho visto).

Qual è la stretta di mano segreta?

È stato utile?

Soluzione

Non so esattamente quale versione di Windows si prendono di mira, ma quelli più recenti cercherò di utilizzare il nome del prodotto amichevole quando si crash.

Assicurati di aggiungere una risorsa di versione per il vostro eseguibile, e fornire il nome del prodotto amichevole e nome del file, nella stringa FileDescription.

pagina su MSDN fornisce più informazioni.

Altri suggerimenti

La mia comprensione è che una volta che la vostra eccezione bolle fino al sistema operativo, sei fuori di fortuna. Il mio approccio sarebbe quello di intercettare l'eccezione prima si raggiunge il sistema operativo. Nelle mie applicazioni, ho una forma che mi mostrare quando ho un'eccezione non gestita che consente all'utente di inviare segnalazioni di bug, impedendo il sistema operativo di mostrare il modulo che si sta parlando.

Basta una prospettiva diversa:)

Perché non basta rinominare la FooBrowser™.exe applicazione eseguibile?

hmm. Non so se questo è di sicuro quello che lo farà, ma vale la pena di provare. Prova a guardare in SetCurrentProcessExplicitAppUserModelID

Potresti non creare un semplice risorsa di stringa che contiene il nome descrittivo della vostra applicazione e l'uso che quando si formatta il messaggio?

Cosa ne pensi?

Spero che questo aiuti, I migliori saluti, Tom.

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