diff --git a/src/config.rs b/src/config.rs index 148324d..255fa45 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,5 @@ use std::fmt::Display; +use std::path::PathBuf; pub const HELP_MESSAGE: &str = r#"call [options] [--] [arguments] Options: @@ -6,7 +7,6 @@ Options: --show Show console window --chdir Change working directory to lib (default) --chdir=xxx Change working directory to xxx - --dir=xxx Working directory is xxx --bin=xxx Specify executable file --config=xxx Specify configuration file --help Print this help message @@ -15,9 +15,8 @@ Options: #[derive(Clone)] pub struct Config { pub show_console: bool, - pub chdir: Option, - pub bin: Option, - pub dir: Option, + pub chdir: Option, + pub bin: PathBuf, pub config: Option, pub bin_arg: String, } @@ -29,7 +28,6 @@ impl Display for Config { s.push_str(&format!(" show_console: {}\n", self.show_console)); s.push_str(&format!(" chdir: {:?}\n", self.chdir)); s.push_str(&format!(" bin: {:?}\n", self.bin)); - s.push_str(&format!(" dir: {:?}\n", self.dir)); s.push_str(&format!(" config: {:?}\n", self.config)); s.push_str(&format!(" bin_arg: {:?}\n", self.bin_arg)); s.push_str("}"); @@ -42,7 +40,7 @@ impl Config { let mut show_console = false; let mut chdir: Option = None; let mut bin: Option = None; - let mut dir: Option = None; + let dir: Option = None; let mut config: Option = None; let mut bin_arg = "".to_string(); // -- 表示后面的参数都是可执行文件的参数 @@ -68,7 +66,6 @@ impl Config { // --show 表示显示控制台 // --chdir 表示切换工作目录 // --chdir=xxx 表示切换工作目录到xxx - // --dir=xxx 表示工作目录是xxx // --bin=xxx 表示指定可执行文件 // --config=xxx 表示指定配置文件 // --help 输出上面这一堆东西 @@ -81,19 +78,23 @@ impl Config { show_console = true; } else if args[i].starts_with("--chdir=") { chdir = Some(args[i][8..].to_string()); - } else if args[i].starts_with("--dir=") { - dir = Some(args[i][6..].to_string()); } else if args[i].starts_with("--bin=") { bin = Some(args[i][6..].to_string()); } else if args[i].starts_with("--config=") { config = Some(args[i][9..].to_string()); } } + // 拼接上 dir + let bin = if let Some(dir) = dir { + PathBuf::from(dir).join(bin.unwrap_or("main".to_string())) + } else { + PathBuf::from(bin.unwrap_or("./lib/main".to_string())) + }; + let chdir = chdir.map(|x| PathBuf::from(x)); Some(Config { show_console, chdir, bin, - dir, config, bin_arg, }) diff --git a/src/main.rs b/src/main.rs index 223460c..46690a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,4 @@ -#![windows_subsystem = "windows"] - -use std::process::Command; +// #![windows_subsystem = "windows"] #[cfg(windows)] mod win; @@ -20,25 +18,4 @@ fn main() { // 输出相关信息 println!("call {}", VERSION); println!("config: {}", config); - if config.show_console { - win::show_window(); - } else { - win::hide_window(); - } - if config.chdir.is_some() { - std::env::set_current_dir(config.chdir.unwrap()).unwrap(); - } - if config.dir.is_some() { - std::env::set_current_dir(config.dir.unwrap()).unwrap(); - } - if config.config.is_some() { - std::env::set_current_dir(config.config.unwrap()).unwrap(); - } - if config.bin.is_some() { - let mut cmd = Command::new(config.bin.unwrap()); - if config.bin_arg.len() > 0 { - cmd.arg(config.bin_arg); - } - cmd.spawn().unwrap(); - } }