Установщик, который я пишу с помощью WiX 3.0, использует элемент RegistryValue для изменения существующего значения реестра (первоначально написанного нашим основным продуктом). Я пытаюсь выяснить способ восстановления значения реестра, когда пользователь удаляет мою утилиту. Я бы хотел избежать использования настраиваемого действия, но это может быть единственным средством обращения? ТИА.Как моя WiX-версия может восстановить значение реестра?
ответ
Я сделал это. Представляемое значение реестра - это приложение, связанное с расширением файла, но это может быть любое значение реестра.
Моя первая идея состояла в том, чтобы использовать «настраиваемое действие» для установки и удаления, чтобы сохранить и восстановить соответственно состояние regy. Это казалось достаточно простым.
Я создал проект установки в VS2008 и создал CA как файлы javascript. Скрипт «on install» схватил существующее значение regy и спрятал его в известное место. Скрипт «on uninstall» будет выглядеть в известном месте, а затем помещать найденное значение обратно в исходное местоположение. Легко, правда?
Существовали две проблем:
скрипт, который бежал во время установки, чтобы сохранить уже существующие значения реестра, запускается после того, реестр уже был обновлен со значениями для вновь установленной вещи , Таким образом, он сохранил новую настройку вместо настройки, которая была там до запуска MSI. Не полезно.
Сценарий, который запускается во время удаления, запускается ПОСЛЕ значений реестра и фактически всего поддерева каталога,
были удалены. Включая спрятанную стоимость. Так что оно потеряло свое состояние.
Чтобы решить, что я написал another script that re-orders the custom actions так они работают в надлежащее время.
На самом деле есть еще один поворот. Очевидно, что сценарий «Восстановить» (на ) не будет работать, если он запущен после того, как записи реестра для приложения были удалены. Я не могу вспомнить сейчас, почему ... но я также решил, что этот скрипт не смог запустить до этого. Так или иначе, это тоже не сработало.
Итак, я модифицировал MSI для запуска сценария восстановления дважды. В фазе 1 он переносит сохраненное значение на «автостоянку» в реестре. Затем ключи и значения приложения в реестре удаляются, но автостоянка остается. В фазе 2 , за пределами транзакционной защиты, сценарий восстановления извлекает состояние с автостоянки, восстанавливает ассоциацию файлов, а затем удаляет парковку.
Я не могу точно помнить, почему мне нужно было сделать это за 2 шага, но я помню, как долго сражался с ним, прежде чем приступать к решению.
Как это работает в области развития:
- установить
on install
иon uninstall
СА в проекте VS - построить проект установки VS
- запустить скрипт после обработки, который изменяет MSI.
При использовании MSI это немного сложнее, чем я изначально думал, но он работает.
Если вы используете WiX, у вас может быть больше контроля над временем и порядком шагов, поэтому может не понадобиться этот этап последующей обработки.
Наконец, вы сказали, что хотите избежать CA. Для меня CA избегают, потому что их мучительно производить на C++, а их создание в .NET часто неуместно. Но довольно просто использовать Javascript для CA. Некоторые люди думают script is the wrong tool for the CA job. Я думаю, что это неправильно. I think script is a very good tool for this purpose. И как только вы сможете принять скрипт как хороший инструмент, вам не нужно держать нос в создании пользовательского центра сертификации.
Таблица реестра неспособна записать значение реестра во время удаления, поэтому правильно, что это необходимо сделать с помощью настраиваемого действия. Я придерживаюсь мнения, что использование скрипта плохое. Независимо от того, хотите ли вы слушать, зависит от вас. Я могу сказать вам, что на днях меня вызвали, чтобы решить проблему, когда некоторые из них писали CA-сервер vbscript, который терпел неудачу, поскольку объект файловой системы был незарегистрирован как часть процесса блокировки безопасности.
Я предлагаю C++ или C#/DTF в зависимости от ваших потребностей.
Столкнувшись с подобной проблемой, необходимо обновить значение реестра при установке и восстановлении до предыдущего значения при удалении. Единственное возможное решение - создать для этого настраиваемое действие?
Я нашел расширение для WiX, который имеет fucntions для этой цели link to wix extensions
- 1. Проект установки VS; Как восстановить значение реестра при удалении?
- 2. Восстановить значения реестра ассоциации файлов при удалении
- 3. Как удалить значение реестра?
- 4. Как обновить значение реестра
- 5. Как удалить значение реестра и ключ из записи реестра
- 6. Как узнать значение из реестра?
- 7. Как получить значение из реестра?
- 8. Как установить значение ключа реестра
- 9. Почему моя реализация шаблона реестра не работает?
- 10. Значение реестра Доступ
- 11. Получить значение ключа реестра
- 12. Получить значение реестра C#
- 13. Получить удаленное значение реестра
- 14. Как восстановить это значение нагрузки
- 15. Как найти значение реестра, не зная путь реестра vb6?
- 16. Удалить значение реестра PendingFileRenameOperations
- 17. VB6 реестра Значение Проблема
- 18. Получить значение из реестра
- 19. Проверка Значение реестра
- 20. как интерпретировать значение реестра Windows «ShellState»
- 21. Как изменить значение реестра, принадлежащее системе
- 22. Как восстановить предыдущее значение (javascript)?
- 23. Как узнать значение раздела реестра C#
- 24. Inno Setup. Как удалить значение реестра?
- 25. Восстановить ключ/значение свойства
- 26. C# получить значение подразделов реестра
- 27. Значение перехвата, считанное из реестра
- 28. реестра параметр значение ключа в aspx.page
- 29. Как получить значение раздела реестра и ТОЛЬКО значение using powershell
- 30. Bootstrapper «Невозможно прочитать значение реестра»
Спасибо! Я ценю, что вы делитесь своим опытом с той же проблемой в своем ответе. Это очень полезно, и я понял, что писать CA первого типа - это, вероятно, лучший способ справиться с этим за время, которое у меня есть. Ваш сценарий впечатляет (!), Но я не собираюсь так сильно работать. :-) Поскольку я использую WiX, я посмотрю, смогу ли я получить CA + DLL для правильной работы. С уважением, Thomas – 2010-03-25 22:01:18
о скрипте. CA: вы были бы удивлены, сколько магазинов там просто отключает инфраструктуру хостов Windows для обеспечения безопасности. Я обнаружил это с трудом, когда я написал свой первый пользовательский CA в скрипте для одного из наших установщиков. –
Я понятия не имел ...? – Cheeso