【发布时间】:2020-03-17 10:36:35
【问题描述】:
我在检查 CreateProcess() 失败原因时遇到问题,生产中的代码在 CreateProcess() 失败时不记录 GetLastError() 所以我正在运行 ProcMon 来检查原因但无法找到原因(procMon 是否会记录失败原因,例如“C:\dummy.exe 路径未找到或权限被拒绝”?)。
有没有办法(工具?)在不考虑 GetLastError() 的情况下检查 CreateProcess() 失败的原因?
我无法调试客户环境(无法访问我),但我可以更改代码并提供新版本,并且由于流程原因需要很长时间。我目前正在寻找可用的快速选项。以下是示例代码,不是确切的生产代码。
int main()
{
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
TCHAR dymmypath[_MAX_PATH] = _T("C:\\dummy.exe");
static TCHAR TempPathString[_MAX_PATH];
STARTUPINFO si = { sizeof(si) }; //default set up
PROCESS_INFORMATION pi; //data structure for CreateProcess
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMINIMIZED;
if (!CreateProcess(dymmypath, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, TempPathString, &si, &pi))
{
printf("Failed");
}
else {
printf("Success");
}
return 0;
}
【问题讨论】:
-
你不能只附加一个调试器吗?
-
@tenfour 已在生产环境中发布版本。
-
发布版本仍然可以调试。在
kernel32!CreateProcessW上设置断点,跳出,查看错误码。 -
@RbMm
""不是有效路径 -
@tenfour - 是的,无效。并且使用此代码调用必须总是 失败并出现文件名、目录名或卷标语法不正确。 错误。但我只说
TempPathString实际上是零初始化的。不是说这个正确
标签: c++ windows winapi createprocess win32-process