Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.23;
Скачать: CL | DM;

Вниз

Удалить файл?   Найти похожие ветки 

 
!Reset   (2002-06-04 19:34) [0]

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


 
Song ©   (2002-06-04 19:40) [1]

никак. Сначала закрыть процесс, что использует этот файл.


 
Новеньки в Делфи   (2002-06-04 22:27) [2]

а можно запущеному приложению удалить себя?
типа деинстал?


 
MaximatorVeter ©   (2002-06-04 23:13) [3]

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


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

>Новеньки в Делфи (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;


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

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

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


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

>Новеньки в Делфи (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;


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

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


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

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


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

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


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

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


 
Anatoly Podgoretsky ©   (2002-06-05 10:57) [11]

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


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

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

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

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


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

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


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

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


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

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



 
Pat ©   (2002-06-05 13:06) [16]

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


 
Anatoly Podgoretsky ©   (2002-06-05 13:28) [17]

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


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

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


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

2Pat

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


 
paul_shmakov ©   (2002-06-06 11:21) [20]

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


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

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


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

Через реестр можно через этот ключ
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;




Страницы: 1 вся ветка

Текущий архив: 2002.09.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
6-73805
Ильдар
2002-07-18 13:21
2002.09.23
Как получить IP-адрес


1-73741
Mars
2002-09-11 15:46
2002.09.23
Как добавить компоненту новое событие?


3-73485
Викт0р
2002-08-30 16:57
2002.09.23
.txt -> .dbf


14-73871
Shrek
2002-08-28 17:41
2002.09.23
SoftIce


4-73953
LVG
2002-08-03 09:56
2002.09.23
Проблема с FindFirstFile