Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление развернутого проекта. Нужно обновлять проект у заказчика. 
V
    Опции темы
Нов
Дата 4.3.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.7.2008
Где: Украина г. Харько в

Репутация: нет
Всего: нет



Доброе время суток.
  Есть большой WinForm проект, включаяющий в себя 10 solutions (45 мб). Написан на .Net 2.0. Устанавливается он с помощью Setup Project VS2005.
Необходимо ставить клиентам расширение функционала + bagfix
Есть два подхода: 1. Реализованное ручками средство, меняющее изменненные dll (так как проект не подписан (Signed)) боюсь получить "ад dll").
                               2. Переустановка всего проекта (удаление старого и установка нового. Но я так подозреваю, что стандартный установщик студии это сделать не сможет).                             
   Вопросы:
1. Существует ли стандартное средство обновления? (Т.е. аналог Setup Project).
2.  Какой из двух подходов рациональнее (может кто то сталкивался)

Это сообщение отредактировал(а) Нов - 28.8.2009, 19:36
PM MAIL ICQ   Вверх
nagg
Дата 4.3.2009, 21:44 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 6.1.2008
Где: Minsk

Репутация: нет
Всего: 4



Почему не сможет обновить - повышайте версию в свойствах setup проекта (вам предложат изменить Product code - соглашайтесь) 
и запускайте у заказчика...
А ещё можно посмотреть в сторону ClickOnce
--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
Нов
Дата 5.3.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.7.2008
Где: Украина г. Харько в

Репутация: нет
Всего: нет



Спасибо. Это скорее всего решение. 
Почему то вылетает форма Repeir or Uninstall. Интересно почему он не пишет Update? Ведь версии разные.  
Нужно будет либо при запуске программы запускать скрипт на модернизацию БД либо на отдельном событии это делать. 
Сейчас буду с этим всем разбираться.
PM MAIL ICQ   Вверх
Нов
Дата 6.3.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.7.2008
Где: Украина г. Харько в

Репутация: нет
Всего: нет



Итак что получилось:
1. Замена проекта при новой версии. Есть в свойствах Setup Project св-ва DetectNewerInstalledVersion и RemovePreviousVersions. Выставляешь их - и все ок.
2. Добавил новый проект Setup Project для модернизации. Убрал ненужные формы (ввод данных про БД и т.п.) сейчас буду пробавать идти дальше.
Что не получилось:
1. Добавить скрипт расширяющий БД. Но в принципе понимаю в какую сторону необходимо двигаться - добавить класс унаследовать его и т.п.

Вопрос:
 1.  Можно каким то образом влиять на логику появления инсталяционных форм?
 
 

Это сообщение отредактировал(а) Нов - 6.3.2009, 12:20
PM MAIL ICQ   Вверх
nagg
Дата 7.3.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 6.1.2008
Где: Minsk

Репутация: нет
Всего: 4



Насколько мне известно - никак. Нетакая уж мощная штука, этот сетап. Разве что свои кастом-экшнс можно добавлять.
--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
mihryak
Дата 7.3.2009, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(Нов @  6.3.2009,  12:12 Найти цитируемый пост)
Вопрос:
 1.  Можно каким то образом влиять на логику появления инсталяционных форм?

да
Цитата(nagg @  7.3.2009,  01:07 Найти цитируемый пост)
Насколько мне известно - никак. Нетакая уж мощная штука, этот сетап. Разве что свои кастом-экшнс можно добавлять. 

инсталляторы можно делать насколько угодно гибкими, но это, увы, совсем не простая процедура
конкретных действий не скажу, т.к. до смерти боюсь брать на себя таски по созданию инсталляционных пакетов - дело неблагодарное, очень много возни, никогда не заканчивается и т.д.

PM MAIL ICQ   Вверх
Нов
Дата 16.3.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.7.2008
Где: Украина г. Харько в

Репутация: нет
Всего: нет



Возникла следующая проблема:
При той же задаче (сохранить два 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)
Код

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
        MyBase.Install(stateSaver)
        Debugger.Break()
        Dim assemblyPath As String = Me.Context.Parameters("assemblypath")
        assemblyPath = assemblyPath.Replace("... .exe", "")
'Собственно нужные файлы...
        Dim confPath As String = assemblyPath & "conf/framework.properties"
        Dim confPath2 As String = assemblyPath & "conf/framework.xml"

        Dim streamReader As New StreamReader(confPath)
        Dim text As String = streamReader.ReadToEnd
        streamReader.Close()

        Dim streamReader2 As New StreamReader(confPath2)
        Dim text2 As String = streamReader2.ReadToEnd
        streamReader2.Close()

      'Замена в них строк соединения и т.п.
        ....

        'Моя попытка в случае их отстуствия создать их и заполнить исходными значениями
        Dim f1 As New FileInfo(confPath)
        If f1.Exists Then
            Dim streamWriter As New StreamWriter(confPath)
            streamWriter.Write(text)
            streamWriter.Close()
        Else
            Dim streamWriter As StreamWriter = File.CreateText(confPath)
            streamWriter.Write(text)
            streamWriter.Close()
        End If

        Dim f2 As New FileInfo(confPath2)
        If f2.Exists Then
            Dim streamWriter2 As New StreamWriter(confPath2)
            streamWriter2.Write(text2)
            streamWriter2.Close()
        Else
            Dim streamWriter As StreamWriter = File.CreateText(confPath)
            streamWriter.Write(text)
            streamWriter.Close()
        End If
    End Sub

Вопросы:
1. Как можно дебажить этот код? Вставлял в код Debugger.Break() - не работает. Аттачился к процессу - и ставил точку останова (No symbol have been loaded on this document...)
2. Как я понимаю, сейчас к моменту наступления Install все файлы предыдущего проекта уже не существуют. Значит необходимо событие, во время которого они еще существуют. И тогда считанные строки можно записать в коллекцию stateSaver и т.д. Итак главный вопрос - что же это за событие? (сейчас я как раз буду искать...)
попробовал OnBeforeInstall - не подходит - файлов  уже нет.


Это сообщение отредактировал(а) Нов - 16.3.2009, 13:06
PM MAIL ICQ   Вверх
Partizan
Дата 16.3.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Цитата

Как можно дебажить этот код?


Ведение логов?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
arilou
Дата 18.3.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Нов, инсталлер дебажится только через логи :( еще есть логи MSI. неблагодарное это дело. на старом проекте с определенного момента просто написал полностью кастомный инсталлер. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Нов
Дата 18.3.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.7.2008
Где: Украина г. Харько в

Репутация: нет
Всего: нет



Спасибо. Решил с логами не разбираться. Понаставил MessageBox. 
В целом - решил проблему следующим образом -при первом запуске считываю конфиг файлы, изменяю в них кон.стринги и записываю их в папку AllUser... при следующем запуске проверяю на существование и если нет - считываю те файлы и перезаписываю в новые. 
Кому интересно - вот код 
Код

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)       
 MyBase.Install(stateSaver)
      
        Dim text As String = String.Empty
       

        Dim assemblyPath As String = Me.Context.Parameters("assemblypath")
        assemblyPath = assemblyPath.Replace("..., "")
        Dim confPath As String = assemblyPath & "... .properties"
        Dim confPath2 As String = assemblyPath & "... .xml"

        Dim projectInfo As String = Application.CommonAppDataPath
        projectInfo = projectInfo.Substring(0, projectInfo.LastIndexOf("\") + 1)

        Dim confCommPath As String = projectInfo & "... .properties"
        Dim confCommPath2 As String = projectInfo &  "... .xml"

        Dim f1 As New FileInfo(confPath)
        If f1.Exists Then
            Dim streamReader As New StreamReader(confPath)
            text = streamReader.ReadToEnd
            streamReader.Close()
        End If
        'MessageBox.Show(text + "1")

        Dim f2 As New FileInfo(confPath2)
        If f2.Exists Then
            Dim streamReader2 As New StreamReader(confPath2)
            text2 = streamReader2.ReadToEnd
            streamReader2.Close()
        End If
        'MessageBox.Show(text2 + "1")

        'Замена значений кон. стринга и т.п.
       .....


        If f1.Exists Then
            Dim streamWriter As New StreamWriter(confPath)
            streamWriter.Write(text)
            streamWriter.Close()

            'Create common files for save it to update
            Dim streamWriterCommon1 As StreamWriter = File.CreateText(confCommPath)
            streamWriterCommon1.Write(text)
            streamWriterCommon1.Close()
        Else
            Dim streamReaderCommon As New StreamReader(confCommPath)
            text = streamReaderCommon.ReadToEnd
            streamReaderCommon.Close()

            Dim streamWriter As StreamWriter = File.CreateText(confPath)
            streamWriter.Write(text)
            streamWriter.Close()
        End If

        If f2.Exists Then
            Dim streamWriter2 As New StreamWriter(confPath2)
            streamWriter2.Write(text2)
            streamWriter2.Close()

            Dim streamWriterCommon2 As StreamWriter = File.CreateText(confCommPath2)
            streamWriterCommon2.Write(text2)
            streamWriterCommon2.Close()
        Else
            Dim streamReaderCommon2 As New StreamReader(confCommPath2)
            text2 = streamReaderCommon2.ReadToEnd
            streamReaderCommon2.Close()

            Dim streamWriter As StreamWriter = File.CreateText(confPath2)
            streamWriter.Write(text2)
            streamWriter.Close()
        End If
    End Sub

PM MAIL ICQ   Вверх
Google
  Дата 19.1.2019, 09:30 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0883 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.