CreateProcess不适用于所有应用程序

时间:2011-06-14 14:12:31

标签: c++ external createprocess

我正在编写一个用于启动其他外部可执行文件的GUI应用程序。它适用于我想要的所有可执行文件,除了一个。这是我正在使用的代码:

CreateProcess(FullPathOfExternalApp.c_str(), NULL, NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo)

外部应用程序是否有可能内置机制阻止其他可执行文件执行?

非常感谢

2 个答案:

答案 0 :(得分:2)

我首先会得到最后一个系统错误,然后将其格式化并将其转储出来,这有点像:

std::string getSystemErrorMsg()
{
    LPVOID lpMsgBuf;
    ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );

    std::string err = reinterpret_cast<const char *>( lpMsgBuf );

    ::LocalFree( lpMsgBuf );

    return err;
}

我会在CreateProcess失败后立即调用这样的函数,然后将错误的字符串传递给OutputDebugString()并使用类似DebugView的内容来监视输出。有时操作系统可以让你知道为什么它不会做你期望它做的事情,而不是总是,但我至少会从那里开始。

答案 1 :(得分:1)

使用CreateProcess()启动程序没什么特别之处。你的问题在别处。它可能是32位系统上的64位可执行文件(不会运行),它可能缺少依赖项,它可能是与环境相关的其他内容。您最好的选择是使用Process Monitor实用程序来检查最可能的原因。