2011-09-04 73 views
2

我安裝有一個價值附加到現有的多串的註冊表項(HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\ LSA \通知程序包):維克斯刪除多串的註冊表項單值,而卸載

<RegistryKey Id='RegistryEntry' Root='HKLM' Key='SYSTEM\CurrentControlSet\Control\Lsa' Action="createAndRemoveOnUninstall"> 
    <RegistryValue Type='multiString' Name='Notification Packages' Value='p1' Action='append'/> 
</RegistryKey> 

問題是,卸載時,它將刪除整個鍵:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA即。在LSA下的所有值都被刪除,有沒有什麼辦法可以刪除我附加的值(只有p1)並保留現有值?

回答

2

爲維克斯的<RegistryKey>元素文檔說(重點煤礦):

createAndRemoveOnUninstall

創建關鍵,如果不存在,當父組件被安裝 然後拔出鑰匙其所有當父組件 被卸載時的值和子項。請注意,只有當您的 程序在此項下創建附加值或子項並且您想要卸載才能將其刪除時,此值纔有用。 MSI已經刪除了它創建的所有值和 子項,因此該選項只是增加了額外開銷 來卸載

Additional evidence表明上述行爲適用於多字符串值:安裝程序引擎將自動刪除所附值上卸載,保留是那樣的安裝之前存在的值。

因此,使用的create代替createAndRemoveOnUninstall應該做你想要什麼:

<RegistryKey Id="RegistryEntry" Root="HKLM" 
      Key="SYSTEM\CurrentControlSet\Control\Lsa" 
      Action="create"> 
    <RegistryValue Type="multiString" Name="Notification Packages" 
        Value="p1" Action="append" /> 
</RegistryKey> 
+0

非常感謝你。將操作更改爲「創建」工作。 – Bajji