创建进程不适用于所有应用程序

CreateProcess don't work on all applications

本文关键字:应用程序 适用于 进程 不适用 创建      更新时间:2023-10-16

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

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

外部应用程序是否可能有一个内置机制,阻止它被另一个可执行文件执行?

非常感谢

我首先会得到最后一个系统错误,然后格式化并将其转储出去,大致如下:

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的东西来监视输出。有时操作系统可以让你知道为什么它不会做你期望它做的事情,但并不总是这样,但我至少会从那里开始。

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

相关文章: