CoInitializeSecurity 在使用 TChromium (CEF3) 时无法成功
CoInitializeSecurity cannot succeeded when using TChromium (CEF3)
我有一个运行 chromium 客户端浏览器的应用程序,在某些时候我需要执行 WMI 代码来访问某些设备信息,但每次都失败。仅当应用程序不使用 TChromium 对象时,它才有效。可能的 TChromium(CEF3( 初始化 COM 库,当前线程上只允许一个实例。我读到应用程序应该将CoInitializeEx与COINIT_APARTMENTTHREADED一起使用,而不是CoInitialize。
在一个应用程序中使用 TChromium (CEF3( 时,是否可以访问 COM 库和 CoInitializeSecurity?如果是,该怎么做?
以下是我想要实现的目标:
CoUninitialize();
CoInitialize(NULL);
if(CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) == S_OK)
{
// cannot get here, CoInitializeSecurity fails
... need to execute WMI code using IWbemLocator, IWbemServices ...
}
每个
线程只能初始化 1 次 COM。 每个线程可以多次调用CoInitialize/Ex()
(每个成功的CoInitialize/Ex()
调用都有相应的CoUninitialize()
调用(,但 COM 只会在第一次调用时初始化,如果 COM 已在调用线程上初始化,则后续调用将返回S_FALSE
或RPC_E_CHANGED_MODE
。
若要解决你的问题,请尝试将 WMI 代码移动到单独的工作线程,然后你可以完全控制要如何初始化该线程的 COM,与在主 UI 线程上初始化 COM 的方式完全分开。 让主线程在需要时创建 WMI 线程并等待它终止,然后 WMI 线程可以查询设备信息并将其传递回主线程。
相关文章:
- cmake在我的项目中所需的所有静态库都不成功
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 如何让LLDB在成功时退出,在失败时等待
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 为什么 std::绑定错误参数可以成功?
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 如何检查cURL是否成功登录?c ++
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 未知的 GCC 链接器错误,但已成功构建
- 我的 SonarQube C++扫描成功,但结果仅标记重复项,而没有标记其他标记的位置
- 为什么 LoadLibrary 失败,而 LoadLibraryA 成功加载 DLL?
- 生成成功,但不会给出正确的输出
- 默认/样板代码在Visual Studio 2017中给我错误.E1574.虚幻.但构建成功了
- 即使不包含其标头,如何成功向前声明的类编译?
- C++成功复制动态分配的 obj 而不复制 ctor?
- VS2017 版本 15.8.3 成功编译内联方法,而不返回所需值
- CoInitializeSecurity 在使用 TChromium (CEF3) 时无法成功