CreateProcess не возвращает расширенное значение - PullRequest
1 голос
/ 02 января 2011

Я хочу отправить символ двойной кавычки в мою функцию CreateProcess.Как я могу сделать правильный путь?Я хочу отправить все следующие символы: "% h"

CreateProcess(L"C:\\identify -format ",L"\"%h\" trustedsnapshot.png",0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);

примечание: "identifier" - это программа Imagemagick.

Вот полный код:

int ExecuteExternalFile()     
{ 
SECURITY_ATTRIBUTES secattr; 
ZeroMemory(&secattr,sizeof(secattr));
secattr.nLength = sizeof(secattr);
secattr.bInheritHandle = TRUE;

HANDLE rPipe, wPipe;

//Create pipes to write and read data

CreatePipe(&rPipe,&wPipe,&secattr,0);

STARTUPINFO sInfo; 
ZeroMemory(&sInfo,sizeof(sInfo));
PROCESS_INFORMATION pInfo; 
ZeroMemory(&pInfo,sizeof(pInfo));
sInfo.cb=sizeof(sInfo);
sInfo.dwFlags=STARTF_USESTDHANDLES;
sInfo.hStdInput=NULL; 
sInfo.hStdOutput=wPipe; 
sInfo.hStdError=wPipe;

CreateProcess(L"C:\\identify",L" -format \"%h\" trustedsnapshot.png",0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);



CloseHandle(wPipe);

char buf[100];
DWORD reDword; 
CString m_csOutput,csTemp;
BOOL res;
do
{
  res=::ReadFile(rPipe,buf,100,&reDword,0);
  csTemp=buf;
  m_csOutput+=csTemp.Left(reDword);
}while(res);

//return m_csOutput;
float fvar; 
//fvar = atof((const char *)(LPCTSTR)(m_csOutput));  ori


//fvar=atof((LPCTSTR)m_csOutput);
fvar = _tstof(m_csOutput);

const size_t len = 256;
wchar_t buffer[len] = {};
_snwprintf(buffer, len - 1, L"%d", fvar);


MessageBox(NULL, buffer, L"test print createprocess value", MB_OK);

return fvar;
}

Мне нужна эта функция для возврата целочисленного значения из CreateProcess.

Ответы [ 2 ]

1 голос
/ 03 января 2011

Ваша проблема не в кавычках. Есть две проблемы с тем, как вы передаете параметры в CreateProcess. Во-первых, командная строка, передаваемая во втором аргументе, должна содержать имя команды (то есть значение «argv [0]»), во-вторых, перенаправление (> testt.txt) не обрабатывается API CreateProcess. Если c: \ identifier не ожидает таких аргументов, вы не должны включать это в командную строку.

1 голос
/ 02 января 2011

То, как вы написали это, должно работать нормально, или у вас есть какие-то проблемы с этим?

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