fix flutter upgrade
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
		
							parent
							
								
									d48a94e530
								
							
						
					
					
						commit
						894fe69285
					
				| @ -181,7 +181,7 @@ class _InstallPageState extends State<InstallPage> with WindowListener { | |||||||
|   void install() { |   void install() { | ||||||
|     btnEnabled.value = false; |     btnEnabled.value = false; | ||||||
|     showProgress.value = true; |     showProgress.value = true; | ||||||
|     String args = '--flutter'; |     String args = ''; | ||||||
|     if (startmenu.value) args += ' startmenu'; |     if (startmenu.value) args += ' startmenu'; | ||||||
|     if (desktopicon.value) args += ' desktopicon'; |     if (desktopicon.value) args += ' desktopicon'; | ||||||
|     bind.installInstallMe(options: args, path: controller.text); |     bind.installInstallMe(options: args, path: controller.text); | ||||||
|  | |||||||
| @ -16,15 +16,6 @@ typedef void (*FUNC_RUSTDESK_FREE_ARGS)( char**, int); | |||||||
| int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, | ||||||
|                       _In_ wchar_t *command_line, _In_ int show_command) |                       _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"); |   HINSTANCE hInstance = LoadLibraryA("librustdesk.dll"); | ||||||
|   if (!hInstance) |   if (!hInstance) | ||||||
|   { |   { | ||||||
| @ -56,6 +47,16 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, | |||||||
|   std::vector<std::string> rust_args(c_args, c_args + args_len); |   std::vector<std::string> rust_args(c_args, c_args + args_len); | ||||||
|   free_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
 |   // Attach to console when present (e.g., 'flutter run') or create a
 | ||||||
|   // new console when running with a debugger.
 |   // new console when running with a debugger.
 | ||||||
|   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) |   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) | ||||||
| @ -78,7 +79,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, | |||||||
|   FlutterWindow window(project); |   FlutterWindow window(project); | ||||||
|   Win32Window::Point origin(10, 10); |   Win32Window::Point origin(10, 10); | ||||||
|   Win32Window::Size size(800, 600); |   Win32Window::Size size(800, 600); | ||||||
|   if (!window.CreateAndShow(L"rustdesk", origin, size)) |   if (!window.CreateAndShow(L"RustDesk", origin, size)) | ||||||
|   { |   { | ||||||
|     return EXIT_FAILURE; |     return EXIT_FAILURE; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -878,6 +878,25 @@ fn get_install_info_with_subkey(subkey: String) -> (String, String, String, Stri | |||||||
|     (subkey, path, start_menu, exe) |     (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<()> { | pub fn update_me() -> ResultType<()> { | ||||||
|     let (_, path, _, exe) = get_install_info(); |     let (_, path, _, exe) = get_install_info(); | ||||||
|     let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); |     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} |         sc stop {app_name} | ||||||
|         taskkill /F /IM {broker_exe} |         taskkill /F /IM {broker_exe} | ||||||
|         taskkill /F /IM {app_name}.exe |         taskkill /F /IM {app_name}.exe | ||||||
|         copy /Y \"{src_exe}\" \"{exe}\" |         {copy_exe} | ||||||
|         \"{src_exe}\" --extract \"{path}\" |         \"{src_exe}\" --extract \"{path}\" | ||||||
|         sc start {app_name} |         sc start {app_name} | ||||||
|         {lic} |         {lic} | ||||||
|     ",
 |     ",
 | ||||||
|         src_exe = src_exe, |         src_exe = src_exe, | ||||||
|         exe = exe, |         copy_exe = copy_exe_cmd(&src_exe, &exe, &path), | ||||||
|         broker_exe = crate::ui::win_privacy::INJECTED_PROCESS_EXE, |         broker_exe = crate::ui::win_privacy::INJECTED_PROCESS_EXE, | ||||||
|         path = path, |         path = path, | ||||||
|         app_name = crate::get_app_name(), |         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(), |             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 meta = std::fs::symlink_metadata(std::env::current_exe()?)?; | ||||||
|     let size = meta.len() / 1024; |     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, |         tmp_path = tmp_path, | ||||||
|         app_name = crate::get_app_name(), |         app_name = crate::get_app_name(), | ||||||
|     ); |     ); | ||||||
|  |     let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_string(); | ||||||
|  | 
 | ||||||
|     let cmds = format!( |     let cmds = format!( | ||||||
|         " |         " | ||||||
| {uninstall_str} | {uninstall_str} | ||||||
| chcp 65001 | chcp 65001 | ||||||
| md \"{path}\" | md \"{path}\" | ||||||
| {flutter_copy} | {copy_exe} | ||||||
| copy /Y \"{src_exe}\" \"{exe}\" |  | ||||||
| copy /Y \"{ORIGIN_PROCESS_EXE}\" \"{path}\\{broker_exe}\" | copy /Y \"{ORIGIN_PROCESS_EXE}\" \"{path}\\{broker_exe}\" | ||||||
| \"{src_exe}\" --extract \"{path}\" | \"{src_exe}\" --extract \"{path}\" | ||||||
| reg add {subkey} /f | reg add {subkey} /f | ||||||
| @ -1111,7 +1119,7 @@ sc delete {app_name} | |||||||
|     ",
 |     ",
 | ||||||
|         uninstall_str=uninstall_str, |         uninstall_str=uninstall_str, | ||||||
|         path=path, |         path=path, | ||||||
|         src_exe=std::env::current_exe()?.to_str().unwrap_or(""), |         src_exe=src_exe, | ||||||
|         exe=exe, |         exe=exe, | ||||||
|         ORIGIN_PROCESS_EXE = crate::ui::win_privacy::ORIGIN_PROCESS_EXE, |         ORIGIN_PROCESS_EXE = crate::ui::win_privacy::ORIGIN_PROCESS_EXE, | ||||||
|         broker_exe=crate::ui::win_privacy::INJECTED_PROCESS_EXE, |         broker_exe=crate::ui::win_privacy::INJECTED_PROCESS_EXE, | ||||||
| @ -1140,7 +1148,7 @@ sc delete {app_name} | |||||||
|         } else { |         } else { | ||||||
|             &dels |             &dels | ||||||
|         }, |         }, | ||||||
|         flutter_copy = flutter_copy, |         copy_exe = copy_exe_cmd(&src_exe, &exe, &path), | ||||||
|     ); |     ); | ||||||
|     run_cmds(cmds, debug, "install")?; |     run_cmds(cmds, debug, "install")?; | ||||||
|     std::thread::sleep(std::time::Duration::from_millis(2000)); |     std::thread::sleep(std::time::Duration::from_millis(2000)); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user