我正在尝试使用CreateProcess()函数来启动位于我的根目录(我的VS解决方案所在的目录)中的文件夹中的.exe应用程序。好像很简单吧?它可能是但我不能为我的生活注意到我做错了什么。每次我尝试启动.exe时,都会收到错误消息“CreateProcess failed code 2”,这意味着我找不到我尝试启动的.exe文件。
我的代码:
void HavNetProfiler::LaunchClumsy()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// Start the child process.
if (!CreateProcess((LPCTSTR)"Clumsy\\clumsy.exe", // No module name (use command line)
NULL, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi) // Pointer to PROCESS_INFORMATION structure
)
{
printf("CreateProcess failed (%d).\n", GetLastError());
return;
}
// Wait until child process exits.
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
我使用此功能错了吗?我误解了它是如何工作的还是我错过了一些细节?我在一个放在不同文件夹中的文件中调用函数LaunchClumsy()
(该文件夹存在于根文件夹中,就像“Clumsy”文件夹一样)。这会有所作为吗?
谢谢!
答案 0 :(得分:3)
代码中有2个直接错误:
LPCTSTR
演员表错了。如果您的代码在没有该强制转换的情况下无法编译,则表明您使用了错误的字符编码传递了参数将其更改为L"Clumsy\\clumsy.exe"
以显式传递宽字符字符串。