Если я тебя правильно понял, прога должна следить за другой прогой и если та закрывается - стартовать ее заново. Вот исходник подобной программы, которая стартует calc.exe и проверяет, не закрыт ли он. Если закрыт - стартует его опять. Реализация на VC++ 6.0, Win32 Application.
Конечно реализованный здесь алгоритм не защищен, то есть можно закрыть процесс этой программы, а потом и calc. Для обеспечения защиты необходимо реализовать программу в виде потока, который приаттачивает себя к другому процессу (лучше к сервису, напр. к csrss.exe).
==============================================================
#include "stdafx.h"
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
STARTUPINFO info;
info.cb = sizeof(STARTUPINFO);
info.cbReserved2 = NULL;
info.lpReserved = NULL;
info.lpReserved2 = NULL;
info.dwFlags = STARTF_USESHOWWINDOW;
info.wShowWindow = SW_SHOW;
info.lpDesktop = NULL;
info.lpTitle = NULL;
PROCESS_INFORMATION *pinfo = new PROCESS_INFORMATION;
pinfo->dwProcessId = -1;
while (1)
{
if (!OpenProcess(PROCESS_QUERY_INFORMATION, false, pinfo->dwProcessId))
if (!CreateProcess("c:\\winnt\\system32\\calc.exe", NULL, NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &info, pinfo))
{
MessageBox(NULL, "Can not create process", "Error", MB_OK + MB_ICONHAND);
return -1;
}
Sleep(1000);
}
delete pinfo;
return 0;
}
|