Condividi tramite


Debug di azioni personalizzate

È possibile eseguire il debug di azioni personalizzate basate su librerie di collegamento dinamico usando Debug Strumenti per Windows. Non è possibile usare il debug dinamico con azioni personalizzate basate su file eseguibili o script.

Le tecniche descritte in questa sezione consentono di eseguire il debug di azioni personalizzate di Windows Installer. Per informazioni sugli strumenti di debug per Windows, vedere la sezione Strumenti di sviluppo driver di Windows (WDK).

Windows Installer usa la variabile di ambiente MsiBreak per determinare quale azione personalizzata deve essere eseguita il debug. Se si ha accesso al codice sorgente dell'azione personalizzata, è possibile usare il debug senza MsiBreak. Per avviare il debug senza MsiBreak, inserire una finestra di messaggio temporanea all'inizio del codice dell'azione. Quando viene visualizzata la finestra di messaggio durante l'installazione, collegare il debugger al processo proprietario della finestra di messaggio. È quindi possibile impostare tutti i punti di interruzione necessari e ignorare la finestra di messaggio per riprendere l'esecuzione. Non è possibile eseguire il debug delle parti precedenti dell'azione personalizzata da questo metodo.

Per usare la variabile di ambiente MsiBreak per eseguire il debug dell'azione personalizzata, impostare MsiBreak sul nome dell'azione personalizzata nella tabella CustomAction. MsiBreak può essere un sistema o una variabile di ambiente utente. Se la variabile è impostata come variabile di sistema, potrebbe essere necessario un riavvio del sistema quando il valore viene modificato per rilevare il nuovo valore.

Per usare la variabile di ambiente MsiBreak per eseguire il debug di un'interfaccia utente incorporata, impostare il valore di MsiBreak su MsiEmbeddedUI.

Windows Installer controlla solo la variabile di ambiente MsiBreak se l'utente è un amministratore. Il programma di installazione ignora il valore di MsiBreak se l'utente non è un amministratore, anche se si tratta di un'applicazione gestita.

Se si esegue il debug di un'azione personalizzata eseguita con privilegi elevati (di sistema) nella sequenza di esecuzione, collegare il debugger al servizio Windows Installer. Durante il debug di un'azione personalizzata eseguita con privilegi rappresentati nella sequenza di esecuzione, il sistema richiede una finestra di dialogo che indica quale processo deve essere sottoposto a debug. L'utente viene richiesto con una finestra di dialogo che indica quale processo eseguire il debug. Per altre informazioni sulle azioni personalizzate elevate, vedere Sicurezza azione personalizzata.

Dopo aver collegato il debugger al processo corretto, il programma di installazione attiva immediatamente un punto di interruzione del debugger prima di chiamare il punto di ingresso della DLL. Al punto di interruzione, la DLL è già stata caricata nel processo e l'indirizzo del punto di ingresso determinato. Se la DLL dell'azione personalizzata non è stata caricata o il punto di ingresso dell'azione personalizzata non esiste, non è stato attivato alcun punto di interruzione. Poiché il punto di interruzione viene attivato prima di chiamare la funzione DLL, dopo aver attivato il punto di interruzione, è necessario usare il debugger per eseguire l'avanzamento fino a quando non viene chiamato il punto di ingresso dell'azione personalizzato. In alternativa, è possibile impostare un punto di interruzione ovunque nell'azione personalizzata e riprendere l'esecuzione normale.

Windows Installer esegue DLL non archiviate nella tabella Binaria direttamente dal percorso della DLL. Il programma di installazione non conosce il nome originale di una DLL archiviata nella tabella Binaria ed esegue l'azione personalizzata dll con un nome file temporaneo. Il formato del nome del file temporaneo è MSI?????. TMP. In Windows XP questo file temporaneo viene archiviato in una posizione sicura, in genere <WindowFolder>\Installer.

Si noti che molte DLL create per il debug contengono il nome e il percorso del file PDB corrispondente come parte della DLL stessa. Quando si esegue il debug di questo tipo di DLL in un sistema in cui è possibile trovare il database nel percorso archiviato nella DLL, i simboli possono essere caricati automaticamente dallo strumento debugger. In situazioni in cui il PDB non è disponibile nella posizione archiviata, in cui il debugger non supporta il caricamento dei simboli dal percorso archiviato o in cui la DLL non è stata compilata con le informazioni di debug, potrebbe essere necessario inserire i file di simboli nella cartella con il file DLL temporaneo.

Il programma di installazione aggiunge informazioni di debug per gli script di azione personalizzati al file di log di installazione.

There is a problem with this Windows Installer package. A script 
required for this install to complete could not be run. Contact your 
support personnel or package vendor.  {Custom action [2] script error 
[3], [4]: [5] Line [6], Column [7], [8] }