приложение способное обновлять себя же

Тема в разделе "WASM.WIN32", создана пользователем kralex, 16 окт 2006.

  1. kralex

    kralex New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    10
    Как написать exe-приложение, которое способно перезаписать себя же на диске. Другими словами как сделать, чтобы приложение после запуска "забыло" про свой image на диске и было бы возможно например удалить этот image?

    Второй вопрос - какой существует способ у процесса для перерезапуска себя же? Т.е. чтобы процесс мог выполнить какую-то инструкцию (куда то себя зарегистрировать) затем ExitProcess, и чтобы после этого например через 1 секунду этот же процесс гарантированно бы запустился.

    Страдаю над возможностью программки способной updatitj себя же и перезапускать заапдейченную версию. С минимальным импактом.

    Заранее спасибо
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    сделать второй exe / сделать патч чужого процесса (для коммерческого софта не подойдет)
     
  3. kralex

    kralex New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    10
    а если логика во втором exe тоже подвержена изменениям ?
    (что-то похожее получается на извечный филосовский вопрос о курице и яйце)

    если ничего не придумаю подходящего и мне никто не подскажет, то сделаю конечно вариант со вторым exe, который содержит минимум функциональности с предположением что она менятся точно не будет
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Чем батник не подходит?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    я когда то делал так:
    Имел 2 функции апдейта дублирующии друг друга.
    Когда надо было обновить программу, получал с сервера обновлений файл определенного формата. Ну он был разбит на секции, в каждой секции хранилась информация о типе апдейта(интерфейс, апдейт, остальное) и байты для патчинга, номер байта - новое значение. 2 функции апдейта мне нужны были, если например мне нужно обновить саму эту функцию, то запускаю дублирующую, и она обнавляет первичную. Потом наоборот. Когда обновляется интерфейс, то я пересоздаю главное окно.
     
  6. kralex

    kralex New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    10
    Содержание батника тоже может менятся. Идея батника ничем особо не отличается от 2х процессов. Хочется с 1м процессом.

    Ну ок. Перезапустить приложение можно действительно создав временный батник ждущий 1 сек, потом запускающий себя. После запуска батника cpазу ExitProcess, а при запуске процесса удаляем батник если он есть.

    Есть ли ответ на 1й вопрос? Может быть есть простой метод?
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Переименуй свой файл MoveFile. Потом скопируй в исходный CopyFile, ну и удали временный DeleteFile.
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kralex
    Зато батник можно без проблем перезаписывать.
     
  9. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Если Вас не смущает необходимость перезагрузки для применения апдейта - используйте штатный метод: функция MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT.
    Удачи.