C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Переименование запущенного файла, на Win98
Gedeon
Отправлено: 09.09.2004, 12:43


Ветеран

Группа: Модератор
Сообщений: 1742



Уважаемые господа, тут с такой халэпой столкнулся, у кого есть вин98 попробуйте пожалуйста переименовать запущенный файл, есть тут одна тачка, так на ней не хочет, из-за этого давно написанный и прекрасно работающий класс автообновления перестал работать, че делать?
AVC
Отправлено: 10.09.2004, 10:35


Ветеран

Группа: Модератор
Сообщений: 1583



98 (кажется и ниже) не позволяет переименовать/удалить работающий exe/dll.
Атообновления выполняю другим exe'шником.
Хлор
Отправлено: 13.09.2004, 04:14


Дежурный стрелочник

Группа: Участник
Сообщений: 78



Когда-то давно использовал такой код для удаления файла.
(был найден на исходники.ру)
CODE


Procedure DelSelf;
var
 module: HModule;
 buf: array[0..MAX_PATH — 1] of char;
 p: ULong;
 hKrnl32: HModule;
 pExitProcess,
 pDeleteFile,
 pFreeLibrary: pointer;
begin
    module := GetModuleHandle(nil);
    GetModuleFileName(module, buf, SizeOf(buf));
    CloseHandle(THandle(4));
    p := ULONG(module) + 1;
    hKrnl32 := GetModuleHandle('kernel32');
    pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
    pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
    pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
 asm
   lea eax, buf
   push 0
   push 0
   push eax
   push pExitProcess
   push p
   push pDeleteFile
   push pFreeLibrary
   ret
 end;
end;


еще одно решение
http://forum.vingrad.ru/index.php?act=ST&f...568c7ae70a417a9
Gedeon
Отправлено: 13.09.2004, 08:07


Ветеран

Группа: Модератор
Сообщений: 1742



Да нет, спасибо, как сделать автообновление разберусь, просто было интересно, мож в той системе че не так, да и обидно, давно работающие алгоритмы нарушены, искоренять 98 нахрен. biggrin.gif

Вернуться в Вопросы программирования в C++Builder