sabato 24 settembre 2011

Windows Installer Resiliency: disabilitarla per alcuni files


Lavorando sulla creazione di pacchetti di installazione per i mie progetti mi sono scontrato con una caratteristica importante, ma nello stesso fastidiosa di Windows Installer, meglio conosciuta come resiliency.
Essa è un meccanismo di autoriparazione del servizio Windows Installer che sorveglia i files del vostro programma e li ripristina nel caso qualcuno fosse stato cancellato per errore.
Detta così potrebbe sembrare una buona cosa, ma spesso può intralciare il lavoro del programmatore, specialmente in tutti quei casi dove è il programma stesso a dover cambiare nome o cancellare i files installati con il pacchetto.
L'escamotage che Microsoft ci propone per bypassare il meccanismo è quello di disabilitare il componente WI nel caso in cui esso ostacoli il nostro volere.
Non mi sembra però una buona soluzione, soprattutto per i grandi effetti collaterali, quindi è più opportuno inibire il controllo sui files per i quali vogliamo avere la massima libertà di operare.
Il meccanismo della resiliency si basa sul valore della chiave KeyPath di ogni componente del pacchetto e che rappresenta il collegamento logico fra esso ed il file fisico. Rendendolo nullo, quindi, avremo la possibilità di escludere il check sullo specifico componente.
Per fare ciò sarà sufficiente aprire il pacchetto MSI precedentemente creato con il vostro ambiente preferito con ORCA e osservare il contenuto di due tabelle, principalmente: Component e File.
Nella tabella Component trovate il campo KeyPath, ma l'intero contenuto risulata illegibile a causa degli identificativi numerici usati. Per avere l'esatta corrispondenza fra il valore di KeyPath ed il nome del file dobbiamo avvalerci della tab File, come evidenziato nelle due immagini di seguito


Cancellare il valore di KeyPath nei componenti per i quali non desideriamo l'autorepair ci consentirà di liberarli dall'occhio vigile di Windows Installer

Nessun commento:

Posta un commento

Mi raccomando, non costringermi a censurare il tuo commento, perciò sii educato!