Я создаю процесс из своего приложения, используя createprocess() с параметром lpCurrentDirectory, но он не работает. Он дает ошибку «Система не может найти указанный путь». мой код CreateProcess("XYZ\\bin\\run.bat", NULL, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, "XYZ\\bin", &siStartupInfo, &piProcessInfo) ;
Я также даю полный путь как lpCurrentDirectory, получая curent-каталог с помощью GetCurrentDir() и добавляя XYZ\\bin
в текущий каталог, но он все равно не работает. Я хочу, чтобы мой командный файл запускался из lpCurrentDirectory. Я не понимаю, как createProcess() работает с параметром lpCurrentDirectory. Ожидается ли полный путь или относительный путь?CreateProcess() не работает с lpCurrentDirectory
Я также пробовал это с помощью hardcoding Полный путь, но он отображал ту же ошибку. На самом деле мой оригинальный код, `
char cCurrentPath[FILENAME_MAX];
if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath)))
{
printf("\n error...");
}
string path(cCurrentPath);
path += "\\XYZ\\bin";
wstring_convert<std::codecvt_utf8<wchar_t>> converter;
wstring wstringData = converter.from_bytes(path);
TCHAR lpszClientPath[500]= TEXT("XYZ\\bin\\run.bat /y");
if(::CreateProcess(NULL, lpszClientPath, NULL, NULL, TRUE, CREATE_NEW_CONSOLE,NULL, wstringData.c_str(), &si, &pi) > 0)
`.
В документации однозначно указано, что 'lpCurrentDirectory' должен быть полным путем. Вы пробовали жесткое кодирование действительного полного пути в свой код? Также обратите внимание, что вы не можете запускать пакетный файл напрямую, вместо этого вы должны запустить 'cmd/c xyz \\ bin \\ run.bat'. –
Все манипуляции и преобразование строк могут вызвать проблемы. Вы пытались использовать 'MessageBox (NULL, wstringData.c_str(), L" test ", MB_OK)' вместо 'CreateProcess', чтобы увидеть, какую строку вы фактически отправляете в качестве целевого каталога? Вы дважды проверили, что этот целевой каталог действительно существует? Почему вы не используете 'GetCurrentDirectory' для получения текущего каталога в Юникоде? –
NB: вне зависимости от вашей проблемы, код, записанный, будет * не * работать, если путь к каталогу содержит любые символы, отличные от ASCII. –