Я пытаюсь заставить CreateProcess или CreateProcessW выполнять процесс с именем http://msdn.microsoft.com/en-us/library/ms682425.aspx, мне нужно убедиться, что lpApplicationName не равно NULL, а затем lpCommandLine может содержать до 32 768 символов.
Я пробовал это, но я получаю ERROR_PATH_NOT_FOUND.
Я изменил на CreateProcessW, но все равно получаю ту же ошибку. Когда я префикс lpApplicationName с \\? \, Как описано в http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx при вызове CreateProcessW, я получаю другую ошибку, которая заставляет меня думать, что я немного ближе: ERROR_SXS_CANT_GEN_ACTCTX.
Мой вызов CreateProcessW:
CreateProcessW(w_argv0,arg_string,NULL,NULL,0,NULL,NULL,&si,&ipi);
где w_argv0 - \\?\<long absolute path>\foo.exe.
arg_string содержит "<длинный абсолютный путь> \ foo.exe" foo
si устанавливается следующим образом:
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;>
и пи пуст, как в:
memset(&pi,0,sizeof(pi));
Я посмотрел в журнале системных событий, и каждый раз, когда я пытаюсь сделать это с идентификатором события 59, появляется новая запись, источник SideBySide: Создать контекст активации не удалось для .Manifest. Ссылочное сообщение об ошибке: Операция успешно завершена.
Файл, который я пытаюсь выполнить, работает нормально по пути
Для пояснения, ни один компонент <длинного абсолютного пути> не может быть больше символов MAX_PATH. Само название исполняемого файла, конечно, нет, даже с .manifest в конце. Но весь путь вместе длиннее символов MAX_PATH.
Я получаю ту же ошибку, независимо от того, вставляю ли я ее манифест или нет. Манифест называется foo.exe.manifest и находится в том же каталоге, что и исполняемый файл, если он не встроен. Содержит:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Кто-нибудь знает, как заставить это работать? Возможно:
Я собираюсь с Visual Studio 2005 на XP SP2 и работаю с native.
Спасибо за вашу помощь.