mirror of
https://github.com/yuzu-emu/liftinstall.git
synced 2024-11-22 12:15:37 +01:00
tasks: uninstall the program as clean as possible
This commit is contained in:
parent
a3f0d0f999
commit
3fc8583646
@ -200,8 +200,10 @@ mod natives {
|
|||||||
.to_str()
|
.to_str()
|
||||||
.log_expect("Unable to convert log path to string")
|
.log_expect("Unable to convert log path to string")
|
||||||
.replace(" ", "\\ ");
|
.replace(" ", "\\ ");
|
||||||
|
|
||||||
|
let install_path = path.to_str().log_expect("Unable to convert path to string").replace(" ", "\\ ");
|
||||||
|
|
||||||
let target_arguments = format!("/C choice /C Y /N /D Y /T 2 & del {} {}", tool, log);
|
let target_arguments = format!("/C choice /C Y /N /D Y /T 2 & del {} {} & rmdir {}", tool, log, install_path);
|
||||||
|
|
||||||
info!("Launching cmd with {:?}", target_arguments);
|
info!("Launching cmd with {:?}", target_arguments);
|
||||||
|
|
||||||
@ -331,7 +333,7 @@ mod natives {
|
|||||||
|
|
||||||
#[cfg(not(windows))]
|
#[cfg(not(windows))]
|
||||||
mod natives {
|
mod natives {
|
||||||
use std::fs::remove_file;
|
use std::fs::{remove_file, remove_dir};
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
@ -421,19 +423,20 @@ mod natives {
|
|||||||
/// Cleans up the installer
|
/// Cleans up the installer
|
||||||
pub fn burn_on_exit(app_name: &str) {
|
pub fn burn_on_exit(app_name: &str) {
|
||||||
let current_exe = env::current_exe().log_expect("Current executable could not be found");
|
let current_exe = env::current_exe().log_expect("Current executable could not be found");
|
||||||
|
let exe_dir = current_exe.parent().log_expect("Current executable directory cannot be found");
|
||||||
|
|
||||||
|
if let Err(e) = remove_file(exe_dir.join(format!("{}_installer.log", app_name))) {
|
||||||
|
// No regular logging now.
|
||||||
|
eprintln!("Failed to delete maintenance log: {:?}", e);
|
||||||
|
};
|
||||||
|
|
||||||
// Thank god for *nix platforms
|
// Thank god for *nix platforms
|
||||||
if let Err(e) = remove_file(¤t_exe) {
|
if let Err(e) = remove_file(¤t_exe) {
|
||||||
// No regular logging now.
|
// No regular logging now.
|
||||||
eprintln!("Failed to delete maintenancetool: {:?}", e);
|
eprintln!("Failed to delete maintenancetool: {:?}", e);
|
||||||
};
|
};
|
||||||
|
// delete the directory if not empty and ignore errors (since we can't handle errors anymore)
|
||||||
let current_dir = env::current_dir().log_expect("Current directory cannot be found");
|
remove_dir(exe_dir).ok();
|
||||||
|
|
||||||
if let Err(e) = remove_file(current_dir.join(format!("{}_installer.log", app_name))) {
|
|
||||||
// No regular logging now.
|
|
||||||
eprintln!("Failed to delete installer log: {:?}", e);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a list of running processes
|
/// Returns a list of running processes
|
||||||
|
@ -44,7 +44,7 @@ impl Task for UninstallPackageTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut package = match metadata {
|
let package = match metadata {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
None => {
|
None => {
|
||||||
if self.optional {
|
if self.optional {
|
||||||
@ -63,9 +63,8 @@ impl Task for UninstallPackageTask {
|
|||||||
0.0,
|
0.0,
|
||||||
));
|
));
|
||||||
|
|
||||||
// Reverse, as to delete directories last
|
let mut directories = Vec::new();
|
||||||
package.files.reverse();
|
|
||||||
|
|
||||||
let max = package.files.len();
|
let max = package.files.len();
|
||||||
for (i, file) in package.files.iter().enumerate() {
|
for (i, file) in package.files.iter().enumerate() {
|
||||||
let name = file.clone();
|
let name = file.clone();
|
||||||
@ -78,7 +77,9 @@ impl Task for UninstallPackageTask {
|
|||||||
));
|
));
|
||||||
|
|
||||||
let result = if file.is_dir() {
|
let result = if file.is_dir() {
|
||||||
remove_dir(file)
|
// we don't delete directory just yet
|
||||||
|
directories.push(file);
|
||||||
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
remove_file(file)
|
remove_file(file)
|
||||||
};
|
};
|
||||||
@ -88,6 +89,17 @@ impl Task for UninstallPackageTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sort directories by reverse depth order
|
||||||
|
directories.sort_by(|a, b| {
|
||||||
|
let depth_a = a.components().fold(0usize, |acc, _| acc + 1);
|
||||||
|
let depth_b = b.components().fold(0usize, |acc, _| acc + 1);
|
||||||
|
depth_b.cmp(&depth_a)
|
||||||
|
});
|
||||||
|
for i in directories.iter() {
|
||||||
|
info!("Deleting directory: {:?}", i);
|
||||||
|
remove_dir(i).ok();
|
||||||
|
}
|
||||||
|
|
||||||
Ok(TaskParamType::None)
|
Ok(TaskParamType::None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user