![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить файл? [Win95/98, NT4, Win2k]
!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 (через реестр).