Форум: "Система";
Текущий архив: 2002.09.23;
Скачать: [xml.tar.bz2];
ВнизУдалить файл? Найти похожие ветки
← →
!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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c