我正在编写一个用于启动其他外部可执行文件的GUI应用程序。它适用于我想要的所有可执行文件,除了一个。这是我正在使用的代码:
CreateProcess(FullPathOfExternalApp.c_str(), NULL, NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo)
外部应用程序是否有可能内置机制阻止其他可执行文件执行?
非常感谢
答案 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实用程序来检查最可能的原因。