use firehazard::*;
use firehazard::process::{environment, StartupInfoW};
use abistr::*;
fn main() {
let mut args = std::env::args_os();
let _this_exe = args.next();
let target_exe = args.next().map(std::path::PathBuf::from);
let original = open_thread_desktop(get_current_thread_id()).unwrap();
let desktop_name = cstr16!("examples_ui_switch_desktop");
let desktop = create_desktop_w(desktop_name, (), None, None, access::GENERIC_ALL, None).unwrap();
switch_desktop(&original).expect("unable to switch_desktop to original desktop, that's a bit sketchy");
let child = target_exe.map(|t| {
let args : &[&'static str] = &[];
let mut cmd = argv_to_command_line_0(t, args);
create_process_w((), Some(&mut cmd[..]), None, None, false, None, environment::Inherit, (), &StartupInfoW {
desktop: Some(desktop_name),
..Default::default()
}).unwrap()
});
switch_desktop(&desktop).unwrap();
let process_result = if let Some(child) = child {
wait_for_process(&child.process)
} else {
sleep_ms(3000);
Ok(0)
};
switch_desktop(&original).unwrap();
process_result.unwrap();
}