-3

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

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

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

非常感谢

4

2 回答 2

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

于 2011-06-14T15:07:54.833 回答
1

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

于 2011-06-14T14:17:55.160 回答