#2 08.06.06 08:51
Re: Как отловить нестандартное завершение программы в C++Builder
Завершение процесса можно отловить только наличием другого процесса, который следит за твоим. На то оно и завершение, что программа его не ожидает. Можно попробовать зарегистрировать программу как системный модуль (хз как), и тогда система не позволит завершить его... Проще будет сделать программу из двух модулей, запускающихся разными процессами и дублирующими или хотябы отслеживающими друг друга... Сохранность данных - догадайся какая... так что, действовать только транзакциями и в памяти ничего несохраненного не хранить...
Offline
#6 08.06.06 20:48
Re: Как отловить нестандартное завершение программы в C++Builder
получилось примерно так: (моё приложение следит за работой стандартного виндовского калькулятора). Может и не совсем правильно... но других идей мне пока не пришло. Если кому надо - пользуйтесь:
Код::
DWORD Code;
_STARTUPINFOA StartInfo = {sizeof(TStartupInfo)};
_PROCESS_INFORMATION ProcInfo;
StartInfo.cb=sizeof(StartInfo);
CreateProcess(NULL,"Calc",NULL,NULL,false,HIGH_PRIORITY_CLASS,NULL,NULL,&StartInfo,&ProcInfo);
do
{
GetExitCodeProcess(ProcInfo.hProcess,&Code);
}
while(Code==STILL_ACTIVE);
if(Code!=0)
{
ofstream outfile ("Result.dat");
outfile << " Аварийное завершение процесса = "<<FormatDateTime("dd.mm.yy hh:nn",Now()).c_str()<<endl;
outfile.close();
}Offline

