diff --git a/src-tauri/src/utils/server.rs b/src-tauri/src/utils/server.rs
index 1d2ff59b0a1d10f35660524f5e094fbd68e9188b..f4e98368abadac296ef2442df0622b712a8af45f 100644
--- a/src-tauri/src/utils/server.rs
+++ b/src-tauri/src/utils/server.rs
@@ -2,19 +2,26 @@ extern crate warp;
 
 use super::resolve;
 use crate::config::IVerge;
+use anyhow::{bail, Result};
 use port_scanner::local_port_available;
 use tauri::AppHandle;
 use warp::Filter;
 
 /// check whether there is already exists
-pub fn check_singleton() -> Result<(), ()> {
+pub fn check_singleton() -> Result<()> {
     let port = IVerge::get_singleton_port();
 
     if !local_port_available(port) {
         tauri::async_runtime::block_on(async {
-            let url = format!("http://127.0.0.1:{}/commands/visible", port);
-            reqwest::get(url).await.unwrap();
-            Err(())
+            let url = format!("http://127.0.0.1:{port}/commands/visible");
+            let resp = reqwest::get(url).await?.text().await?;
+
+            if &resp == "ok" {
+                bail!("app exists");
+            }
+
+            log::error!("failed to setup singleton listen server");
+            Ok(())
         })
     } else {
         Ok(())
@@ -24,7 +31,6 @@ pub fn check_singleton() -> Result<(), ()> {
 /// The embed server only be used to implement singleton process
 /// maybe it can be used as pac server later
 pub fn embed_server(app_handle: AppHandle) {
-    let app_handle = app_handle.clone();
     let port = IVerge::get_singleton_port();
 
     tauri::async_runtime::spawn(async move {