diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 38f1baebc92c0d2486ac297c2adb2287142f9c52..ff3d3aa808b927cff32740836c8681425f027688 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -21,7 +21,6 @@ use crate::{
 use std::sync::{Arc, Mutex};
 use tauri::{
   api, CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu, SystemTrayMenuItem,
-  SystemTraySubmenu,
 };
 
 fn main() -> std::io::Result<()> {
@@ -30,23 +29,34 @@ fn main() -> std::io::Result<()> {
     return Ok(());
   }
 
-  let sub_menu = SystemTraySubmenu::new(
-    "出站规则",
-    SystemTrayMenu::new()
-      .add_item(CustomMenuItem::new("rway_global", "全局连接"))
-      .add_item(CustomMenuItem::new("rway_rule", "规则连接").selected())
-      .add_item(CustomMenuItem::new("rway_direct", "直接连接")),
-  );
   let menu = SystemTrayMenu::new()
-    .add_submenu(sub_menu)
-    .add_native_item(SystemTrayMenuItem::Separator)
-    .add_item(CustomMenuItem::new("syste_proxy", "设置为系统代理"))
-    .add_item(CustomMenuItem::new("self_startup", "开机启动").selected())
     .add_item(CustomMenuItem::new("open_window", "显示应用"))
     .add_native_item(SystemTrayMenuItem::Separator)
     .add_item(CustomMenuItem::new("quit", "退出").accelerator("CmdOrControl+Q"));
 
-  let app = tauri::Builder::default()
+  tauri::Builder::default()
+    .setup(|app| {
+      // a simple http server
+      embed_server(&app.handle());
+
+      // init app config
+      utils::init::init_app(app.package_info());
+      // run clash sidecar
+      let info = utils::clash::run_clash_bin(&app.handle());
+      // update the profile
+      let info_copy = info.clone();
+      tauri::async_runtime::spawn(async move {
+        match put_clash_profile(&info_copy).await {
+          Ok(_) => {}
+          Err(err) => log::error!("failed to put config for `{}`", err),
+        };
+      });
+
+      app.manage(state::VergeConfLock(Arc::new(Mutex::new(read_verge()))));
+      app.manage(state::ClashInfoState(Arc::new(Mutex::new(info))));
+      app.manage(state::ProfileLock::default());
+      Ok(())
+    })
     .system_tray(SystemTray::new().with_menu(menu))
     .on_system_tray_event(move |app, event| match event {
       SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
@@ -83,42 +93,21 @@ fn main() -> std::io::Result<()> {
       cmds::profile::put_profiles,
     ])
     .build(tauri::generate_context!())
-    .expect("error while running tauri application");
-
-  // a simple http server
-  embed_server(&app.handle());
-
-  // init app config
-  utils::init::init_app(app.package_info());
-  // run clash sidecar
-  let info = utils::clash::run_clash_bin(&app.handle());
-  // update the profile
-  let info_copy = info.clone();
-  tauri::async_runtime::spawn(async move {
-    match put_clash_profile(&info_copy).await {
-      Ok(_) => {}
-      Err(err) => log::error!("failed to put config for `{}`", err),
-    };
-  });
-
-  app.manage(state::VergeConfLock(Arc::new(Mutex::new(read_verge()))));
-  app.manage(state::ClashInfoState(Arc::new(Mutex::new(info))));
-  app.manage(state::ProfileLock::default());
-
-  app.run(|app_handle, e| match e {
-    tauri::Event::CloseRequested { label, api, .. } => {
-      let app_handle = app_handle.clone();
-      api.prevent_close();
-      app_handle.get_window(&label).unwrap().hide().unwrap();
-    }
-    tauri::Event::ExitRequested { api, .. } => {
-      api.prevent_exit();
-    }
-    tauri::Event::Exit => {
-      api::process::kill_children();
-    }
-    _ => {}
-  });
+    .expect("error while running tauri application")
+    .run(|app_handle, e| match e {
+      tauri::Event::CloseRequested { label, api, .. } => {
+        let app_handle = app_handle.clone();
+        api.prevent_close();
+        app_handle.get_window(&label).unwrap().hide().unwrap();
+      }
+      tauri::Event::ExitRequested { api, .. } => {
+        api.prevent_exit();
+      }
+      tauri::Event::Exit => {
+        api::process::kill_children();
+      }
+      _ => {}
+    });
 
   Ok(())
 }