Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Обновление развернутого проекта. |
Автор: Нов 4.3.2009, 18:12 |
Доброе время суток. Есть большой WinForm проект, включаяющий в себя 10 solutions (45 мб). Написан на .Net 2.0. Устанавливается он с помощью Setup Project VS2005. Необходимо ставить клиентам расширение функционала + bagfix Есть два подхода: 1. Реализованное ручками средство, меняющее изменненные dll (так как проект не подписан (Signed)) боюсь получить "ад dll"). 2. Переустановка всего проекта (удаление старого и установка нового. Но я так подозреваю, что стандартный установщик студии это сделать не сможет). Вопросы: 1. Существует ли стандартное средство обновления? (Т.е. аналог Setup Project). 2. Какой из двух подходов рациональнее (может кто то сталкивался) |
Автор: nagg 4.3.2009, 21:44 |
Почему не сможет обновить - повышайте версию в свойствах setup проекта (вам предложат изменить Product code - соглашайтесь) и запускайте у заказчика... А ещё можно посмотреть в сторону ClickOnce |
Автор: Нов 5.3.2009, 11:31 |
Спасибо. Это скорее всего решение. Почему то вылетает форма Repeir or Uninstall. Интересно почему он не пишет Update? Ведь версии разные. Нужно будет либо при запуске программы запускать скрипт на модернизацию БД либо на отдельном событии это делать. Сейчас буду с этим всем разбираться. |
Автор: Нов 6.3.2009, 11:12 |
Итак что получилось: 1. Замена проекта при новой версии. Есть в свойствах Setup Project св-ва DetectNewerInstalledVersion и RemovePreviousVersions. Выставляешь их - и все ок. 2. Добавил новый проект Setup Project для модернизации. Убрал ненужные формы (ввод данных про БД и т.п.) сейчас буду пробавать идти дальше. Что не получилось: 1. Добавить скрипт расширяющий БД. Но в принципе понимаю в какую сторону необходимо двигаться - добавить класс унаследовать его и т.п. Вопрос: 1. Можно каким то образом влиять на логику появления инсталяционных форм? |
Автор: nagg 7.3.2009, 00:07 |
Насколько мне известно - никак. Нетакая уж мощная штука, этот сетап. Разве что свои кастом-экшнс можно добавлять. |
Автор: Нов 16.3.2009, 12:35 | ||
Возникла следующая проблема: При той же задаче (сохранить два XML файла конфига при update через инсталлер студии) пока есть два решения: Первое: 1. Удалить эти файлы из File System on Target Machine. 2. RemovePreviousVersions = false Файлы сохраняются. Все что есть в инстеллере - просто переписывает то что уэе установлено. Удовлетворяет условию - т.е. и файлы конфига целы и update стоит. Но есть большой минус - в списке установленных программ становиться две программы. Т.е. база и апдейт. Второе: 1. Свойство RemovePreviousVersions = true 2. Унаследую System.Configuration.Install.Installer своим классом. Добавляю в Custom Actions->install свое действие (Primary output from имя проекта (Active)) 3. Пытаюсь прочитать эти файлы (т.к. при первичной инсталяции в них вписывается значения) в строку и после этого в случае если они не существуют создать их и записать строку. В принципе можно их и скопировать во временный каталог а потом переопределить - не принципиально. Но при установке выкидывается Exception File Not Found и выполняется откат. Вот код (прошу прощения за VB)
Вопросы: 1. Как можно дебажить этот код? Вставлял в код Debugger.Break() - не работает. Аттачился к процессу - и ставил точку останова (No symbol have been loaded on this document...) 2. Как я понимаю, сейчас к моменту наступления Install все файлы предыдущего проекта уже не существуют. Значит необходимо событие, во время которого они еще существуют. И тогда считанные строки можно записать в коллекцию stateSaver и т.д. Итак главный вопрос - что же это за событие? (сейчас я как раз буду искать...) попробовал OnBeforeInstall - не подходит - файлов уже нет. |
Автор: Partizan 16.3.2009, 13:46 | ||
Ведение логов? |
Автор: arilou 18.3.2009, 00:49 |
Нов, инсталлер дебажится только через логи :( еще есть логи MSI. неблагодарное это дело. на старом проекте с определенного момента просто написал полностью кастомный инсталлер. |
Автор: Нов 18.3.2009, 13:05 | ||
Спасибо. Решил с логами не разбираться. Понаставил MessageBox. В целом - решил проблему следующим образом -при первом запуске считываю конфиг файлы, изменяю в них кон.стринги и записываю их в папку AllUser... при следующем запуске проверяю на существование и если нет - считываю те файлы и перезаписываю в новые. Кому интересно - вот код
|