| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > перезапуск программы |
| Автор: admsasha 24.1.2012, 03:37 |
| Есть программа, которая автоматически обновляется и требуется сделать её самоперезапуск. Я попробовал через system(), под linux, вроде как, проблем нет. А вот под windows создается консольное окно, которое не закрывается даже после выхода из программы. Какие еще способы есть, либо какой выход из этого есть ? |
| Автор: borisbn 24.1.2012, 09:06 |
| Под Windows есть как минимум 3 варианта: 1) system( "start prog_name.exe" ); 2) http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx( ... ); 3) http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx( ... ); |
| Автор: admsasha 24.1.2012, 09:12 |
| borisbn, спасибо, попробую. |
| Автор: xvr 24.1.2012, 11:11 |
| Под Windows есть засада - вы не сможете переписать исполняемый файл программы пока она работает. Если у вас система обновления и сама программа одно и то же, то будут проблемы |
| Автор: 500mhz 24.1.2012, 11:27 | ||||
не красивое решение ) из "учебника"
делаем ребут |
| Автор: borisbn 24.1.2012, 11:37 |
500mhz, ребут программы или системы ? Если второе, то скажите, только честно, Вам нравятся программы, которые требуют ребута системы ? |
| Автор: 500mhz 24.1.2012, 11:56 |
| borisbn системы ребут. ну можно и без батника, сохранить ехешник с другим именем,запустить его, закончить свой процесс, запущеный ехе скопирует себя с нужным именем. |
| Автор: xvr 24.1.2012, 13:38 |
Он не сможет себя удалить, в отличие от батника |
| Автор: 500mhz 24.1.2012, 13:48 |
| xvr ну может я сумбурно написал имеем процесс 1.ехе, он скачивает 2.ехе процесс 1.ехе запускает 2.ехе и завершается 2.ехе копирует себя как 1.ехе |
| Автор: Sahab 24.1.2012, 13:56 |
| и после этого процесс 1.exe удаляет файл 2.ехе... имхо с батником попроще вроде выходит.... |
| Автор: 500mhz 24.1.2012, 14:10 |
| Sahab на вкус и цвет все фломастеры разные ))) |
| Автор: Sahab 24.1.2012, 14:37 |
| согласен) |
| Автор: xvr 24.1.2012, 17:22 |
А кто сотрет 2.exe ? |
| Автор: bsa 24.1.2012, 17:36 |
| Вообще-то, система не запрещает переименовывать исполняющиеся файлы. Таким образом алгоритм меняется на: 1.exe загружает 2.exe 1.exe переименовывает 1.exe в 1.old 1.old переименовывает 2.exe в 1.exe 1.old запускает 1.exe (как вариант, со специальным параметром) 1.exe ждет пока 1.old завершит работу 1.old завершает работу 1.exe удаляет 1.old есть второй вариант: 1.exe загружает 2.exe 1.exe запускает 2.exe 1.exe завершает работу 2.exe переименовывает 1.exe в 1.old 2.exe переименовывает 2.exe в 1.exe |