пытаясь создать простую оболочку в C для Win32 API - PullRequest
0 голосов
/ 14 февраля 2012

Я прошел демонстрационный код, приведенный в документации MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx, и хотел узнать, знаете ли вы, как заставить команду argv[] выполнять в функции CreateProcess ... при попыткевыполняя файл, он говорит, что создать процесс не удалось, когда я попробую следующий фрагмент, а затем я пытаюсь ввести dir после того, как я получаю исполняемый файл

 if( !CreateProcess( NULL,  
        argv[1],        
        NULL,           
        NULL,          
        FALSE,           
        0,              
        NULL,          
        NULL,           
        &pi )           
    ) 

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Dir - команда, которую выполняет cmd.exe; не программа, которую вы можете выполнить с помощью CreateProcess. Таким образом, чтобы сделать то, что вы хотите, вам нужно запустить cmd.exe и передать ему «dir» в командной строке. Самый простой способ сделать это с помощью системной функции. Ваша программа должна выглядеть примерно так:

#include <process.h>

int main(int argc, char *argv[])
{
   system(argv[1]);
}

Очевидно, вам нужно добавить проверку ошибок, но это должно делать то, что вы хотите.

Вот рабочий пример использования CreateProcess. Обратите внимание, что флаг / k указывает cmd.exe оставаться открытым после выполнения команды. Если вы хотите, чтобы она выполнила команду и затем вышла, измените / k на /c.

#include <windows.h>

void main()
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   memset(&si, 0, sizeof(si));
   si.cb = sizeof(si);

   CreateProcess(NULL,  
                 "cmd.exe /k dir",
                 NULL,           
                 NULL,          
                 FALSE,           
                 CREATE_NEW_CONSOLE,              
                 NULL, 
                 NULL,         
                 &si,           
                 &pi );           
}
0 голосов
/ 14 февраля 2012

Как и в примере, который вы разместили по ссылке, вам требуется указатель на STARTUPINFO в качестве второго последнего параметра, а все аргументы командной строки передаются в качестве второго параметра на CreateProcess. См. Документацию по CreateProcess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...