From 37a389e396336c65e12fe3c451a7ec0e073b1400 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 27 May 2022 16:44:15 +0800 Subject: [PATCH] Dev-build-windows. Build with simple_rc, which is a library to pack resource files. Signed-off-by: fufesou --- content/dev/build/windows/_index.en.md | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/content/dev/build/windows/_index.en.md b/content/dev/build/windows/_index.en.md index 2c24f4b..2b6ac3d 100644 --- a/content/dev/build/windows/_index.en.md +++ b/content/dev/build/windows/_index.en.md @@ -42,6 +42,8 @@ rust-bindgen depends on clang, download [llvm](https://github.com/llvm/llvm-pro ## Build +### Default + ```sh git clone https://github.com/rustdesk/rustdesk cd rustdesk @@ -50,3 +52,82 @@ mv sciter.dll target/debug cargo run ``` +### Pack resource files + +Rustdesk can pack resource files in one exe file. +Then extract files to the installation directory when being installed. + +This design makes rustdesk run both simple mode(single exe file) and full mode(all files after been installed). + +To pack resource files, follow the steps: +1. cd rustdesk +2. mkdir `resources` directory +3. put files to `resources` +4. cargo build --features with_rc, + +Feature `with_rc` is introduced to pack and extract resource files. + +#### Lib `simple_rc` + +A lib named `simple_rc` is used to pack and extract resource files. + +##### Generate resource packed file +The pack process workflow: +1. Parse the specified directory tree. +2. Exclude specified files. +3. Read all file contents, save as byte arrays in source file(`rc.rs`), and remember file names. + +`simple_rc` accepts either a configuration file or a `Config` structure. + +1. Generate resource packed with configuration file. +``` +fn generate(conf_file: &str) -> ResultType<()> +``` +``` +# The output source file +outfile = "src/rc.rs" + +# The resource config list. +[[confs]] +# The file or director to integrate. +inc = "D:/projects/windows/RustDeskTempTopMostWindow/x64/Release/xxx" +# The exclusions. +exc = ["*.dll", "*.exe"] +# The front path that will ignore for extracting. +# ${OutputPath} = ${InstallDir} + (${inc} - ${suppressed_front}) +# The following config will make base output path to be "RustDeskTempTopMostWindow/x64/Release/xxx". +suppressed_front = "D:/projects/windows" +``` + +2. Generate resource packed file with a `Config` structure: +``` +fn generate_with_conf<'a>(conf: &'a Config) -> ResultType<()> + +... + generate_with_conf(&Config { + outfile: "src/rc.rs".to_owned(), + confs: vec![ConfigItem { + inc: "resources".to_owned(), + exc: vec![], + suppressed_front: "resources".to_owned(), + }], + }) + .unwrap(); +... +``` + +##### Extract files + +Extraction will keep the resource direcotry tree. + +The extraction process workflow: +1. Create directory if needed, to restore the directory tree. +2. Write contents to the associated file names. + +``` +fn extract_resources(root_path: &str) -> ResultType<()> +``` + +##### Note + +File attributes like privileges, create time, owner, are not supported.