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); } } }