ClickOnce и управление строками подключения
Наше приложение использует ClickOnce для развертывания пользователем без прав на своем компьютере. Приложение имеет базу данных SqlServerCE, которая содержит конфиденциальные данные. Требование заключается в том, что пароль БД должен быть изменен при развертывании и каждые 20 дней после этого (настраивается). Мы обрабатываем изменение пароля базы данных, изменение connstring и шифруем раздел connString файла app.config.
Проблема заключается в последующем развертывании ClickOnce. Если вновь развернутая база данных отличается от первоначального развертывания (значение хеша в манифесте изменяется), проблем не возникает. Новый БД заменяет старый и имеет первоначальный пароль по умолчанию, который обновляется немедленно.
Когда вновь развернутая база данных совпадает с исходным развертыванием (значение хеша в манифесте такое же), возникает проблема. ClickOnce сворачивает старую базу данных в новое развертывание, но приложение больше не имеет доступа к паролю. Он находится в старом файле app.config и не переносится. Можно подумать, что, по крайней мере, секция строки подключения будет перенесена, когда есть база данных, но я думаю, это слишком много.
Так что ладно, не проблема. Мы добавили код для копирования текущего пароля в файл user.config. Теперь при развертывании, если приложение не может открыть базу данных, оно берет пароль из user.config и обновляет connstrings в app.config. Появляется ClickOnce, чтобы автоматически скопировать содержимое старого user.config и создает новый user.config без необходимости приложения делать что-то вроде вызова settings.default.upgrade() и.Save().
Но это не работает, если user.config зашифрован. Похоже, ClickOnce пытается скопировать данные из старого файла u.config в новый, но не удается из-за шифрования. Таким образом, он просто содержит все данные, развернутые в пользовательских настройках app.config.
Есть ли механизм для доступа к старому файлу user.config, расшифровки и извлечения данных, которые он содержит? И старый, и новый user.config доступны в наборе папок данных ClickOnce, но я не хочу писать код, который пытается найти старый файл вручную.
ClickOnce - зверь, когда дело доходит до безопасности локальных данных. Это просто не полезно. Если я не могу заставить работать user.config, мне придется разместить файл в какой-то доступной для пользователя области, которая находится за пределами понимания ClickOnce, и оттуда управлять парольными данными. Содержание будет зашифровано, конечно.