[C++ API Win] функция запуска дочернего процесса
Добавлено: 2008-12-12 12:02:18
Есть необходимость написать программу которая бы запускала антивирусную проверку съемных носителей.
Написал функцию. Она работает но вот если ей задавать нужное мне приложение то ничего не выходит.
Читал много статей, MSDN, книг. Вроде бы все сделал как нужно и на сторонних приложениях работает все отлично.
Помогите. Найти причину почему не запускается в таком варианте не могу.
Написал функцию. Она работает но вот если ей задавать нужное мне приложение то ничего не выходит.
Читал много статей, MSDN, книг. Вроде бы все сделал как нужно и на сторонних приложениях работает все отлично.
Помогите. Найти причину почему не запускается в таком варианте не могу.
Код: Выделить всё
......
char szProcess[] = "\"C:\\Program Files\\Kaspersky Lab\\Kaspersky Anti-Virus 2009\\avp.com\"";
char szProcessKey[] = "scan /REMDRIVES /i1 /fa /RA:c:\\scan.log";
......
////////////////////////////////////////////////////////////////////////////////
// функция запуска дочернего процесса (1 если успешное выполнение)
////////////////////////////////////////////////////////////////////////////////
bool InitProcess( void )
{
// определяем атрибут защиты для выполняемой задачи
// Declared in Winbase.h; include Windows.h
SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor = NULL; // указатель на дескриптор защиты
sa.nLength = sizeof(SECURITY_ATTRIBUTES); // размер структуры в байтах
sa.bInheritHandle = true; // разрешаем наследование дескрипторов
// структура описывающая новый параметры запуска нового процесса
// Declared in Winbase.h; include Windows.h
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO)); // обнуляем структуру
si.cb=sizeof(STARTUPINFO); // устанавливаем размер
//si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
//si.wShowWindow = SW_SHOW; //SW_HIDE;
//si.hStdOutput = newstdout;
//si.hStdError = newstdout; // перенаправляем поток
//si.hStdInput = newstdin; // дочернего процесса
//
// Declared in Winbase.h, include Widows.h
PROCESS_INFORMATION pi;
if (!CreateProcess(
szProcess, // имя исполняемого модуля
szProcessKey, // Командная строка
NULL, // Указатель на структуру SECURITY_ATTRIBUTES
NULL, // Указатель на структуру SECURITY_ATTRIBUTES
FALSE, // Флаг наследования текущего процесса
CREATE_NEW_CONSOLE, // Флаги способов создания процесса
NULL, // Указатель на блок среды
NULL, // Текущий диск или каталог
&si, // Указатель на структуру STARTUPINFO
&pi)){ // Указатель на структуру PROCESS_INFORMATION
return 0; // ошибка запуска дочернего процесса
}
return 1;
}
....