|
@@ -23,7 +23,7 @@ use shared_child::SharedChild;
|
|
|
use tauri_utils::platform;
|
|
|
|
|
|
/// Payload for the `Terminated` command event.
|
|
|
-#[derive(Serialize)]
|
|
|
+#[derive(Debug, Clone, Serialize)]
|
|
|
pub struct TerminatedPayload {
|
|
|
/// Exit code of the process.
|
|
|
pub code: Option<i32>,
|
|
@@ -32,7 +32,7 @@ pub struct TerminatedPayload {
|
|
|
}
|
|
|
|
|
|
/// A event sent to the command callback.
|
|
|
-#[derive(Serialize)]
|
|
|
+#[derive(Debug, Clone, Serialize)]
|
|
|
#[serde(tag = "event", content = "payload")]
|
|
|
pub enum CommandEvent {
|
|
|
/// Stderr line.
|
|
@@ -88,6 +88,30 @@ impl CommandChild {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[cfg(not(windows))]
|
|
|
+fn relative_command_path(command: String) -> crate::Result<String> {
|
|
|
+ match std::env::current_exe()?.parent() {
|
|
|
+ Some(exe_dir) => Ok(format!(
|
|
|
+ "{}/{}",
|
|
|
+ exe_dir.to_string_lossy().to_string(),
|
|
|
+ command
|
|
|
+ )),
|
|
|
+ None => Err(super::Error::Command("Could not evaluate executable dir".to_string()).into()),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#[cfg(windows)]
|
|
|
+fn relative_command_path(command: String) -> crate::Result<String> {
|
|
|
+ match std::env::current_exe()?.parent() {
|
|
|
+ Some(exe_dir) => Ok(format!(
|
|
|
+ "{}/{}.exe",
|
|
|
+ exe_dir.to_string_lossy().to_string(),
|
|
|
+ command
|
|
|
+ )),
|
|
|
+ None => Err(super::Error::Command("Could not evaluate executable dir".to_string()).into()),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
impl Command {
|
|
|
/// Creates a new Command for launching the given program.
|
|
|
pub fn new<S: Into<String>>(program: S) -> Self {
|
|
@@ -98,12 +122,13 @@ impl Command {
|
|
|
}
|
|
|
|
|
|
/// Creates a new Command for launching the given sidecar program.
|
|
|
- pub fn new_sidecar<S: Into<String>>(program: S) -> Self {
|
|
|
- Self::new(format!(
|
|
|
+ pub fn new_sidecar<S: Into<String>>(program: S) -> crate::Result<Self> {
|
|
|
+ let program = format!(
|
|
|
"{}-{}",
|
|
|
program.into(),
|
|
|
platform::target_triple().expect("unsupported platform")
|
|
|
- ))
|
|
|
+ );
|
|
|
+ Ok(Self::new(relative_command_path(program)?))
|
|
|
}
|
|
|
|
|
|
/// Append args to the command.
|