почему команды не выполняются с CreateProcess

1

я hev с функцией CreatProcess, введенной в заголовок windows.h для c++. всякий раз, когда я пытаюсь передать ему переменную TCHAR, содержащую команду cmd, она возвращает ошибку: CreateProcess failed (2). и для этого жду ваших объяснений и решений.

рассмотрите следующий код:

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

int _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

if( argc != 2 )
{
    printf("Usage: %s [cmdline]\n", argv[0]);
    return 0;
}

// Start the child process.
if( !CreateProcess( NULL,   // No module name (use command line)
    argv[1],        // Command line
    NULL,           // Process handle not inheritable
    NULL,           // Thread handle not inheritable
    FALSE,          // Set handle inheritance to FALSE
    0,              // No creation flags
    NULL,           // Use parent environment block
    NULL,           // Use parent starting directory
    &si,            // Pointer to STARTUPINFO structure
    &pi )           // Pointer to PROCESS_INFORMATION structure
)
{
    printf( "CreateProcess failed (%d).\n", GetLastError() );
    return 0;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

}

обратите внимание: когда я запускаю приложение с указанием его пути, он работает отлично, как => "c:\code.exe";

  • 0
    В каком случае ваше приложение не работает? Вы говорите, что: code.exe C: \ Code.exe работает?
  • 0
    в случае, если вы передаете команду DOS в качестве аргумента
Теги:
command

2 ответа

1

Если вы хотите запустить команду DOS, вы должны запустить оболочку cmd раньше.

CreateProcess не делает этого для вас.

Опция /c cmd позволяет запустить команду в оболочке и завершить работу. Вам просто нужно создать командную строку типа cmd/c <your command here>.

Я скомпилировал ваш код на VS2012, и я попытался: test.exe "cmd/c dir" и он работает как шарм.

Из документации Microsoft:

Чтобы запустить командный файл (или пакетную команду), вы должны запустить командный интерпретатор; установите lpApplicationName в cmd.exe и установите lpCommandLine в следующие аргументы: /c плюс имя командного файла.

Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

0

Чтобы выполнить команду, реализованную командной оболочкой aka cmd.exe, необходимо запустить cmd.exe. CreateProcess автоматически не делает этого для вас.

Создайте командную строку формы cmd.exe/c <your command here>. /c означает "выполнить одну команду, а затем завершить".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню