From 894fe69285725e02d1cb2536c3a4302404acb16f Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 23 Oct 2022 19:52:30 +0800 Subject: [PATCH] fix flutter upgrade Signed-off-by: 21pages --- flutter/lib/desktop/pages/install_page.dart | 2 +- flutter/windows/runner/main.cpp | 21 +++++----- src/platform/windows.rs | 44 ++++++++++++--------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 73ad8769d..e7bb28813 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -181,7 +181,7 @@ class _InstallPageState extends State with WindowListener { void install() { btnEnabled.value = false; showProgress.value = true; - String args = '--flutter'; + String args = ''; if (startmenu.value) args += ' startmenu'; if (desktopicon.value) args += ' desktopicon'; bind.installInstallMe(options: args, path: controller.text); diff --git a/flutter/windows/runner/main.cpp b/flutter/windows/runner/main.cpp index 66194ed42..fed399c9a 100644 --- a/flutter/windows/runner/main.cpp +++ b/flutter/windows/runner/main.cpp @@ -16,15 +16,6 @@ typedef void (*FUNC_RUSTDESK_FREE_ARGS)( char**, int); int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, _In_ wchar_t *command_line, _In_ int show_command) { - // uni links dispatch - HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"rustdesk"); - if (hwnd != NULL) { - DispatchToUniLinksDesktop(hwnd); - - ::ShowWindow(hwnd, SW_NORMAL); - ::SetForegroundWindow(hwnd); - return EXIT_FAILURE; - } HINSTANCE hInstance = LoadLibraryA("librustdesk.dll"); if (!hInstance) { @@ -56,6 +47,16 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, std::vector rust_args(c_args, c_args + args_len); free_c_args(c_args, args_len); + // uni links dispatch + HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"rustdesk"); + if (hwnd != NULL) { + DispatchToUniLinksDesktop(hwnd); + + ::ShowWindow(hwnd, SW_NORMAL); + ::SetForegroundWindow(hwnd); + return EXIT_FAILURE; + } + // Attach to console when present (e.g., 'flutter run') or create a // new console when running with a debugger. if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) @@ -78,7 +79,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(800, 600); - if (!window.CreateAndShow(L"rustdesk", origin, size)) + if (!window.CreateAndShow(L"RustDesk", origin, size)) { return EXIT_FAILURE; } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 278d79d92..53fb60bd8 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -878,6 +878,25 @@ fn get_install_info_with_subkey(subkey: String) -> (String, String, String, Stri (subkey, path, start_menu, exe) } +pub fn copy_exe_cmd(src_exe: &str, _exe: &str, _path: &str) -> String { + #[cfg(feature = "flutter")] + return format!( + "XCOPY \"{}\" \"{}\" /Y /E /H /C /I /K /R /Z", + PathBuf::from(src_exe) + .parent() + .unwrap() + .to_string_lossy() + .to_string(), + _path + ); + #[cfg(not(feature = "flutter"))] + return format!( + "copy /Y \"{src_exe}\" \"{exe}\"", + src_exe = src_exe, + exe = _exe + ); +} + pub fn update_me() -> ResultType<()> { let (_, path, _, exe) = get_install_info(); let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); @@ -887,13 +906,13 @@ pub fn update_me() -> ResultType<()> { sc stop {app_name} taskkill /F /IM {broker_exe} taskkill /F /IM {app_name}.exe - copy /Y \"{src_exe}\" \"{exe}\" + {copy_exe} \"{src_exe}\" --extract \"{path}\" sc start {app_name} {lic} ", src_exe = src_exe, - exe = exe, + copy_exe = copy_exe_cmd(&src_exe, &exe, &path), broker_exe = crate::ui::win_privacy::INJECTED_PROCESS_EXE, path = path, app_name = crate::get_app_name(), @@ -1038,18 +1057,6 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{start_menu}\\\" app_name = crate::get_app_name(), ); } - let mut flutter_copy = Default::default(); - if options.contains("--flutter") { - flutter_copy = format!( - "XCOPY \"{}\" \"{}\" /Y /E /H /C /I /K /R /Z", - std::env::current_exe()? - .parent() - .unwrap() - .to_string_lossy() - .to_string(), - path - ); - } let meta = std::fs::symlink_metadata(std::env::current_exe()?)?; let size = meta.len() / 1024; @@ -1072,13 +1079,14 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} tmp_path = tmp_path, app_name = crate::get_app_name(), ); + let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_string(); + let cmds = format!( " {uninstall_str} chcp 65001 md \"{path}\" -{flutter_copy} -copy /Y \"{src_exe}\" \"{exe}\" +{copy_exe} copy /Y \"{ORIGIN_PROCESS_EXE}\" \"{path}\\{broker_exe}\" \"{src_exe}\" --extract \"{path}\" reg add {subkey} /f @@ -1111,7 +1119,7 @@ sc delete {app_name} ", uninstall_str=uninstall_str, path=path, - src_exe=std::env::current_exe()?.to_str().unwrap_or(""), + src_exe=src_exe, exe=exe, ORIGIN_PROCESS_EXE = crate::ui::win_privacy::ORIGIN_PROCESS_EXE, broker_exe=crate::ui::win_privacy::INJECTED_PROCESS_EXE, @@ -1140,7 +1148,7 @@ sc delete {app_name} } else { &dels }, - flutter_copy = flutter_copy, + copy_exe = copy_exe_cmd(&src_exe, &exe, &path), ); run_cmds(cmds, debug, "install")?; std::thread::sleep(std::time::Duration::from_millis(2000));