Конференция "WinAPI" » Как исполняемому файлу перезаписать самого себя ? [D7, Win2k, WinXP]
 
  • Сергей М. © (18.12.07 12:18) [20]

    > как отследить что завершился процесс


    WaitForSingleObject


    > как обеспечит надежное обновление файла, ..если комп
    > резетом перегрузят


    Никак.
  • clickmaker © (18.12.07 12:23) [21]

    > И как обеспечит надежное обновление файла, даже если комп
    > резетом перегрузят?

    то есть? в момент обновления?
    а откуда новая версия скачивается?
  • incm (18.12.07 12:54) [22]

    > Сергей М.



    > WaitForSingleObject


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


    > clickmaker


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

    В момент, когда основная прога будет еще не закрыта, а обновлялка будет ждать закрытия. Хотя тут еще что-то придумать можно.
    Обновляться будет из локалки.
  • Сергей М. © (18.12.07 13:07) [23]

    > Кто тогда первый закроется


    В дан.случае точно не твое, поскольку оно блокировано ожиданием сигнала объекта синхр.ции и не может вернуть ответ на сообщение WM_QUERYENDSESSION раньше чем объект просигналит.
  • ыы (18.12.07 13:32) [24]
    if FileExists('project1.old') then DeleteFile('project1.old');
    RenameFile('project1.exe', 'project1.old');
    CopyFile('c:\updates\project1.exe', 'project1.exe');
    WinExec('project1.exe');
    Halt;
  • clickmaker © (18.12.07 13:47) [25]

    > [22] incm   (18.12.07 12:54)

    я бы все-таки написал стартер.
    который сначала сравнивает даты бинарника в сети и локального, потом, если надо копирует и запускает.
    Для пользователя это будет выглядеть как
    YourApp.exe и ярлык к нему - на самом деле стартер
    YourApp.bin - сам исполняемый модуль, переименованный экзе
  • incm (18.12.07 17:43) [26]

    > Сергей М.



    > В дан.случае точно не твое, поскольку оно блокировано ожиданием
    > сигнала объекта синхр.ции и не может вернуть ответ на сообщение
    > WM_QUERYENDSESSION раньше чем объект просигналит.


    Получается что, пока не прийдет ответ от каждого приложения на WM_QUERYENDSESSION винда не закроется ? И не может ли она насильно закрыть по истечении интервала времени так и не получив от всех ответ на WM_QUERYENDSESSION?


    > clickmaker

    Даты сравниваться будут по любому.
    А как запустить файл *.bin? Или только переименовывать ?
  • MetalFan © (18.12.07 18:21) [27]
    а если "обновлятель" в ресурсы зашить и при необходимости из ресурсов доставать?
    будет тогда тебе один файл-матрешка
  • MetalFan © (18.12.07 18:21) [28]

    > Strate   (18.12.07 08:20) [12]

    сорь, не заметил поста
  • clickmaker © (18.12.07 18:38) [29]

    > А как запустить файл *.bin? Или только переименовывать ?

    CreateProcess
 
Конференция "WinAPI" » Как исполняемому файлу перезаписать самого себя ? [D7, Win2k, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0]