我想开始一个过程。为此,我调用了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是成功的操作,显然(没有窗口打开)操作不成功。我需要做些什么来实现这个目标?
答案 0 :(得分:3)
正如您已经想到的那样,字符串不会终止。您可能还想引用该路径。
您应该在GetLastError
对象创建之前调用std::stringstream
,因为您不知道构造函数在底层做了什么,这有望提供更好的错误代码。
答案 1 :(得分:0)
我忘了strlen
方法不包含0终止,这是必需的。因此,在for循环中将strlen(const_path)
更改为strlen(const_path) + 1
是解决方案。