我试图让 CreateProcess 或 CreateProcessW 执行名称 http://msdn.microsoft.com/en-us/library/ms682425.aspx 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).aspxhttp://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx 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;>
并且 pi 为空,如下所示:
memset(π,0,sizeof(pi));
我查看了系统事件日志,每次尝试使用事件 ID 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>
有人知道如何让它发挥作用吗?可能:
我正在 XP SP2 上使用 Visual Studio 2005 进行构建并以本机方式运行。
感谢您的帮助。