diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index ce4b68ae0..880d80baa 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -812,6 +812,8 @@ void showRequestElevationDialog( } else { bind.sessionElevateDirect(sessionId: sessionId); } + close(); + showWaitUacDialog(sessionId, dialogManager, "wait-uac"); } return CustomAlertDialog( diff --git a/src/server/connection.rs b/src/server/connection.rs index df3b2c8eb..a0f05c43a 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1891,42 +1891,17 @@ impl Connection { } } } + #[cfg(windows)] Some(misc::Union::ElevationRequest(r)) => match r.union { Some(elevation_request::Union::Direct(_)) => { - #[cfg(windows)] - { - let mut err = "No need to elevate".to_string(); - if !crate::platform::is_installed() && !portable_client::running() { - err = portable_client::start_portable_service( - portable_client::StartPara::Direct, - ) - .err() - .map_or("".to_string(), |e| e.to_string()); - } - let mut misc = Misc::new(); - misc.set_elevation_response(err); - let mut msg = Message::new(); - msg.set_misc(misc); - self.send(msg).await; - } + self.handle_elevation_request(portable_client::StartPara::Direct) + .await; } - Some(elevation_request::Union::Logon(_r)) => { - #[cfg(windows)] - { - let mut err = "No need to elevate".to_string(); - if !crate::platform::is_installed() && !portable_client::running() { - err = portable_client::start_portable_service( - portable_client::StartPara::Logon(_r.username, _r.password), - ) - .err() - .map_or("".to_string(), |e| e.to_string()); - } - let mut misc = Misc::new(); - misc.set_elevation_response(err); - let mut msg = Message::new(); - msg.set_misc(misc); - self.send(msg).await; - } + Some(elevation_request::Union::Logon(r)) => { + self.handle_elevation_request(portable_client::StartPara::Logon( + r.username, r.password, + )) + .await; } _ => {} }, @@ -2009,6 +1984,21 @@ impl Connection { true } + #[cfg(windows)] + async fn handle_elevation_request(&mut self, para: portable_client::StartPara) { + let mut err = "No need to elevate".to_string(); + if !crate::platform::is_installed() && !portable_client::running() { + err = portable_client::start_portable_service(para) + .err() + .map_or("".to_string(), |e| e.to_string()); + } + let mut misc = Misc::new(); + misc.set_elevation_response(err); + let mut msg = Message::new(); + msg.set_misc(misc); + self.send(msg).await; + } + #[cfg(not(any(target_os = "android", target_os = "ios")))] fn change_resolution(&mut self, r: &Resolution) { if self.keyboard {