| Как не надо делать обновления |
| Author: Blacksilver |
| 27.09.2009 23:02 |
Как не надо делать обновленияВот такая стала передо мной задача: есть предприятия, им раздается база данных на Access и программа, с ней работающая. Программа постепенно дополняется и структуру базы данных с каждым обновлением тоже надо менять, сохраняя при этом данные. И в одном только выпуске обновлений есть столько подводных камней (то есть я столько раз налажал), что их стоит описать в отдельной статье. Предупредить вас. Программа написана на Delphi, в качестве базы данных - файлик mdb, установщики собирал программой Inno Setup 5. Камень первый - меняем структуру базы данныхПри установке каждого обновления нужно менять структуру базы данных. Для этого был срочно написан модуль, который ищет в папке файлик dbupdate.sql, спрашивает пользователя, нужно ли его установить, запускает по очереди запросы из файлика и спрашивает пользователя, можно ли файлик удалить. Плохое решение. Много недостатков, вот они:
Камень второй - настраиваем установщикЭтот камень - про опцию установщика AppendDirName, которая выставлена по умолчанию. При этой опции если указать установщику кидать программу в папку "D:\Program Files", установщик поймет это, как в папку "D:\Program Files\MyProg". Если он понимает иначе, то это очень неудобно. Так вот, при создании обновлений эту опцию нужно обязательно отключать. Иначе случится вот такое: 1. У пользователя программа в папке "D:\MyProg". Повторяю, при обновлениях отключайте AppendDirName. Камень третий - защита от дуракаОднажды позвонили мне бухгалтеры одного предприятия и заявили, что после установки обновления у них пропали данные, которые они вводили на протяжении месяца. После длительного взгляда на их компьютер я узнал, что они устанавливали всё подряд - и все обновления, что у них были, и первую версию программы, которая перезаписала файл с их базой данных файлом с пустой. Месяц работы пошел насмарку. Вы видели в фильмах как полицесйcкий рассказывает матери о смерти сына? Я почувствовал себя на месте того полицейского, когда говорил им, что данные восстановить не удалось. И теперь два способа как я мог это предотвратить. Желательно использовать оба. Способ первый, простой: опять таки, настраиваем установщик. Для всех файлов с данными, кроме тех случаев, когда это действительно нельзя, устанавливаем флаг onlyifdoesntexist. Даже для самой первой версии программы. Это значительно понижает шансы, что они как-нибудь запишут что-то поверх своих данных. Способ второй, универсальный: регулярное создание резервных копий БД, можно и без ведома пользователя. Это, конечно, слишком по-Майкрософтовски, когда программа считает, что лучше пользователя знает, что делать, но оно б сработало, если б я это сделал. ЗаключениеКак видите, такая, вроде бы, незначительная часть разработки, как выпуск обновлений, может стать источником многих головных болей. Но может и не стать, особенно если учиться на чужих ошибках. Удачи вам и поменьше секса с кодом. |
| Обновлено 28.09.2009 00:12 |
Комментарии
Статья классно написана и понятно!
RSS лента комментариев этой записи.