Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-73700
Чужой, но не свой
2002-09-08 23:42
2002.09.23
Прогресс.


3-73557
Zelius
2002-09-03 13:52
2002.09.23
Не понял про хранимые процедуры!


14-73818
TCrash
2002-08-23 18:13
2002.09.23
Интересно


1-73664
Mazenrat
2002-09-01 11:16
2002.09.23
----======= TImage без рывков =======----


1-73681
Сатир
2002-09-10 18:46
2002.09.23
создание алиаса в винде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский