Я считаю, что лучший способ приблизиться к этому сценарию - реализовать логику «сохранить изменения» в вашем приложении, а не через настройку. Это позволяет избежать усложнения вашей настройки и дает больший контроль над процессом конфигурации, поскольку вся логика встроена в ваш основной EXE-файл. Это означает, что вы можете пройти весь процесс и отладить его обычным способом разработки.
Для этого вы можете установить файлы "базовой конфигурации" в папку, доступную только для чтения, например
- % ProgramFiles% \ MyCompany \ MyApp \ MyConfig *. *
Тогда ваше приложение может при запуске определить, существуют ли существующие конфигурационные файлы в профиле пользователя (или в доступном для записи общем местоположении ), и спросить пользователя, должны ли новые конфигурационные файлы перезаписать существующий конфиг или нет. Вы также можете легко реализовать функции резервного копирования для старой конфигурации.
Чтобы задать вопрос только один раз для пользователя после развертывания , обычное приложение должно пометить HKLM с последней установленной версией приложения и затем написать соответствующий флаг в HKCU, когда операция копирования завершена или пользователь отклонил ее:
- HKLM \ Software \ MyCompany \ MyApp \ Version = 2.0.0
- HKCU \ Software \ MyCompany \ MyApp \ Version = 1.0.0
В вышеприведенном сценарии версия 2.0.0 приложения была установлена, но копия конфигурации для каждого пользователя еще не запущена для данного пользователя. После запуска версия HKCU будет установлена на 2.0.0, и операция не будет выполняться снова, пока HKLM не будет увеличен.