From 1916c8c271b0e2c09c6fdc7287259eda4c5f4001 Mon Sep 17 00:00:00 2001 From: CW3MH6 Date: Thu, 3 Nov 2022 13:26:21 -0400 Subject: [PATCH] Inline Feature Embedding UI --- README.md | 78 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 16a9337..4214e56 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,28 @@ # rustdesk-customization Some tips for customizing RustDesk for Windows (other platforms might require additional changes) +# Embedding UI / Enable Inline Builds +In order to include the applicatin's UI resources in the executable, you will need to enable the ```inline``` feature. This compiles the application resources (*src/ui*) into the executable so you do not have to deploy them yourself. + +1. Enable ```inline``` feature by editing ```Cargo.toml``` + + Under the ```[features]``` block, find this line + + ``` + default = ["use_dasp"] + ``` + + and change it to read + + ``` + default = ["use_dasp", "inline"] + ``` + +2. Build the UI resources (requires [Python 3](https://www.python.org/downloads/) to be installed) + + Run ```python res/inline-sciter.py``` every time you want to build the UI resources again (i.e. every time you modify the UI) + + If it complains that it cannot find python or the command is unrecognized, you need to install the latest version of [Python 3](https://www.python.org/downloads/) and add it to your PATH environment variable. # Embedding Sciter.dll If you want a single portable executable file, you can either statically link Sciter, or embed the DLL. Statically linking it requires you [license Sciter](https://sciter.com/prices/), which costs money--so I went with embedding the dll. @@ -8,37 +30,37 @@ If you want a single portable executable file, you can either statically link Sc 1. Copy sciter.dll to your project root directory (where Cargo.toml resides) 2. Add the following lines into ```fn main()``` in src/main.rs -``` - let bytes = include_bytes!("..\\sciter.dll"); - fs::write("sciter.dll", bytes.as_slice()); -``` -Note: Do not remove the "..\\" as main.rs resides in */rustdesk/src*, and will not be able to find the file otherwise. Alternatively you can put ```sciter.dll``` in */rustdesk/src* + ``` + let bytes = include_bytes!("..\\sciter.dll"); + fs::write("sciter.dll", bytes.as_slice()); + ``` + Note: Do not remove the "..\\" as main.rs resides in */rustdesk/src*, and will not be able to find the file otherwise. Alternatively you can put ```sciter.dll``` in */rustdesk/src* -The function should now look like so: -``` -#[cfg(not(any(target_os = "android", target_os = "ios", feature = "cli")))] -fn main() { - - //BEGIN CHANGES - //Embed the Sciter.dll file into the exe, and then write it to disk when application starts - println!("================ LOADING SCITER DLLL =================="); - let bytes = include_bytes!("..\\sciter.dll"); //since main.rs is in rustdesk/src, we need to go up one level (to rustdesk) - fs::write("sciter.dll", bytes.as_slice()); - //END CHANGES - - if !common::global_init() { - return; - } + The function should now look like so: + ``` + #[cfg(not(any(target_os = "android", target_os = "ios", feature = "cli")))] + fn main() { - //println!("Key: {}", hbb_common::config::RS_PUB_KEY); - //println!("Password: {}", hbb_common::config::RS_PASS); - //println!("Salt: {}", hbb_common::config::RS_SALT); - if let Some(args) = crate::core_main::core_main().as_mut() { - ui::start(args); + //BEGIN CHANGES + //Embed the Sciter.dll file into the exe, and then write it to disk when application starts + println!("================ LOADING SCITER DLLL =================="); + let bytes = include_bytes!("..\\sciter.dll"); //since main.rs is in rustdesk/src, we need to go up one level (to rustdesk) + fs::write("sciter.dll", bytes.as_slice()); + //END CHANGES + + if !common::global_init() { + return; + } + + //println!("Key: {}", hbb_common::config::RS_PUB_KEY); + //println!("Password: {}", hbb_common::config::RS_PASS); + //println!("Salt: {}", hbb_common::config::RS_SALT); + if let Some(args) = crate::core_main::core_main().as_mut() { + ui::start(args); + } + common::global_clean(); } - common::global_clean(); -} -``` + ``` # Hide Console Window You can toggle the console terminal window by uncommenting line 3 in ```src/main.rs```