09.09.2010 17:10:10
Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 1,358
· Новый пользователь: JeriX
Последние фото
Простой ScreenSaver
Простой ScreenSaver
Альбом: Галерея XNA сообщества

Дипломная работа
Дипломная работа
Альбом: Галерея XNA сообщества

Дипломная работа
Дипломная работа
Альбом: Галерея XNA сообщества

Блоги
mike
» Silverlight (Symb...
Hale_32bit
» Уравнение многоуг...
mike
» WP7 XNA Microphone
mike
» WP7 XNA Ввод текста
SolarWind
» Установка Windows...
SolarWind
» Windows Phone 7 S...
SolarWind
» Установка в offli...
SolarWind
» Книга по Win Phon...
Hale_32bit
» 4) Третий закон (...
Hale_32bit
» 3) Третий закон (...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Google
Про конфигурацию
Просмотров: 1110 - Заполнять: SolarWind - 27.08.2009 14:59:57
 
Начну издалека, как я до сегодняшнего дня работал с конфигурационными файлами приложения. Еще в давние времена, когда я только начинал свой трудовой путь программиста и шло активное освоение, тогда уже .NET Framework 1.1, в один прекрасный момент встал вопрос о способе хранения конфигурационных данных приложения. Быстро поняв, что INI файлы больше не рулят, был освоен метод хранения конфигурации в XML файле, а точнее app.config. C тех пор технология для меня не сильно изменилась, добавляем в проект новый item - Application Configuration File прям в нем ручками добавляем тег <appSettings></appSettings> и в него начинаем накидывать теги для хранения параметров конфигурации <add key="" value=""/>. С выходом .NET Framework 2.0 изменилось только то, что на помощь пришел класс ConfigurationManager. На стороне приложения создавался класс что-то наподобие:
GeSHi: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Configuration;
  5.  
  6. namespace TestApp
  7. {
  8. internal class Config
  9. {
  10. public static string TestConfigValue;
  11.  
  12. static Config()
  13. {
  14. TestConfigValue = ConfigurationManager.AppSettings["TestConfigValue"];
  15. }
  16.  
  17. public static void Save()
  18. {
  19. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  20. config.AppSettings.Settings["TestConfigValue"].Value = TestConfigValue;
  21. config.Save(ConfigurationSaveMode.Modified);
  22. }
  23. }
  24. }
  25.  
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.2


Данного функционала мне хватало за глаза, тут и доступ к любым параметрам конфигурации из практически любой части программы и сохранение параметров конфигурации и простота реализации.

И вот я решил решил серьезно заюзать ClickOnce, для непосвященных - это технология развертывания приложения с диска, сетевой шары, сети (протоколы http и ftp), но самое замечательное - это автоматическое обновление приложения. Думаю, что не надо объяснять, когда у тебя приклад уже стоит на 20-30 компьютерах пользователей и тут в нем обнаруживается мелкая бага, работать не мешает, но при определенных действия пользователя все летит к чертям или внезапно изменяется формат входных данных. Поправить программу это одно дело, а вот заново ее распространить, да никого не забыть (отпуска, декреты, миграция по должностям конечных пользователей). Короче, такой, маленький ад. Еще одна незаменимая способность ClickOnce - для запуска установки не нужны административные права. Если организация очень большая (а у меня она просто огромная) и пользователи не являются локальными администраторами, для установки нового приложения нужно либо поднять админов которые пропишут тебя, как администратора на машине конечного пользователя (при одно-двухкратном развертывании катит), либо сдвинуть отдел тех. обеспечения, которые твой инсталлер закатают в msi и через групповую политику ActiveDirectory раздадут на машины конечных пользователей. С приходом ClickOnce все это стало историей, сейчас достаточно разослать письмо с ссылкой на инсталлер, находящийся в intranet под управлением IIS и короткой инструкцией по установке - "Соглашаться на все, о чем Вас спросят". В довершение всему, при перекомпиляции и deploy все пользователи гарантировано получат новую версию при следующем перезапуске. Счастье есть!

Итак, вернемся к нашим баранам, а вернее конфигурации приложения. Методом научного тыка было выяснено, что при деплое новой версии приложения на сервер, после того, как оно разворачивается на стороне пользователя файл конфигурации доблестно затирается либо моими значениями по умолчанию, либо моими тестовыми настройками, что нередко приводит к падению приклада (например путь для объекта FileSystemWatcher настроенный на мой путь не находит его у пользователя и при активации валит приложение). После непродолжительного гугления решение было найдено.

Как оказалось со времен .NET Framowork 1.1 в этом направлении технологии далеко продвинулись, конфигурация теперь может подразделяться на блоки: секция настроек пользователя и приложения, файл конфигурации теперь можно можно создавать непосредственно из VS и статичный класс теперь генерится автоматически. Но проблему с затиранием настроек пользователя при использовании ClickOnce в явном виде это не решает, но есть красивый обходной путь. Дело в том, что у базового класса генерируемого студией класса конфигурации - System.Configuration.ApplicationSettingsBase есть замечательный метод Upgrade(). Основная его задача это найти предыдущую версию файла конфигурации секции <userSettings> (тут небольшое отступление, при обычном развертывании copy и ClickOnce поведение у этой секции разное, подробности ищите в сети) и данные из нее записать в новый файл конфигурации. Остается дело за малым определить момент когда же у нас появляется новая конфигурация, т.е. отследить момент нового развертывания. Как оказалось прямых способов для этого нет и вот тут люди заюзали гениальность простоты.

Финт ушами заключается в следующем, нужно объявить новый параметр конфигурации, скажем с именем UpdateRequired, типа bool и значением по умолчанию "true" - это важный момент.
А в коде запуска приложения написать небольшой вызов:
GeSHi: C#
  1. if (Properties.Settings.Default.UpdateRequired)
  2. {
  3. Properties.Settings.Default.Upgrade();
  4. Properties.Settings.Default.UpdateRequired = false;
  5. }
Добавлено за 0.004 секунд, используя GeSHi 1.0.8.2


Итого, при новом развертывании и запуске приложения, конфигурация у нас будет заполнена значениями по умолчанию, т.е. свойство UpdateRequired примет значение - true, при активизации приложения мы это дело отследим, вызовем Properties.Settings.Default.Upgrade();, который перетянет параметры предыдущей версии в текущую, а флаг UpdateRequired мы выключим навсегда или по крайней мере до следующего развертывания или переинсталяции приложения.
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.

© 2007 - 2008 by Elactos
Реклама
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

07.09.2010
Я из Иркутска, только сейчас в Питере.

06.09.2010
А Иркутская область? Smile

06.09.2010
а краснодарский край есть?

04.09.2010
Я из Красноярска

04.09.2010
а тут есть кто нибудь из красноярска?

03.09.2010
16 сентября релиз программных продуктов будет

03.09.2010
Разработка WP7 завершена! http://www.vesti..
..?id=389960

03.09.2010
походу именно самсунги станут первыми телефонами поступившими в открытую продажу.

03.09.2010
а мне хочеца чтоб самсунг чтото выпустил не хуже I9000 Galaxy S на этой ОС

03.09.2010
Мне обещали прислать смарт за пару недель до офф. релиза. Знакомые сотрудники из Майкрософт Юкрейн тоже пока в ожидании. А этот прототип на LG я тоже щупал еще 2 месяца назад. Мобила моей мечты!

02.09.2010
WP7, интересно для Украинцев, http://itc.ua/nod.
..mments-top
.

30.08.2010
А понял получается нужно просто перемножить векктор реального положения мыши на вектор Scaleing'а

30.08.2010
Где находиться .X Viewer в новом, июльском SDK? Чем еще можно .Х файлы глянуть?

30.08.2010
http://youtu.be/1F
zVPytCw9Q?hd=1

30.08.2010
Как?

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 0,17 секунд 1,332,787 уникальных посетителей