Per superare ICE si dovrebbe spostare registro per utente per separare i componenti e utilizzare alcuni voce di registro come percorso chiave per tale componente, vale a dire:
<Component Id='PerUserRegistry' Guid='*'>
<RegistryValue Id="PerUserRegistry_KeyPAth" KeyPath="yes" Root="HKCU" Key="Software\[Manufacturer]\[ProductName]\[ProductCode]\PerUserRegistry" Name="[PackageCode]" Value="[ProductVersion]" Type="string" />
<!--Other Per-user registry goes here-->
</Component>
Sono completamente d'accordo con Christopher: E 'pratica comune di lasciare per -utente dati sulla disinstallazione, ma se la rimozione è necessaria, quindi l'installazione attiva è l'unica opzione reale.
In primo luogo propongo di rimuovere loro su Installa o reinstallare invece di disinstallazione, è sufficiente aggiungere la voce RemoveRegirty e configurazione attiva, cioè con questo codice WiX:
<Component Id='ActiveSetup' Guid='*'>
<RegistryValue Id="ActiveSetup00" Root="HKLM" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" />
<RegistryValue Id="ActiveSetup01" Root="HKLM" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Value="[ProductName] [ProductVerion] Configuration" Type="string" />
</Component>
<Component Id='PerUserRegistryCleanup' Guid='*'>
<RegistryValue Id="PerUserRegistry_KeyPath" Root="HKCU" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" />
<RemoveRegistryKey Id='PerUserRegCleanup' Root='HKCU' Action='removeOnInstall' Key='Key\To\Be\Removed'/>
</Component>
Nota: [PackageCode] Uso in ActiveSetup è molto raccomandato, quindi con ogni nuova versione (build) del pacchetto MSI si aggiunge una voce separata (vedi anche la mia nota finale). Ho usato il registro di configurazione attivo per utente come percorso chiave di proposito, quindi non lo si esegue per l'utente corrente due volte.
Come per rimuoverli dopo la disinstallazione, Ora, si spera che sia necessario rimuovere l'intera chiave e non solo alcuni valori. In entrambi i casi, vorrei creare un'azione personalizzata per aggiungere la voce del Registro di sistema per l'installazione attiva durante la disinstallazione (o se ci sono molte chiavi/valori, creare e distribuire file .CMD con quelli e avviarlo su disinstallazione, prima dell'azione RemoveFiles, per aggiungere tutto di loro al registro).
Nota: che raccomando vivamente di aggiungere l'eliminazione di questo registro durante l'installazione, o si potrebbe finire per rimuovere i valori per utente quando il software è ancora installato.
Quindi, ecco il codice di WiX per tutto questo:
<CustomAction Id="CA_UninstallRegistryCleanUp" Directory="SystemFolder" ExeCommand="REG.exe ADD "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp" /v StubPath /d "reg add ^"HKCU\Key\To\Be\Removed^" /va /f" /f" Return="ignore" />
<InstallExecuteSequence>
<Custom Action='CA_UninstallRegistryCleanUp' After='RemoveRegistryValues'>REMOVE~="ALL"</Custom>
</InstallExecuteSequence>
<Component Id='RegCleanup_Remover' Guid='*'>
<RegistryValue Id="PerUserRegistry_KeyPAth" Root="HKLM" KeyPath="yes" Key="SOFTWARE\[Manufacturer]\[ProductName]\[ProductCode]\" Name="DummyKey" Value="[ProductVersion]" Type="string" />
<RemoveRegistryKey Id='RegCleanup_Remover' Root='HKLM' Action='removeOnInstall' Key='SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp'/>
</Component>
Note finali: lì solo due piccoli problemi con tutta questa roba Setup attivo: attenzione su Windows Terminal Server; e una volta che l'installazione attiva è stata eseguita per un utente per il corrente .MSI, non verrà eseguita di nuovo se si decide di reinstallare lo stesso pacchetto, a meno che non si modifichi PackageConde o si rilasci la versione nella chiave di registro ActiveSetup. Questi sono argomenti per un altro giorno, fammi sapere se ne hanno bisogno.
E non dimenticare di aggiungere tutti i componenti di cui sopra ad alcune caratteristiche.
Le chiavi di registro che estendono il menu di scelta rapida di Explorer. Non rimuoverlo, risulterà nei menu abbandonati. –
Perché è stato esteso per utente piuttosto che per macchina? –
Risposta aggiornata per includere il riferimento all'hack –