From 01997704542aa9c49274f0dde91196a99bcbec96 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Nov 2022 20:32:22 +0800 Subject: [PATCH] portable-service: add quick_start feature and ci Signed-off-by: 21pages --- .github/workflows/flutter-nightly.yml | 9 +++++---- Cargo.toml | 1 + build.py | 7 +++++++ src/core_main.rs | 9 ++++++++- src/platform/windows.rs | 7 +++++++ src/server/portable_service.rs | 7 +++++-- 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index f2391e77e..074eafe08 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -15,7 +15,7 @@ env: jobs: build-for-windows: - name: ${{ matrix.job.target }} (${{ matrix.job.os }}) + name: ${{ matrix.job.target }} (${{ matrix.job.os }}) ${{ matrix.job.suffix }} runs-on: ${{ matrix.job.os }} strategy: fail-fast: false @@ -23,7 +23,8 @@ jobs: job: # - { target: i686-pc-windows-msvc , os: windows-2019 } # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc , os: windows-2019 } + - { target: x86_64-pc-windows-msvc , os: windows-2019, suffix: "" , extra-build-args: "" } + - { target: x86_64-pc-windows-msvc , os: windows-2019, suffix: "-qs", extra-build-args: "--quick_start" } steps: - name: Checkout source code uses: actions/checkout@v3 @@ -83,13 +84,13 @@ jobs: shell: bash - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter + run: python3 .\build.py --portable --hwcodec --flutter ${{ matrix.job.extra-build-args }} - name: Rename rustdesk shell: bash run: | for name in rustdesk*??-install.exe; do - mv "$name" "${name%%-install.exe}-${{ matrix.job.target }}.exe" + mv "$name" "${name%%-install.exe}-${{ matrix.job.target }}${{ matrix.job.suffix }}.exe" done - name: Publish Release diff --git a/Cargo.toml b/Cargo.toml index 836bd07d4..44df74952 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ flutter = ["flutter_rust_bridge"] default = ["use_dasp"] hwcodec = ["scrap/hwcodec"] mediacodec = ["scrap/mediacodec"] +quick_start = [] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/build.py b/build.py index c907334ce..a887ff070 100755 --- a/build.py +++ b/build.py @@ -81,6 +81,11 @@ def make_parser(): action='store_true', help='Build windows portable' ) + parser.add_argument( + '--quick_start', + action='store_true', + help='Windows quick start portable' + ) parser.add_argument( '--flatpak', action='store_true', @@ -189,6 +194,8 @@ def get_features(args): features = ['inline'] if windows: features.extend(get_rc_features(args)) + if args.quick_start: + features.append('quick_start') if args.hwcodec: features.append('hwcodec') if args.flutter: diff --git a/src/core_main.rs b/src/core_main.rs index 889015c0d..bd9680ffb 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -81,6 +81,13 @@ pub fn core_main() -> Option> { } } #[cfg(windows)] + #[cfg(feature = "quick_start")] + if !crate::platform::is_installed() && args.is_empty() && !_is_elevate && !_is_run_as_system { + if let Err(e) = crate::portable_service::client::start_portable_service() { + log::error!("Failed to start portable service:{:?}", e); + } + } + #[cfg(windows)] if !crate::platform::is_installed() && (_is_elevate || _is_run_as_system) { crate::platform::elevate_or_run_as_system(click_setup, _is_elevate, _is_run_as_system); return None; @@ -276,7 +283,7 @@ fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option ResultType<()> { pub fn elevate_or_run_as_system(is_setup: bool, is_elevate: bool, is_run_as_system: bool) { // avoid possible run recursively due to failed run. + log::info!( + "elevate:{}->{:?}, run_as_system:{}->{}", + is_elevate, + is_elevated(None), + is_run_as_system, + crate::username(), + ); let arg_elevate = if is_setup { "--noinstall --elevate" } else { diff --git a/src/server/portable_service.rs b/src/server/portable_service.rs index 21b501f1e..64d6c017b 100644 --- a/src/server/portable_service.rs +++ b/src/server/portable_service.rs @@ -406,8 +406,9 @@ pub mod server { Pong => { nack = 0; } - ConnCount(Some(n)) => { - if n == 0 { + ConnCount(Some(_n)) => { + #[cfg(not(feature = "quick_start"))] + if _n == 0 { log::info!("Connnection count equals 0, exit"); stream.send(&Data::DataPortableService(WillClose)).await.ok(); break; @@ -435,6 +436,7 @@ pub mod server { break; } stream.send(&Data::DataPortableService(Ping)).await.ok(); + #[cfg(not(feature = "quick_start"))] stream.send(&Data::DataPortableService(ConnCount(None))).await.ok(); } } @@ -462,6 +464,7 @@ pub mod client { } pub(crate) fn start_portable_service() -> ResultType<()> { + log::info!("start portable service"); if PORTABLE_SERVICE_RUNNING.lock().unwrap().clone() { bail!("already running"); }