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