Condividi tramite


Debug di azioni personalizzate

È possibile eseguire il debug di azioni personalizzate basate su librerie a collegamento dinamico usando Strumenti di debug 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. Vedere la sezione Strumenti di sviluppo driver di Windows Driver Kit (WDK) per informazioni su Strumenti di debug per Windows.

Windows Installer usa la variabile di ambiente MsiBreak per determinare quale azione personalizzata deve essere sottoposto a 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 i punti di interruzione necessari e chiudere 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 riavviare il 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 che viene eseguita con privilegi elevati (di sistema) nella sequenza di esecuzione, collegare il debugger al servizio Windows Installer. Quando si esegue il debug di un'azione personalizzata che viene eseguita con privilegi impersonati nella sequenza di esecuzione, il sistema visualizza una finestra di dialogo che indica quale processo deve essere sottoposto a debug. All'utente viene visualizzata una finestra di dialogo che indica il processo di debug. Per ulteriori informazioni sulle azioni personalizzate con privilegi elevati, vedere Sicurezza delle Azioni Personalizzate.

Dopo che il debugger è stato collegato al processo corretto, il programma di installazione attiva un punto di interruzione del debugger immediatamente prima di chiamare il punto di ingresso della DLL. Nel punto di interruzione, la DLL è già caricata nel processo e l'indirizzo del punto di ingresso è determinato. Se non è stato possibile caricare la DLL dell'azione personalizzata o il punto di ingresso dell'azione personalizzata non esiste, non viene attivato alcun punto di interruzione. Poiché il punto di interruzione viene attivato prima di chiamare la funzione DLL, una volta attivato il punto di interruzione, è necessario usare il debugger per procedere fino a quando non viene chiamato il punto di ingresso dell'azione personalizzato. In alternativa, è possibile impostare un punto di interruzione in qualsiasi punto dell'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 di file temporaneo. Il formato del nome file temporaneo è MSI?????. TMP. In Windows XP questo file temporaneo viene archiviato in un percorso sicuro, 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 PDB nel percorso archiviato nella DLL, i simboli possono essere caricati automaticamente dallo strumento debugger. In situazioni in cui non è possibile trovare il PDB nel percorso archiviato, 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] }