Неубиваемая программа
Я решил пойти по самому простому пути и сыграть на том что в стандартном виндосовском "диспетчере задачь" нельзя убить одновременно 2 приложения.Пытаюсь сделать так что бы программа запускала свою копию которая бы следила сколько её копий запущенно и в случае когда она одна остается запустить ещё раз свою копию.
Пытаюсь делать вот так
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
char fnm[400];
GetModuleFileName(NULL,fnm,400);
SetLastError(0);
CreateEvent(NULL, FALSE, FALSE, TEXT("ProgName_started"));
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
ShellExecute(Form1->Handle,NULL,fnm,NULL,NULL,SW_HIDE);
}
Form1->Hide();
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
for(;;)
{
Sleep(300);
SetLastError(0);
CreateEvent(NULL, FALSE, FALSE, TEXT("ProgName_started"));
if (GetLastError() != ERROR_ALREADY_EXISTS)
{
ShellExecute(Form1->Handle,NULL,fnm,NULL,NULL,SW_HIDE);
break;
}
}
Form1->Show();
}
}
Но не получается уследить за изменением количества запущенных копий программы.
Может кто то что посоветует?
ЗЫ:не откажусь от примера с иньектом потока в системный процесс,который в случае чего будет перезапускать программу.
|