![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите, если кто может, направление поиска! [D4, WinXP]
Германн © (2004-02-13 02:40:00)Каким образом приложение может быть снято/удалено/прекращено "молча", т.е. без всяких сообщений об какой-либо ошибке и без следов в логе WinXP?
Меня, лично, интересует именно концептуальный ответ.
Гарантирую, что на сем компьютере нет приложений, которые могут вызвать TerminateProcess.
Однако, сам лично видел, как моя программа "Сгинула без следа".
Германн (2004-02-15 01:06:00) [1]Да, увы направлений поиска немного, утешает пока что то, что вот уже почти две недели не было вылетов у данной версии. А ведь она уже почти год работает на одном объекте и почти 2 месяца на другом. Единственное отличие этого объекта в том, что с программой постоянно общается по сети некое "удаленное рабочее место". Оно перерабатывалось за это время и может "исправилось", но я по-прежнему не понимаюкак и что могло так "грохнуть" мою программу?
Прям "изображаю" В.Соломина в роли др.Ватсона срашивающего "Холмс, но как?"
Defunct (2004-02-14 04:30:00) [2]Каким-то макаром где-то подменяется адрес возврата в стеке, так что программа попадает на код процедуры Halt().
Можно пощупать в направлении передаваемых параметров процедур/функций, особенно если есть экспортируемые/импортируемые функции. Может глюк с процедурами "Overload".
Soft (2004-02-13 22:48:00) [3]Halt(Код завершения);
дохнет сразу.
Германн (2004-02-13 22:17:00) [4]Увы, меня то интересует возможные пути безмолвного самопроизвольноговылета программы, а не способы ее убиения извне.
DDA (2004-02-13 20:41:00) [5]Ну можно просто завершить вот так по ехе-нику
Закроет приложение без всяких там вопросов:
function KillTask(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;
Германн (2004-02-13 19:55:00) [6]Других вариантов никто не знает?
Defunct (2004-02-13 03:24:00) [7]это есть Halt(0)
может вызваться случайно, врезультате какого-то сбоя в работе со стеком.