Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++ API] функция запуска дочернего процесса


Автор: Gloft 11.12.2008, 16:13
Есть необходимость написать программу которая бы запускала антивирусную проверку съемных носителей.
Написал функцию. Она работает но вот если ей задавать нужное мне приложение то ничего не выходит.
Читал много статей, 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;
}
....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)