创建进程不适用于所有应用程序
CreateProcess don't work on all applications
我正在编写一个用于启动其他外部可执行文件的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实用程序来检查最可能的原因。
相关文章:
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- RVO 何时保证应用/确实适用于 C++20 编译器
- 适用于 macOS 的 Qt 5.9.1 的系统托盘应用程序
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 在Visual Studio 2017上编译适用于Android的SDL2应用程序时缺少 libBox2D.so
- 语言选择:适用于Windows应用商店应用程序的C++或C#
- 如何为IWICBitmap创建ID2D1DeviceContext?(适用于C++中的Metro应用程序)
- 在 Linux 上使用 GCC 交叉编译适用于 Windows 的 Qt 应用程序
- 如何使用 p2p 暗网应用程序合并用于直接隧道的端口/套接字
- 适用于Android的纯c ++应用程序及其性能
- 为 WIN CE 仿真器 5.0 开发的应用程序不适用于 WIN CE 设备 6.0
- 我们是否可以使用 Qt(64) 来生成一个同时适用于 32 位窗口和 64 位窗口的应用程序
- 适用于 C++ 中的 Windows 应用程序的良好库
- 如何捆绑适用于 Linux 的应用程序
- Linux下的c++应用程序,用于将ipv4数据包转换为ipv6
- 视频捕获应用程序不适用于与 DirectShow 兼容的设备
- 如何在新程序中包含来自其他c++文件的函数(适用于Mac OSX应用程序)