使CEF使用单独的可执行文件来启动子流程(C /Windows)



我正在尝试从铬嵌入式框架(https://bitbucket.org/chromiumiumiumbedded/cef/wiki/tutorial)中修改" cefsimple"示例,以便它使用<<<<<<<<<<<<<<为了在Windows上启动其子过程。

但是,这是无法预期的,并且每次在主进程中呼叫 Cefinitialize 时,在任何窗口弹出或启动任何子过程之前,都会崩溃。致电堆栈:

    chrome_elf.dll!00007ffaa7fc1cfd()   
    chrome_elf.dll!00007ffaa7fba5fc()   
    chrome_elf.dll!00007ffaa7fb9c9b()   
    libcef.dll!00007ffa88dae13c()   
    libcef.dll!00007ffa882fc146()   
>   cefsimple.exe!CefInitialize(const CefMainArgs & args, const CefStructBase<CefSettingsTraits> & settings, CefRefPtr<CefApp> * application, void * windows_sandbox_info)  Line 201 + 0xb4 bytes   C++

使用:CEF版本3.2883.1539,64位,C ,vs 2015,Windows 10。

我的解决方案:我在cmakelists中添加了另一个目标(cefsimplehelper.exe),并使用这些说明来修改源代码:https://bitbucket.org/chromiumiumembedded/cef/wiki/generalusage#markdown-header-separate-separate-sub-process-ecutable

CEFSIMPLE_WIN.CC:(主要可执行文件的入口点)

int APIENTRY wWinMain(HINSTANCE hInstance,
                      HINSTANCE hPrevInstance,
                      LPTSTR    lpCmdLine,
                      int       nCmdShow)
{
  UNREFERENCED_PARAMETER(hPrevInstance);
  UNREFERENCED_PARAMETER(lpCmdLine);
  CefEnableHighDPISupport();
  CefMainArgs main_args(hInstance);
  CefSettings settings;
  settings.no_sandbox = true;
  CefString(&settings.browser_subprocess_path).FromASCII("cefsimpleHelper.exe");
  CefRefPtr<SimpleApp> app(new SimpleApp);
  CefInitialize(main_args, settings, app.get(), NULL);
  CefRunMessageLoop();
  CefShutdown();
  return 0;
}

process_helper_win.cc:(子过程启动器的入口点)

int APIENTRY wWinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR    lpCmdLine,
    int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
    CefMainArgs main_args(hInstance);
    CefRefPtr<SimpleApp> app(new SimpleApp);
    return CefExecuteProcess(main_args, app.get(), nullptr);
}

有什么想法可能是什么问题?

我认为我找到了解决方案,主要是通过随机反复试验:p

我刚刚添加了 cefexecuteprocess 在MAIM可执行文件中, Cefinitialize

const auto exit_code = CefExecuteProcess(main_args, app.get(), nullptr);
if (exit_code >= 0)
    return exit_code;

感谢所有评论,我希望这也会对其他人有所帮助。

相关内容

  • 没有找到相关文章

最新更新