CreateProcess失败,错误为0

时间:2017-04-20 17:42:17

标签: c++ windows

我想开始一个过程。为此,我调用了CreateProcess方法,如下所示:

wchar_t *path = (wchar_t*) malloc(sizeof(wchar_t) * 500);
const char* const_path = "C:/Windows/notepad.exe";
for (int i = 0; i < strlen(const_path); i++)
{
    path[i] = const_path[i];
}

PROCESS_INFORMATION pi;
STARTUPINFO si;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if (!CreateProcess(NULL,
    path,
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
{
    std::stringstream s;
    s << "Could not start - Code " << GetLastError();
    ui.processStateLabel->setText(s.str().c_str());
    return;
}
WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

问题是:它给了我“无法启动 - 代码0”,这没有任何意义,因为错误代码0是成功的操作,显然(没有窗口打开)操作不成功。我需要做些什么来实现这个目标?

2 个答案:

答案 0 :(得分:3)

正如您已经想到的那样,字符串不会终止。您可能还想引用该路径。

您应该在GetLastError对象创建之前调用std::stringstream,因为您不知道构造函数在底层做了什么,这有望提供更好的错误代码。

答案 1 :(得分:0)

我忘了strlen方法不包含0终止,这是必需的。因此,在for循环中将strlen(const_path)更改为strlen(const_path) + 1是解决方案。