이름이 < MAX _ 인 프로세스가 실행되도록 CreateProcess 또는 CreateProcessW를 얻으려고하지만 MAX _보다 큰 경로에 있습니다. PATH 문자. 문서에 따르면 : http://msdn.microsoft.com/en-us/library/ms682425.aspx, 나는 lpApplicationName가 NULL이 아니고 lpCommandLine이 최대 32,768 문자가 될 수 있는지 확인해야합니다.경로에서 프로세스를 실행하기 위해 CreateProcess/CreateProcessW를 얻는 방법> MAX_PATH 문자
나는 그것을 시도했다. 그러나 나는 오류를 얻는다. _ PATH _ NOT _ 발견했다.
CreateProcessW로 변경되었지만 여전히 동일한 오류가 발생합니다. CreateProcessW를 호출 할 때 http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx에 설명 된대로 lpApplicationName 접두사를 \\? \ 접두사로 사용하면 좀 더 가까이 있다고 생각하는 다른 오류가 나타납니다. 오류 _ SXS _ CANT _ GEN _ ACTCTX.
CreateProcessW 내 전화는 다음과 같습니다
이 CreateProcessW(w_argv0,arg_string,NULL,NULL,0,NULL,NULL,&si,&ipi);
\\?\<long absolute path>\foo.exe.
arg_string가
다음과 같이 SI가 설정되어
foo는 "에서 foo.exe \ < 긴 절대 경로 >"를 포함 :
memset(&si,0,sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE;>
와 파이는 같이 비어 : 나는 시스템 이벤트 로그에보고하고 새로운 항목이 나는 이벤트 ID 59, 원본 SideBySide으로 이것을 시도 할 때마다 거기에
memset(&pi,0,sizeof(pi));
: 활성화 컨텍스트는 별도로 .manifest 실패 생성합니다. 참조 오류 메시지 : 작업이 성공적으로 완료되었습니다.
실행하려는 파일이 경로 < MAX_PATH에서 정상적으로 실행됩니다.
< 긴 절대 경로 >의 구성 요소 중 하나가 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>
누구나이 기능을 작동시키는 방법을 알고 계십니까? 아마도 :
경로에서 프로세스를 실행하는 CreateProcess를 또는 CreateProcessW를 호출하는 다른 방법> MAX_PATH 문자
내가 매니페스트 파일에서 할 수있는 일
난 XP SP2에서 Visual Studio 2005로 구축하고 네이티브로 실행.
도움 주셔서 감사합니다.