windows - Wix slet en enkelt værdi i multiString registreringsnøgle mens afinstallere

Indlæg af Hanne Mølgaard Plasc

Problem



Mit installationsprogram skal tilføre en værdi til en eksisterende multistring-registreringsnøgle (HKEY\_LOCAL\_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA \ Notification Packages):


<RegistryKey Id='RegistryEntry' Root='HKLM' Key='SYSTEMCurrentControlSetControlLsa' Action="createAndRemoveOnUninstall">
    <RegistryValue Type='multiString' Name='Notification Packages' Value='p1' Action='append'/>
</RegistryKey>


Problemet er, at når du afinstallerer, fjerner du hele nøglen: HKEY\_LOCAL\_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA dvs. alle værdier under LSA er slettet, er der nogen måde, at jeg bare kan slette værdien jeg tilføjede (kun p1) og beholde de eksisterende værdier?

Bedste reference


Dokumentationen for WiXs <RegistryKey> element siger (vægt min): [6]



   createAndRemoveOnUninstall

  
  Opretter nøglen, hvis den er fraværende, når forælderskomponenten er installeret
  fjern derefter nøglen med alle dens værdier og undernøgler, når forælder
  komponenten afinstalleres. Bemærk, at denne værdi kun er nyttig, hvis din
  programmet opretter yderligere værdier eller undernøgler under denne nøgle og dig
  vil have en afinstallation for at fjerne dem. MSI fjerner allerede alle værdier og
  undernøgler, som den opretter, så denne mulighed tilføjer kun ekstra omkostninger
  at afinstallere
.



Yderligere beviser tyder på, at den ovenfor beskrevne adfærd gælder for multi-streng værdier: installeringsmaskinen fjerner automatisk de vedhæftede værdier ved afinstallation og bevarer de værdier, der var til stede før installationen. [7]


Derfor skal du bruge create i stedet for createAndRemoveOnUninstall, hvad du vil:


<RegistryKey Id="RegistryEntry" Root="HKLM"
             Key="SYSTEMCurrentControlSetControlLsa"
             Action="create">
    <RegistryValue Type="multiString" Name="Notification Packages"
                   Value="p1" Action="append" />
</RegistryKey>