diff --git a/src/components/layout/update-dialog.tsx b/src/components/layout/update-dialog.tsx
index 3111982b825b09143c36fb0cfe923f14df081831..e45383ada1c50499b4e39b09e5ec805499720165 100644
--- a/src/components/layout/update-dialog.tsx
+++ b/src/components/layout/update-dialog.tsx
@@ -1,7 +1,5 @@
 import useSWR from "swr";
 import { useState } from "react";
-import { checkUpdate, installUpdate } from "@tauri-apps/api/updater";
-import { relaunch } from "@tauri-apps/api/process";
 import {
   Button,
   Dialog,
@@ -10,7 +8,10 @@ import {
   DialogContentText,
   DialogTitle,
 } from "@mui/material";
-import { killSidecars } from "../../services/cmds";
+import { relaunch } from "@tauri-apps/api/process";
+import { checkUpdate, installUpdate } from "@tauri-apps/api/updater";
+import { killSidecars, restartSidecar } from "../../services/cmds";
+import Notice from "../base/base-notice";
 
 interface Props {
   open: boolean;
@@ -29,18 +30,19 @@ const UpdateDialog = (props: Props) => {
   const [uploading, setUploading] = useState(uploadingState);
 
   const onUpdate = async () => {
+    setUploading(true);
+    uploadingState = true;
+
     try {
-      setUploading(true);
-      uploadingState = true;
       await killSidecars();
       await installUpdate();
       await relaunch();
-    } catch (error) {
-      console.log(error);
-      window.alert("Failed to upload, please try again.");
+    } catch (err: any) {
+      await restartSidecar();
+      Notice.error(err?.message || err.toString());
     } finally {
-      setUploading(true);
-      uploadingState = true;
+      setUploading(false);
+      uploadingState = false;
     }
   };