Desktop: Handle another instance is already running (#2938)

Handle another instance is already running
This commit is contained in:
Timon
2025-07-25 21:38:54 +00:00
committed by GitHub
parent 4fec24893e
commit 91156d295c
3 changed files with 19 additions and 5 deletions
+9 -3
View File
@@ -1,4 +1,4 @@
use cef::sys::CEF_API_VERSION_LAST;
use cef::sys::{CEF_API_VERSION_LAST, cef_resultcode_t};
use cef::{App, BrowserSettings, Client, DictionaryValue, ImplBrowser, ImplBrowserHost, ImplCommandLine, RenderHandler, RequestContext, WindowInfo, browser_host_create_browser_sync, initialize};
use cef::{Browser, CefString, Settings, api_hash, args::Args, execute_process};
use thiserror::Error;
@@ -74,7 +74,11 @@ impl Context<Setup> {
let result = initialize(Some(self.args.as_main_args()), Some(&settings), Some(&mut cef_app), std::ptr::null_mut());
if result != 1 {
return Err(InitError::InitializationFailed);
let cef_exit_code = cef::get_exit_code() as u32;
if cef_exit_code == cef_resultcode_t::CEF_RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED as u32 {
return Err(InitError::AlreadyRunning);
}
return Err(InitError::InitializationFailed(cef_exit_code));
}
let render_handler = RenderHandlerImpl::new(event_handler.clone());
@@ -146,5 +150,7 @@ pub(crate) enum SetupError {
#[derive(Error, Debug)]
pub(crate) enum InitError {
#[error("initialization failed")]
InitializationFailed,
InitializationFailed(u32),
#[error("Another instance is already running")]
AlreadyRunning,
}