Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Автообновление

713
19 апреля 2006 года
Ap0k
360 / / 13.03.2006
Есть программа, состоит из exe файла и четырёх библиотек.
Exe-файл по сути ничего не делает, т.к. даже все форма вынесены в отдельную сборку.
Необходимо сделать автоматическое обновление.
Идти по классическому пути с отдельным екзешником не хочется. Нужно придумать что-то более элегантное.
Вот собственно вопрос. Можно ли удалить сборки, "прикрученные" к основному модулю, в первых строчках метода Main из другой сборки? Или все сборки к этому моменту уже загружены и полного доступа к файлу получить никак не удастся?
Думаю вопрос довольно актуалный... и правильным решением в данном случае захотелось бы воспользоваться не только мне одному :)
273
19 апреля 2006 года
3A3-968M
1.2K / / 22.12.2005
Ты можешь заменить сборки, только нужно соблюдать правило контроля версий. Версия состоит из Major.Minor.Revision.Build. Менять можно только Build-составляющую версию сборки, тогда она проглотится приложением. Главное приложение в своём манифесте содержит ссылки на используемые сборки. Например:
.assembly extern mscorlib
{
.ver 2:0:0:0
}
Вот директива .ver ведёт контроль версии используемой библиотеки. Можно убрать вообще эту директиву, тогда приложение будет глотать сборку любой версии.
А вот чё хочешь сделать с Main, непонятно?? Раскрой вопрос! И напомню, что метод, выполняемый при запуске приложения, может называться как угодно, т.к. стартовый метод помечается директивой .entrypoint, а не по имени определяется
713
20 апреля 2006 года
Ap0k
360 / / 13.03.2006
В общем хочу проделать такое:
1) Запуск программы
2) Проверка версии (в БД)
3) Если версия устарела (у сборок версия может оставаться той же, но вот в программе могут быть внесены изменения),
тогда удаляю те четыре сборки о которых рече шла выше, загружаю обновлённые сборки с FTP-сервера и копирую их на место старых.
4) Запуск ссамой программы (тут вот начинают использоваться классы из сборок)
Беда в том, что, насколько я понял, сборки не дойдя до 4-ого этапа уже загружены и на третьем этапе я обламываюсь на удалении старых версий. Можно как-то победить?
273
20 апреля 2006 года
3A3-968M
1.2K / / 22.12.2005
Сборки загружаются статически, т.е. сразу при запуске программы и удалить их не получится. Можно сделать так:
1) Использовать создание объектов из динамически загруженной сборки, например:
ObjectHandle hObj=AppDomain.CreateInstanceFrom("MyAssembly.dll", "MyClass");
MyClass cls=hObj.Unwrap();
Этот способ будет работать, если классы реализуют какие-либо интерфейсы - и их реализация должна быть правилом для всех типов, иначе придётся вовсе вызывать все методы через Reflection.
2) Использовать обёрточное приложение. Создаёшь приложение, которое просматривает обновления, и если они есть, подменяет сборки и запускает уже нужное приложение. Это самый реальный способ, я уже когда-то так делал:
void Main()
{
//проверяем обновления и если нужно подменяем
//сборки
AppDomain yourApp=AppDomain.ExecuteAssembly("yourApp.exe"); //запускаем уже обновлённое приложение
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог