From d4520eef0cebeba8db65c4644be48f55ec0c7ce9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Jan 2025 11:48:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9F=90=E4=BA=9B=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B'=E4=BB=A5=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E5=90=AF=E5=8A=A8'=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96'=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE'=E6=97=B6'=E4=BB=A5=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E8=BF=90=E8=A1=8C'=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/main/item/index.ts | 3 +++ rust/lib.rs | 2 +- rust/windows.rs | 9 ++++++++- src/pages/item/AddEdit.vue | 11 +---------- src/pages/item/components/List.vue | 4 ++-- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/electron/main/item/index.ts b/electron/main/item/index.ts index cab1be2..e626875 100644 --- a/electron/main/item/index.ts +++ b/electron/main/item/index.ts @@ -327,6 +327,9 @@ function run( item: Item ) { if (item.data) { + if (operation === "open" && item.data.runAsAdmin) { + operation = "runas"; + } // 更新打开信息 updateOpenInfo(type, item.id); // 判断类型 diff --git a/rust/lib.rs b/rust/lib.rs index 2203d97..db16e27 100644 --- a/rust/lib.rs +++ b/rust/lib.rs @@ -208,5 +208,5 @@ fn system_item_execute(target: String, params: Option) { #[allow(dead_code)] #[napi] fn has_runas(path: String) -> bool { - windows::has_runas(&path) + windows::has_runas(path) } diff --git a/rust/windows.rs b/rust/windows.rs index 3a47d1a..98f7e78 100644 --- a/rust/windows.rs +++ b/rust/windows.rs @@ -722,6 +722,13 @@ pub fn shell_execute( start_location: Option, ) { thread::spawn(move || { + let mut operation = operation; + // 判断是否是runas,如果是的话,需要判断文件是否有以管理员身份运行的权限,如果没有改为open + if operation == "runas" { + if !has_runas(file.clone()) { + operation = String::from("open"); + } + } // dir let dir = start_location.unwrap_or_else(|| { // 判断是否是文件夹 @@ -793,7 +800,7 @@ pub fn system_item_execute(target: &str, params: Option<&str>) { /** * 判断文件是否有以管理员身份运行权限 */ -pub fn has_runas(path: &str) -> bool { +pub fn has_runas(path: String) -> bool { // IShellItem let path = HSTRING::from(path); if let Ok(shell_item) = diff --git a/src/pages/item/AddEdit.vue b/src/pages/item/AddEdit.vue index 7fdc4b0..cd4059b 100644 --- a/src/pages/item/AddEdit.vue +++ b/src/pages/item/AddEdit.vue @@ -329,9 +329,7 @@ v-if=" selectedMenuId === 0 && form.data.target && - form.data.target.trim() !== '' && - (getFileExtname(form.data.target) === 'exe' || - getFileExtname(form.data.target) === 'bat') + form.data.target.trim() !== '' " v-model:checked="form.data.runAsAdmin" :focusable="false" @@ -459,7 +457,6 @@ import { isAbsolutePath, deleteExtname, getFileName, - getFileExtname, } from "../../../commons/utils/common"; import SystemItemList from "./components/SystemItemList.vue"; import StartMenuItemList from "./components/StartMenuItemList.vue"; @@ -656,12 +653,6 @@ async function confirm() { if (!success) { return; } - // 后缀 - let ext = getFileExtname(form.data.target); - // 如果选中按管理员运行,但是文件类型不是exe和bat就修改为false - if (form.data.runAsAdmin && (!ext || (ext !== "exe" && ext !== "bat"))) { - form.data.runAsAdmin = false; - } if (!id) { // 添加 await addItem(); diff --git a/src/pages/item/components/List.vue b/src/pages/item/components/List.vue index e56bd67..e8148a5 100644 --- a/src/pages/item/components/List.vue +++ b/src/pages/item/components/List.vue @@ -240,9 +240,9 @@ function runItem(e: any, dbclick: boolean) { let item = getItemById(itemId); if (item && item.data) { if (dbclick && store.setting.item.doubleClickOpen) { - run("main", item.data.runAsAdmin ? "runas" : "open", item); + run("main", "open", item); } else if (!dbclick && !store.setting.item.doubleClickOpen) { - run("main", item.data.runAsAdmin ? "runas" : "open", item); + run("main", "open", item); } } }