Я должен признать, что большинство из элементов win32 api, с которыми я не знаком в этом коде. При этом я хотел бы включить то, что я знаю, в мой учебный процесс. Я пытаюсь создать цикл for, который будет CreateProcess
несколько раз с различными аргументами каждый раз. В Visual Studio я получаю ошибку компиляции:Передача строкового массива в CreateProcess для цикла для нескольких процессов
source.cpp(138): error C3867: 'std::basic_string<_Elem,_Traits,_Alloc>::c_str': function call missing argument list; use '&std::basic_string<_Elem,_Traits,_Alloc>::c_str' to create a pointer to member
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
При выполнении следующего кода:
std::string arrString[3] = {"dir","cd ..","dir"};
int i;
LPWSTR cmd =L"cmd";
for(i=0; i<3; i++)
{
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (CreateProcess(cmd, arrString[i].c_str, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
Am Я даже движется в правильном направлении?
EDIT:
std::string arrString[3] = {"cmd","cmd","cmd"};
int i;
LPWSTR cmd =L"cmd";
for(i=0; i<3; i++)
{
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
vector<wchar_t> cmdline(arrString[i].begin(), arrString[i].end());
CreateProcessW(cmd, &cmdline[0], NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
Похоже, вы намерены получить списки каталогов текущего каталога и родительского каталога, но это не то, что этот код будет делать. Он запустит новый процесс с собственным понятием «текущий каталог» и запустит 'dir'. Затем он запустит * другой * процесс, опять же со своим собственным понятием «текущий каталог» и переключится на другой каталог. Затем он запустит * третий * процесс, снова наследующий тот же текущий каталог, что и ваша программа, и снова запустите 'dir'. Вы получите тот же список каталогов дважды. Чтобы получить список файлов, подумайте, начиная с 'FindFirstFile'. –
@RobKennedy: Вы правы, но я использовал их только как пример. В моем коде он отличается, и процессы могут запускаться отдельно. Я использовал их как способ сократить его, например, для целей. – arynhard