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

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

Как завершить Explorer.exe? [D7, WinXP]


Страницы:   1 2 3

Seldon ©   (2004-05-30 15:15:00) 

Через TerminateProcess - он закрывается и тут же открывается снова.


DVM   (2004-05-31 00:15:00) [21]


> Piter ©   (31.05.04 00:07) [25]


> uExitCode определяет код завершения процесса. Если ноль
> - то, по моему, это значит нормальное завершение (хотя какое
> нафиг нормальное, если был вызван TerminateProcess). Если
> не ноль - то аварийное.

Конкретно про 1 нигде не написано. По крайней мере я не нашел. Просто как-то попробовал - эксплорер умер. До этого перезапускался.

> еще раз повторю, что explorer неотделим от windows. Не
> надо его завершать.

Почему не надо то? Отделим еще как.


Gero   (2004-05-31 00:13:00) [22]


> Piter ©   (31.05.04 00:10)

Ну допусим я без explorer'а работаю и совсем забыл про него.
Какая же это неотъемлимая часть?


Piter   (2004-05-31 00:10:00) [23]

Gero (30.05.04 23:59) [24]
Ха-ха-ха


есть возражения?


Piter   (2004-05-31 00:08:00) [24]

Игорь Шевченко (30.05.04 23:47) [22]
А что, нужны ?


смотря дл чего. Для некоторых вещей - нужны... см. предыдущий пост


Piter   (2004-05-31 00:07:00) [25]

Seldon (30.05.04 23:21) [21]
Всё дело в той самой единичке. Всем спасибо


1) TerminateProcess сама по себе функция, которую надо вызывать в крайнем случае...
2) еще раз повторю, что explorer неотделим от windows. Не надо его завершать.

uExitCode определяет код завершения процесса. Если ноль - то, по моему, это значит нормальное завершение (хотя какое нафиг нормальное, если был вызван TerminateProcess). Если не ноль - то аварийное. Вот видимо windows восстанавливает explorer, если он нормально завершился (код выхода ноль), и не восстанавливает, если завершился аварийно (единица или там еще чего).

Seldon (30.05.04 23:21) [21]
Piter, а как получить эти самые привилегии?


с помощью функции AdjustTokenPrivileges. Допустим, нужно получать Debug привелегии, чтобы иметь возможность терминировать сервисы. Например, чтобы убить Outpost Firewall, работающий в режиме сервиса :)


Gero   (2004-05-30 23:59:00) [26]


> А все уже сказано - Explorer является неотъемлемой частью
> windows

Ха-ха-ха.


DVM   (2004-05-30 23:59:00) [27]

В дополнение к коду выше. А не нужно ли делать CloseHandle на то, что возвращает OpenProcess?

> PS. Кстати, а на что влияеят этот самый uExitCode?

Тоже интересовался на этот счет, в MSDN очень кратко написано:
uExitCode
[in] Exit code to be used by the process and threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve a process's exit value. Use the GetExitCodeThread function to retrieve a thread's exit value.


Игорь Шевченко   (2004-05-30 23:47:00) [28]

Piter ©   (30.05.04 22:19) [19]


> И вообще, где получение привелегий на случай запуска под
> NT?


А что, нужны ?


Seldon   (2004-05-30 23:21:00) [29]

Нет, Seldon<>DVM.

Вот мой код.


var
 SShot:Cardinal;
 Entry:TProcessEntry32;
 FN:String;
begin
 SShot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Entry.dwSize:=SizeOf(TProcessEntry32);

 Process32First(SShot,Entry);
 repeat
   if Entry.th32ProcessID<>0 then
   begin
     FN:=Entry.szExeFile;
     if CompareText(FN,'explorer.exe')=0 then
     begin
       TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,Entry.th32ProcessID, 0); // а надо 1
       Break
     end;
   end
 until not Process32Next(SShot,Entry);

 CloseHandle(SShot);
end;


Всё дело в той самой единичке. Всем спасибо.

PS. Кстати, а на что влияеят этот самый uExitCode?
PPS. Piter, а как получить эти самые привилегии?


DVM   (2004-05-30 22:22:00) [30]


> Piter ©   (30.05.04 22:13) [16]
> DVM (30.05.04 22:01) [15]
>
> ты где такой код взял, умник? :)

1) Seldon <> DVM?
2) Без оскорблений пожалуйста.
3) Код имеет некоторые огрехи.
4) Он все-таки работает.
5) Код не мой, наковырял у себя среди прочего хлама.


Piter   (2004-05-30 22:19:00) [31]

Вогт это хорошо:

while Integer(ContinueLoop) <>

и это тоже:

Result := Integer(TerminatePro...

И вообще, где получение привелегий на случай запуска под NT?


Piter   (2004-05-30 22:14:00) [32]

Seldon = DVM?


Piter   (2004-05-30 22:14:00) [33]

Или Seldon = DVNM?


Piter   (2004-05-30 22:13:00) [34]

DVM (30.05.04 22:01) [15]

ты где такой код взял, умник? :)


DVM   (2004-05-30 22:01:00) [35]

function KillProcessByFileName(ExeFileName: string): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(
                       OpenProcess(PROCESS_TERMINATE,
                                   BOOL(0),
                                   FProcessEntry32.th32ProcessID),
                                    1));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;


DVM   (2004-05-30 22:00:00) [36]

function KillProcessByFileName(ExeFileName: string): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(
                       OpenProcess(PROCESS_TERMINATE,
                                   BOOL(0),
                                   FProcessEntry32.th32ProcessID),
                                    0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;


Piter   (2004-05-30 21:41:00) [37]

Приведи код программы по использованию TerminateProcess


Piter   (2004-05-30 21:40:00) [38]

Seldon (30.05.04 21:16) [11]
TaskManager его легко снимает


кого? TaskManager использует тот же самый TerminateProcess


Seldon   (2004-05-30 21:16:00) [39]

>Плохиш   (30.05.04 21:10) [9]
Я рад за тебя.

>Piter ©   (30.05.04 21:11) [10]
TaskManager его легко снимает.

>Как кока-кола и бигмак
Не, кока-колу можно снести. Я вместо неё квас ставлю. :)


Piter   (2004-05-30 21:11:00) [40]

А все уже сказано - Explorer является неотъемлемой частью windows. Как кока-кола и бигмак


Страницы:   1 2 3

Наверх

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