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 нахрен.
|
|