Domanda

Ho problemi a disinstallare un assembly SXS win32 condiviso usando Wix3 su WinXP. Il mio file wix è simile a quello descritto in http://n2.nabble.com/Tutorial-How-to-install-files-into-WinSxS-td841475.html .

Il problema è che, se è in uso un modulo dell'assembly, il programma di disinstallazione si completa con un codice di errore riuscito ma lascia l'assembly in uno stato non funzionante: il catalogo manifest e di sicurezza sono stati eliminati, ma la directory dell'assembly esiste ancora con my dlls in esso. Le DLL sopravvivono al riavvio, quindi non sono contrassegnate per l'eliminazione in alcun modo. Non ci sono errori evidenti nel file di registro MSI.

Se provo a reinstallare il pacchetto, salta l'installazione dell'assembly. I componenti non sono più registrati, quindi non riesco a riavviare il programma di installazione. Quanto segue è mostrato nel registro msi delle installazioni successive:

  

MSI (c) (98:44) [11: 46: 56: 263]: saltando l'installazione del componente dell'assieme: {26A273E7-7F9A-4F77-9FA8-5E413A155BEC} poiché l'assieme esiste già

Non riesco a trovare un modo per riportare lo SxS in buono stato se non per eliminare manualmente la directory del mio assembly, che a questo punto non è più protetta da Ripristino configurazione di sistema di XP.

Mentre il mio attuale programma di installazione è molto più complicato, sono stato in grado di riprodurlo con un programma di installazione molto semplice che ha una singola funzione contenente un singolo componente. Quel componente contiene una dll, un manifest e un catalogo di sicurezza. The dlls & Lt; File & Gt; L'elemento ha gli attributi KeyPath, Assembly e AssemblyManifest impostati. Una volta installato, posso simulare un processo caricando l'assembly aprendo la DLL in MSVS.

Esiste un'azione aggiuntiva che dovrei richiamare alla disinstallazione per rilevare e prevenire questa situazione? In alternativa, esiste un modo per forzare l'esecuzione dell'installazione anche se le DLL esistono già in WinSXS?

In qualche modo correlato, ho anche un problema se provo ad aggiornare il pacchetto che ha installato l'assembly se l'assembly non cambia. Il programma di installazione decide che non è necessario reinstallare l'assembly (poiché non è stato modificato), ma quando viene eseguito SxsUninstallCA, va e rimuove l'assembly. Dal punto di vista dell'installatore, il componente è ancora installato, ma i file sono spariti.

È stato utile?

Soluzione

Sto lavorando a qualcosa che credo incontrerò questo stesso problema.

Il mio presupposto a questo punto è che dovrei risolverlo con un po 'di mojo dalla regkey HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ PendingFileRenameOperations e forse un po' di file smacking delle autorizzazioni (se i file erano ancora bloccati).

Il che ovviamente richiede un riavvio.

Ovviamente, nel tuo programma di installazione, puoi verificare la presenza delle chiavi e bloccare l'installazione fino a quando non scompaiono. (ad es. " devi riavviare ").

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