Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удалить файл? [Win95/98, NT4, Win2k]


Страницы:   1 2

!Reset ©   (2002-06-04 19:34:00) 

Как удалить файл, открытый в данный момент другим приложением?


programmerts   (2002-07-12 19:58:00) [1]

Через реестр можно через этот ключ
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

типа


uses
Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;

begin
reg := TRegistry.Create;

with reg do begin
RootKey := HKEY_LOCAL_MACHINE;
LazyWrite := false;
OpenKey("Software\Microsoft\Windows\CurrentVersion\RunOnce",
false);
WriteString("Delete Me!","command.com /c del FILENAME.EXT");
CloseKey;
free;
end;
end;


Олег_В   (2002-07-11 01:07:00) [2]

А как же все-таки через реестр?


paul_shmakov   (2002-06-06 11:21:00) [3]

это можно сделать под nt/2k/xp, но достаточно сложно. читай здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1022596685&n=4
под win9x/me тоже можно, но я, честно говоря, не знаю.


!Reset   (2002-06-05 16:41:00) [4]

2Pat

тот файл, который удалял я через проводник, FAR и т. п. удалить в тот момент я не мог, Sly удалила без проблем!


!Reset   (2002-06-05 16:34:00) [5]

Анатолий, мораль я понимаю, но как закрыть открытый файл программно?
Открыт, например, в Excel dbf, чего-то там с ним делают, нужно резко удалить этот файл. Причем делать вне зависимости от версии виндов


Anatoly Podgoretsky   (2002-06-05 13:28:00) [6]

Нельзя удалять открытый файл, отсюда мораль сначала надо его закрыть


Pat   (2002-06-05 13:06:00) [7]

>!Reset (05.06.02 11:56)
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1022842893&n=5


Pat   (2002-06-05 13:00:00) [8]

>!Reset (05.06.02 11:02)
>программа Sly спомощью которой я смог убить файл dbf, который
>был открыт другим приложением, при этом приложение не вылетело!
Открываем текстовый файл в блокноте, затем удаляем файл, а блокнот нормально работает :-))) Вывод: файл использовался только для загрузки данных :-))


!Reset   (2002-06-05 11:56:00) [9]

ну а как убить программу, а потом удалить файлы?


Anatoly Podgoretsky   (2002-06-05 11:13:00) [10]

!Reset (05.06.02 11:02)
Это тебе повезло, что не вылетела и ничего не испортило, а ты уверен, что таблица была открыта в данный момент


!Reset   (2002-06-05 11:02:00) [11]

По адресу http://sanyvaa.chat.ru/лежит программа Sly спомощью которой я смог убить файл dbf, который был открыт другим приложением, при этом приложение не вылетело!

Жалко что не выложены исходники.

Я уверен, что это можно сделать!


Anatoly Podgoretsky   (2002-06-05 10:57:00) [12]

!Reset (04.06.02 19:34)
Нельзя это делать, если ты конечно не враг тому файлу


Pat   (2002-06-05 10:53:00) [13]

>!Reset (05.06.02 10:36)
смотри
Song © (04.06.02 19:40)


!Reset   (2002-06-05 10:36:00) [14]

так через bat-файл нельзя удалить файл, открытый другим процессом!


Новеньки в Делфи   (2002-06-05 01:40:00) [15]

2 Pat, благодарю! Смысл ясен :)


Pat   (2002-06-05 00:05:00) [16]

ЗЫ...в списке процессов остается Winoldap (у меня 98 - в других не знаю...)


Pat   (2002-06-05 00:02:00) [17]

>Новеньки в Делфи (04.06.02 23:34)
ОК..давай попроще через bat-файл...:-))

procedure TForm1.Button1Click(Sender: TObject);
var f:textfile;
MyName:string;
begin
MyName:=extractfilename(paramstr(0));
chartooem(pchar(MyName),pchar(MyName));
assignfile(f,"kill.bat");
rewrite(f);
writeln(f,"del "+MyName);
writeln(f,"del kill.bat");
closefile(f);
application.Terminate;
winexec("kill.bat",sw_hide);
end;


Новеньки в Делфи   (2002-06-04 23:34:00) [18]

..тут уже и асм пошёл... дайте хоть в делфи немного разобраться :)

а как через реестр? (если не очень долго объяснять?)


Pat   (2002-06-04 23:19:00) [19]

>Новеньки в Делфи (04.06.02 22:27)
Код не мой, но вроде работает. Только вот не уверен, что в момент удаления файл используется.
Еще можно через bat-файл...

procedure DeleteSelf;
var hModule:THandle;
szModuleName:array[0..MAX_PATH] of char;
hKrnl32 : THandle;
pExitProcess, pDeleteFile, pFreeLibrary,pUnmapViewOfFile : pointer;
ExitCode:UINT;
begin
hModule:= GetModuleHandle(nil);

GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));


hKrnl32 := GetModuleHandle ( "kernel32" );
pExitProcess := GetProcAddress ( hKrnl32, "ExitProcess" );
pDeleteFile := GetProcAddress ( hKrnl32, "DeleteFileA" );
pFreeLibrary := GetProcAddress ( hKrnl32, "FreeLibrary" );
pUnmapViewOfFile := GetProcAddress ( hKrnl32, "UnmapViewOfFile" );

ExitCode := system.ExitCode;

if($80000000 and GetVersion())<>0 then
// Win95, 98, Me
asm

lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pFreeLibrary
ret
end
else
begin
CloseHandle(THANDLE(4));

asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pUnmapViewOfFile
ret
end
end
end;


MaximatorVeter   (2002-06-04 23:13:00) [20]

Можно после перезагрузки Windows (через реестр).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо