**Я довольно много изучал** эту проблему, но не нашел решения. Мне нужно запустить двоичные файлы (в Windows .exe) в приложении Tauri GUI. Проблема в том, что когда я делаю это **в режиме dev**, я **не вижу окон** терминалов. Полагаю, это потому, что я запускаю его через терминал(**cargo tauri dev**). Однако в режиме release это так.
Мне нужно решение, чтобы это окно было скрыто или не отображалось. Может быть, мне следует запустить его в отдельном потоке, может быть, следует скрыть его с помощью какой-нибудь команды по идентификатору процесса или даже создать свой собственный минимальный эмулятор терминала. Я действительно понятия не имею, как это исправить. Пожалуйста, помогите мне.
Если вам нужна дополнительная информация, просто скажите мне, и я дам все, что вам нужно.
P.s. Я не могу интегрировать этот исполняемый файл в свой код, потому что он проприетарный и, скорее всего, написан на C++.
Вот что **я попробовал**:
/*
Ничего не сработало
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
#![cfg_attr(windows_subsystem = "windows")]
#![windows_subsystem = "windows"]
*/
fn main() {
<...>
}
Вот мой код:
// src-tauri/main.rs
#![windows_subsystem = "windows"]
mod my_class;
// <...>
#[tauri::command]
fn my_actual_handler(some_var: &str) {
let my_class = MyClass::new(some_var);
my_class.execute();
}
fn main() {
<...>
tauri::Builder::default().handlers(my_actual_handler).run();
}
// src-tauri/my_class.rs
pub struct MyClass {
some_var: String,
child: child: RwLock<Option<Child>>,
}
impl MyClass {
<...>
pub fn execute(&self) {
let child = Command::new(env::current_dir().unwrap().join("my_app.exe"))
.arg("some args")
.arg(
env::current_dir()
.unwrap()
.join("data")
.join(format!("{}.json", "more data")),
)
// .stdout(Stdio::piped()) - уже пробовал, не помогло null() тоже
// .stderr(Stdio::piped()) - уже пробовал, не помогло null() тоже
.spawn()
.expect("ERROR: Failed to start the child process");
/* I Мне нужно сохранять child для того чтобы в будущем его останавливать, если вы знаете способ получше, то скажите пожалуйста*/
let mut child_lock = self.child.write().expect("RwLock write lock failed");
*child_lock = Some(child);
}
}