![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли перезаписать "работающий" файл? [D7, Win2k, WinXP]
Dimich1978 © (2006-05-10 13:28:00)Суть в следующем , есть программа(моя) которая работает, увидев по определнному сетевому пути что там появился файл, должна его скопировать, но есть одно но, этот файл исполняемый и называеться так же как и исходный, т.е. при перезаписи возникает ошибка что файл занят другой программой это и понятно. Как это можнро обойти, т.е. чтобы файл перезаписывал исходный...таким образом я хочу сделать обновление версии программы.
Помогите плиз.
Dstr (2006-05-10 19:25:00) [1]Вот 2,но я его уже писал на форуме,ето статья
В Windows NT 4/2000 есть такая API функция, имеющая очень интересный последний аргумент. Функция позволяет также переименовывать указанный файл или директорию.
MoveFileEx(ExistingFN, NewFN, MOVEFILE_REPLACE_EXISTING или
MOVEFILE_DELAY_UNTIL_REBOOT
Если задать MOVEFILE_DELAY_UNTIL_REBOOT в dwFlags (характерно для Windows NT 4/2000), то в реестр будет занесена специальная информация и после перезагрузки Windows сотрёт или перепишет указанный файл
Параметры:
ExistingFN указатель на строку (null-terminated) , которая содержит имя нужного нам файла или директории.
NewFN указатель на строку (null-terminated), содкржащую новое имя файла, указанного ExistingFN.
Флаг MOVEFILE_REPLACE_EXISTING указывает функции заменить, если файл ExistingFN уже существует. Если указать в NewFN - nil, ExistingFN будет стёрт.
Пример:
Перемещение файла:
MoveFileEx('c:\winnt\system32\kernel32.dll', 'd:\winnt.bak\system32\kernel32.dll',
MOVEFILE_REPLACE_EXISTING или MOVEFILE_DELAY_UNTIL_REBOOT
Удаление существующего файла:
MoveFileEx('c:\winnt\system32\kernel32.dll', nil,
MOVEFILE_REPLACE_EXISTING или MOVEFILE_DELAY_UNTIL_REBOOT
Или делай так чтоб все сидело в DLL (Exe шник токо загружает при запуске DLL в память)
Dstr (2006-05-10 19:20:00) [2]Есть 2 способа(за рабочесть - не отвичаю):
1.Exe'шник загружает обновления в Temp винды,создает батник(который копирует файлы и самоуничтожается),запускает батник,выгружается из памяти...2 через 10 мин
Сергей М. (2006-05-10 13:31:00) [3]
> Как это можнро обойти
Док.способами - никак.