2011-10-12 10 views
5

Ho un programma scritto in QT che funziona bene. Tuttavia ha una dipendenza indiretta su dnssd.dll dal momento che una dll caricata dal programma usa bonjour. Se Bonjour non è installato sulla macchina che esegue il programma diràMigliorare la dll mancante messaggio di errore

Il programma non può iniziare perché dnssd.dll manca dal computer . Prova a reinstallare il programma per risolvere il problema.

Non sto caricando questa dll tramite LoadLibrary o altro. Ho collegato il binario allo stub in modo che venga caricato automaticamente prima dello int main.

Ovviamente la reinstallazione del programma non risolve il problema. Per me è chiaro che ho bisogno di installare bonjour, ma per la maggior parte degli utenti questo è estremamente criptico.

Preferisco che questo messaggio di errore sia qualcosa di più informativo come "Bonjour deve essere installato affinché questa applicazione funzioni correttamente, vai a [inserire-url-qui] per scaricarlo."

C'è un modo per rilevare quando una DLL non riesce a caricare questo loke e dare un messaggio di errore migliore?

+2

Perché non si comprime Bonjour nel programma di installazione (non può dire come, senza sapere che tipo di installazione che si sta utilizzando), o qualcosa di simile? –

+1

Bella idea. Le persone tendono a disinstallarlo poiché non sanno cosa sia. Inoltre è una seccatura e creerà un installer più complicato e fragile. Deve tenere conto che bonjour è già installato, ecc. – vidstige

+1

Quindi preferisci un'applicazione più complicata e fragile? I buoni framework di installazione forniscono solide soluzioni per la maggior parte di questi problemi. Questo non è un problema irrisolto. –

risposta

5

Impostare per ritardare il caricamento, quindi il prima possibile (prima che si verifichi il caricamento), provare a caricarlo da soli (con LoadLibrary) e segnalare il problema.

http://msdn.microsoft.com/en-us/library/151kt790.aspx

+0

quindi stai dicendo che non c'è modo di rilevare quando una DLL che è stata collegata a uno stub non viene caricata? – vidstige

+1

Se si lascia che il caricamento avvenga automaticamente, io non la penso così, ma se si modifica solo un'impostazione di collegamento e quindi si aggiungono alcune righe di codice, allora sì, è possibile. –

+1

In realtà non è necessario effettuare le chiamate tramite GetProcAddress o qualcosa del genere. Caricherete solo per verificare che la libreria sia lì - quindi chiamate le funzioni come fate normalmente sapendo che il processo di caricamento avrà esito positivo - Ritarda caricamento sposta semplicemente la LoadLibrary eseguita dal runtime su quando usate effettivamente la DLL. –

Problemi correlati