【问题标题】:CreateProcess C++ Doesn't Create Any ProcessCreateProcess C++ 不创建任何进程
【发布时间】:2012-11-30 17:03:34
【问题描述】:

我是 C++ 的新手,正在尝试使用调试 API,但我什至无法开始。因为我无法通过 CreateProcess api 运行任何 exe。它不会给出任何编译错误,但会返回 false。你有什么建议吗?

LPCWSTR appName = LPCWSTR("C:\\TEST.EXE");
LPSTARTUPINFO sInfo = LPSTARTUPINFO();
LPPROCESS_INFORMATION pInfo = LPPROCESS_INFORMATION();

if (CreateProcess(appName,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,sInfo,pInfo))
{
    printf("done!");
}
else
{
    printf("error!");
}

【问题讨论】:

  • 使用 GetLastError() 获取失败原因的信息。
  • 87 它给了。我已经搜索过它,我发现它是关于论点的,但是哪一个以及为什么:)?
  • 是的,“一个或多个参数不正确”不太有用。很高兴有人为您提供了正确的答案。

标签: winapi createprocess


【解决方案1】:

sInfopInfo 未指向有效内存(错误代码87 表示参数不正确。)。改为:

STARTUPINFO sInfo = { sizeof(sInfo };
TCHAR desktop[] = TEXT("winsta0\\default");
sInfo.lpDesktop = desktop;
PROCESS_INFORMATION pInfo;

并将对象的地址传递给CreateProcess()(即&sInfo, &pInfo)。

【讨论】:

  • 感谢您的信息,我做了更改,但现在出现错误 2。它与文件路径有关吗?我确定文件在那里。
  • @halilibrahim,是的。 Windows 中一个方便的实用程序是“net helpmsg ”,当您给出描述时。
  • 他的appname也是错误的,将const char*转换为LPCWSTR会产生中文。
  • 感谢您的回答。我已将 CreateProcess 更改为 CreateProcessA 并使用 LPCSTR 而不是 LPCWSTR。现在它工作正常。但我想知道为什么初始化像“LPSTARTUPINFO sInfo = LPSTARTUPINFO();”不起作用并且没有给出任何错误?
  • 您创建了一个指向 STARTUPINFO 的指针,称为“sInfo”,然后将其初始化为与另一个指向 STARTUPINFO 的临时指针相等。
猜你喜欢
  • 2012-03-14
  • 2022-08-23
  • 2014-04-21
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多