【发布时间】:2014-08-14 08:31:34
【问题描述】:
我正在创建一个执行批处理文件的子进程
success = CodebenderccAPI::CreateProcess(
NULL,
(LPWSTR)command.c_str(), // command line
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // Inherit pipe handles from parent process
CREATE_NEW_CONSOLE, // creation flags
NULL, // use parent's environment
current_dir, // use the plugin's directory
&si, // __in, STARTUPINFO pointer
&pi); // __out, receives PROCESS_INFORMATION
上面的代码已经过测试,可以在各种机器上正常运行,但最近在 Windows 7 机器上失败了,我仍在试图找出原因......
我已确保用户对安装批处理文件的文件夹具有管理权限,并且批处理文件位于工作目录中。此外,我禁用了防病毒软件(以验证它没有导致问题)并再次尝试但没有成功。 CreateProcess 总是失败,错误代码为 2:ERROR_FILE_NOT_FOUND。
有什么可能导致失败的想法吗?
【问题讨论】:
-
我不认为这是你的问题,但为了将来参考你不应该将 c_str() 传递给 CreateProcess。您不应该写入 c_str() 返回的缓冲区,而 CreateProcess 会。
-
我同意,这似乎不是代码错误,但我想不出任何其他可能导致 ERROR_FILE_NOT_FOUND 失败的原因。
-
在命令行输入相同的命令是否有效?在调用 CreateProcess 帮助之前是否在命令前面加上
cmd /c?哦,你有没有仔细检查过command是一个宽字符串? (如果它是一个窄字符串,强制转换将隐藏类型不匹配。) -
如果在命令行输入并且命令变量是 const std::wstring & 类型,则命令有效。 :(
-
你试过把
cmd /c放在命令的开头吗?字符串的确切值是多少?
标签: windows createprocess file-not-found