C++ CreateProcess失败,出现错误998
我有一个自制的Win32脚本解释器,名为Wintasks,它已经完美地工作了15年。它使用CreateProcess分派win32可执行文件。它在Win7-32上仍然可以正常工作,但在Win7-64下,如果调用Wintasks时使用了任何命令行参数,则CreateProcess将失败,并出现错误998内存访问冲突。从Wintasks运行中删除命令行参数,一切正常 Wintasks从Winmain lpszCmdLine参数获取其第一个参数,即要运行的任务脚本,并且只有该参数可用。任务脚本文件名后即使是空白也会导致问题。在引用_argv[]的所有情况下都可以成功访问参数 如前所述,当从MSVC5运行时,它是一个正在调试的旧程序,一切正常,因此我无法通过这种方式解决问题,问题出在发布可执行文件上。从Win32 VM使用完全相同的任务脚本文件运行完全相同的Wintasks副本没有问题 如果有任何灵感,我将不胜感激。我附加了运行CreateProcess的Wintasks中的代码C++ CreateProcess失败,出现错误998,c++,winapi,visual-c++,C++,Winapi,Visual C++,我有一个自制的Win32脚本解释器,名为Wintasks,它已经完美地工作了15年。它使用CreateProcess分派win32可执行文件。它在Win7-32上仍然可以正常工作,但在Win7-64下,如果调用Wintasks时使用了任何命令行参数,则CreateProcess将失败,并出现错误998内存访问冲突。从Wintasks运行中删除命令行参数,一切正常 Wintasks从Winmain lpszCmdLine参数获取其第一个参数,即要运行的任务脚本,并且只有该参数可用。任务脚本文件名后
DWORD WinExecX(LPSTR cmdline, int winstate)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInformation;
BOOL CreateProcessStatus;
DWORD retval;
DWORD fdwCreate = 0; /* flags for CreateProcess */
memset(&StartupInfo,0,sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.dwFlags=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow=winstate;
openerr=0;
CreateProcessStatus = CreateProcess( NULL, /*(LPTSTR)name,*/
cmdline,
NULL,
NULL,
FALSE, /* changed 2000-10-18 */
fdwCreate,
NULL, /*envblk,*/
NULL,
&StartupInfo,
&ProcessInformation
);
if(!CreateProcessStatus)
{
openerr=GetLastError();
return 0;
}
elevel=retval = (DWORD)ProcessInformation.hProcess;
CloseHandle(ProcessInformation.hThread);
return retval;
}
你怎么称呼WinExecX?cmdline的具体来源?通常是Wintasks中的字符串缓冲区,由程序用各种参数填充;所以它不是一个常量字符串。你定义了UNICODE吗?可以尝试显式调用CreateProcessaAPI吗?