Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Вниз

обновление exe файла   Найти похожие ветки 

 
vegarulez   (2010-11-30 12:44) [0]

Добрый день мастерам!
Комрады, помогите с решением вот такого вопроса...
есть экзешник - который скачивает обновления для самого же себя, в архиве типа zip - теперь вопрос - при извлечении архива мне нужно перезаписать экзешник новой версией. и запустить его (экзешник, но уже новый) опять. Вопрос как это сделать?
Есть мысль сделать батник - который проверяет есть ли новый архив обновления - если есть он его распоковывет затирая старый экзешник - и далее запускает экзешник. Но вопрос тогда как его запустить вырубив экзешник после обновления.

Вообщем подскажите как лучше сделать? Теряюсь в догадках...


 
vegarulez   (2010-11-30 12:46) [1]

Может это можно как то без батника организовать из под дельфина сразу?
Кто сталкивался с таким - плиз нид хелп.


 
Ega23 ©   (2010-11-30 12:57) [2]

В лоб: основная программа ставит мьютекс, запускает программу-обновлялку, после чего завершает работу. При завершении - освобождает мьютекс.
Программа-обновлялка при старте встаёт в бесконечный цикл и ждёт освобождения мьютекса. мьютекс освободился - захватывает мьютекс, запускает распаковку exe, запускает exe, освобождает мьютекс и завершает работу.
Exe при старте становится в бесконечный цикл и ждёт освобождения мьютекса. Мьютекс освободился - захватывает его и начинает работу.

Например так.


 
И. Павел ©   (2010-11-30 12:59) [3]

У меня идет так:
Программа запускает приложение обновление, а сама закрывается.
Обновляющее приложение выполняет обновление, а потом запускает новую программу.
Все равно, ИМХО, пока программа выполняется, ее не перезаписать (разве что через ReadFile/WriteFile к физическому диску :).


 
vegarulez   (2010-11-30 13:00) [4]

в дельфине использую Kazip2.0, у него много методов может можно каким-то образом через него кеак бы сделать отложенную распаковку или ещё как... [наверно это бред идиота]


 
И. Павел ©   (2010-11-30 13:00) [5]

Что касается вопроса: закрылась ли первая программа: просто ищу ее в списке процессов.


 
vegarulez   (2010-11-30 13:01) [6]

И. Павел ©   (30.11.10 12:59) [3]

ну а если тебе требуется обновить саму обновлялку?


 
Ega23 ©   (2010-11-30 13:08) [7]


> ну а если тебе требуется обновить саму обновлялку?

А смысл? Если тебе какие-то дополнительные телодвижения надо сделать, то пихай это дело в setup и всё.


 
Anatoly Podgoretsky ©   (2010-11-30 13:12) [8]

> vegarulez  (30.11.2010 12:44:00)  [0]

CreateProcess


 
Anatoly Podgoretsky ©   (2010-11-30 13:13) [9]

> vegarulez  (30.11.2010 13:01:06)  [6]

Скачиваешь и заменяешь.


 
vegarulez   (2010-11-30 20:23) [10]

Anatoly Podgoretsky ©   (30.11.10 13:13) [9]

всё должно быть в автоматическом режиме - скачивается у меня автоматически - отлично - теперь вопрос встал в замене.

Anatoly Podgoretsky ©   (30.11.10 13:12) [8]

ок - посомтрю.


 
Dennis I. Komarov ©   (2010-12-02 13:02) [11]

ИМХО, так и только:
1. Отдельная служба - обновлялка.
2. Cpl для ее настройки и управления. (ну или отдельное приложение для неискушенных)
3. Само приложение знать ничего не знает про обновление и может (а вообще-то должно) запускаться с правами пользователя права которого могут быть (а вообще-то должны быть) только чтение.


 
KSergey ©   (2010-12-02 14:23) [12]

Вообще обычно обновлялки делают через внешний процесс, ожидающий завершение обновляемой программы и после заменяющий exe
Но вот сейчас попробовал - файл запущенной программы вполне себе переименовывается. Т.е. можно попробовать переименовать собственный файл, скачать новый и запустить его, после чего завершившись.
быть может даже и сработает :)


 
Dennis I. Komarov ©   (2010-12-02 15:35) [13]


> KSergey ©   (02.12.10 14:23) [12]

Угу, а если ставим ее в ProgramFiles, то работаем исключительно с админскими правами... Нафига велосипед?


 
KSergey ©   (2010-12-02 15:58) [14]

> Dennis I. Komarov ©   (02.12.10 15:35) [13]

По поводу обновлялки в виде сервиса - я совершенно не против, разумеется.
Но опять же возникнет проблема как обновить работающую программу. Ну либо надо явно попросить пользователя ее закрыть или закрыть принудительно или еще как.
К стати, а как такой сервис должен быть устроен? т.е. он просто будет обновлять, например, по расписанию?
Я вот о какой проблеме
Пусть есть сервис. Жмем в программе кнопку "обновиться". Сервис выкачивает новую версию, зоменяет запускаемый файл программы (например, при помощи переименования). Но теперь программу надо перезапустить для того, чтобы новая версия заработала. Как это сделать? сервис перезапускать не может, у него права неправильные.


 
Dennis I. Komarov ©   (2010-12-02 16:11) [15]


> KSergey ©   (02.12.10 15:58) [14]

Сервис управляется cpl- кой (или), т.е. там указываем настройки как часто и т.п. В программе кнопка вообще не впилась никак. Ну не надо оно там. Получив обновление вежливо отсылаем мессадж проге, дескать, так вот. Та вежливо спрашивает юзверя: "бум прям ща, или ну его"? Ну и далее...


 
Ega23 ©   (2010-12-02 16:15) [16]


> Ну либо надо явно попросить пользователя ее закрыть или
> закрыть принудительно или еще как.


Всё уже придумано до нас.
Скачал обновление - выдал хинт, дескать, "скачано обновление, вступит в силу после перезапуска приложения. Перезапустить сейчас (Да/Нет)?"
В общем, так как это Windows или FF делает.

А вот за принудительное закрытие может и до суда дойти.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
15-1289770190
Юрий
2010-11-15 00:29
2011.02.27
С днем рождения ! 15 ноября 2010 понедельник


2-1291306769
Чайник
2010-12-02 19:19
2011.02.27
Вставка в TStringGrid через буфер обмена


2-1291576237
Виктор
2010-12-05 22:10
2011.02.27
о "тонких клиентах"


2-1291707614
novichek
2010-12-07 10:40
2011.02.27
определить ОС


4-1245770042
lexik
2009-06-23 19:14
2011.02.27
Иконка в Tray без окна. (Без VCL)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский