2012-06-25 3 views
0

У меня такой сценарий для нашего проекта установщика с использованием WIX 3.6: мы хотим создать раздел реестра в установке (если этого еще не существует), напишите строковое значение с номером версии. При деинсталляции мы хотели бы сохранить этот раздел реестра, но стереть это строковое значение до пустой строки. Я знаю, что могу выполнить раздел «Сохранение реестра», установив его как «Постоянный», но я не знаю, как сделать удаление удалением значения. Спасибо за любую помощь заранее!WIX: запись постоянного ключа реестра, но удаление значения при удалении

+0

Удаление должно автоматически удалять значение, которое он написал во время установки. Было бы недостаточно? –

+0

@AlexeyIvanov Как я уже упоминал, я хотел бы сохранить раздел реестра, который я создал в процессе установки, в основном для переустановки в будущем, поэтому я отметил его как «Постоянный». И я подтвердил, что, установив «Постоянный», ключ будет сохранен после удаления. С другой стороны, я хотел бы стереть строковое значение (я хочу быть уверенным, что я даю ему понять, значение - это строка или DWORD или все, что вы добавляете в раздел реестра. И ключ может иметь несколько значений или суб-ключей). Так что сохранение ключа реестра, но удаление значения - это то, что я хочу – tete

+0

, вы пытались установить атрибут Action вашего ключа на «none», а затем в него встраиваете RegistryValue? – sttaq

ответ

0

Как я уже упоминал в комментарии ответа caveman_dick, мне пришлось добавить пользовательское действие для выполнения работы. Не удалось найти способ настройки WIX для этого.

1

Не уверен, что это сработает, поскольку я не сделал это сам, но, возможно, стоит пойти.

Во-первых, создать ключ с ForceCreateOnInstall (постоянный не должен быть обязательно), это не приведет к удалению ключа при удалении:

<Component Id="RegistryEntryKey" Guid="PUT-GUID-HERE"> 
    <RegistryKey Root="HKCU" 
       Key="Software\Microsoft\MyApplicationName" 
       ForceCreateOnInstall="yes"> 
     <RegistryValue Type="integer" 
         Name="VersionNumber"        
         KeyPath="yes"/> 
    </RegistryKey> 
</Component> 

затем просто второй compoment что просто пишет версию по установке:

<Component Id="RegistryEntryValue" Guid="PUT-GUID-HERE"> 
    <RegistryKey Root="HKCU" 
       Key="Software\Microsoft\MyApplicationName" 
       Action="write"> 
     <RegistryValue Type="integer" 
         Name="VersionNumber" 
         Value="1.2.35" 
         KeyPath="yes"/> 
    </RegistryKey> 
</Component> 

Это следует просто отменить запись при ее установке.

+0

Это не работает. Но я последую за вашим руководством, чтобы найти решение. Проблемы с вашим кодом: 1) в WIX 3.6 атрибут «Действие» RegistryKey устарел, но добавление его не вызовет какой-либо ошибки, просто не будет желаемого результата 2) на самом деле не разрешено иметь RegistryValue без значения атрибут, это вызовет ошибку 3) для первого компонента, даже если я добавлю пустую строку как значение (надеясь, что эта пустая строка будет восстановлена ​​после удаления), весь раздел реестра фактически удаляется во время удаления. Я думаю, WIX просто сильно изменил свое поведение – tete

+1

О, хорошо! :) Я полагаю, что другой вариант, если встроенный материал не будет делать то, что вы хотите, - это создать CustomAction, чтобы сделать это самостоятельно. Не идеально, но на самом деле не так сложно с управляемым пользовательским действием. –

+0

Это именно то, что я делаю. Я стараюсь избегать произвольных действий настолько, насколько могу, но это та ситуация, в которой я должен это делать – tete

Смежные вопросы