diff options
Diffstat (limited to 'runtime/ops/spawn.rs')
-rw-r--r-- | runtime/ops/spawn.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/runtime/ops/spawn.rs b/runtime/ops/spawn.rs index 9286e6d0c..7fe77302a 100644 --- a/runtime/ops/spawn.rs +++ b/runtime/ops/spawn.rs @@ -17,6 +17,8 @@ use serde::Deserialize; use serde::Serialize; use std::borrow::Cow; use std::cell::RefCell; +#[cfg(windows)] +use std::os::windows::process::CommandExt; use std::process::ExitStatus; use std::rc::Rc; @@ -55,6 +57,8 @@ pub struct SpawnArgs { gid: Option<u32>, #[cfg(unix)] uid: Option<u32>, + #[cfg(windows)] + windows_raw_arguments: bool, #[serde(flatten)] stdio: ChildStdio, @@ -131,6 +135,17 @@ fn create_command( .check(&args.cmd, Some(api_name))?; let mut command = std::process::Command::new(args.cmd); + + #[cfg(windows)] + if args.windows_raw_arguments { + for arg in args.args.iter() { + command.raw_arg(arg); + } + } else { + command.args(args.args); + } + + #[cfg(not(windows))] command.args(args.args); if let Some(cwd) = args.cwd { |