Merge pull request #4550 from fufesou/refact/win_uninstall_cert

Refact/win uninstall cert
This commit is contained in:
RustDesk 2023-06-05 15:27:33 +08:00 committed by GitHub
commit bad343adac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 4 deletions

View File

@ -151,6 +151,10 @@ pub fn core_main() -> Option<Vec<String>> {
#[cfg(windows)]
hbb_common::allow_err!(crate::platform::windows::install_cert(&args[1]));
return None;
} else if args[0] == "--uninstall-cert" {
#[cfg(windows)]
hbb_common::allow_err!(crate::platform::windows::uninstall_cert());
return None;
} else if args[0] == "--portable-service" {
crate::platform::elevate_or_run_as_system(
click_setup,

View File

@ -1245,10 +1245,18 @@ fn get_before_uninstall(kill_self: bool) -> String {
}
fn get_uninstall(kill_self: bool) -> String {
let mut uninstall_cert_cmd = "".to_string();
if let Ok(exe) = std::env::current_exe() {
if let Some(exe_path) = exe.to_str() {
uninstall_cert_cmd = format!("\"{}\" --uninstall-cert", exe_path);
}
}
let (subkey, path, start_menu, _, _) = get_install_info();
format!(
"
{before_uninstall}
{uninstall_cert_cmd}
reg delete {subkey} /f
if exist \"{path}\" rd /s /q \"{path}\"
if exist \"{start_menu}\" rd /s /q \"{start_menu}\"
@ -1256,6 +1264,7 @@ fn get_uninstall(kill_self: bool) -> String {
if exist \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\" del /f /q \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\"
",
before_uninstall=get_before_uninstall(kill_self),
uninstall_cert_cmd = uninstall_cert_cmd,
subkey=subkey,
app_name = crate::get_app_name(),
path = path,
@ -1264,7 +1273,6 @@ fn get_uninstall(kill_self: bool) -> String {
}
pub fn uninstall_me(kill_self: bool) -> ResultType<()> {
allow_err!(cert::uninstall_certs());
run_cmds(get_uninstall(kill_self), true, "uninstall")
}
@ -1901,7 +1909,11 @@ pub fn current_resolution(name: &str) -> ResultType<Resolution> {
}
}
pub(super) fn change_resolution_directly(name: &str, width: usize, height: usize) -> ResultType<()> {
pub(super) fn change_resolution_directly(
name: &str,
width: usize,
height: usize,
) -> ResultType<()> {
let device_name = str_to_device_name(name);
unsafe {
let mut dm: DEVMODEW = std::mem::zeroed();
@ -1956,6 +1968,11 @@ pub fn install_cert(cert_file: &str) -> ResultType<()> {
Ok(())
}
#[inline]
pub fn uninstall_cert() -> ResultType<()> {
cert::uninstall_cert()
}
mod cert {
use hbb_common::{allow_err, bail, log, ResultType};
use std::{path::Path, str::from_utf8};
@ -2096,7 +2113,7 @@ mod cert {
Ok(thumbprints)
}
pub fn uninstall_certs() -> ResultType<()> {
pub fn uninstall_cert() -> ResultType<()> {
let thumbprints = get_thumbprints_to_rm()?;
let reg_cert_key = unsafe { open_reg_cert_store()? };
for thumbprint in thumbprints.iter() {
@ -2176,7 +2193,7 @@ mod tests {
#[test]
fn test_uninstall_cert() {
println!("uninstall driver certs: {:?}", cert::uninstall_certs());
println!("uninstall driver certs: {:?}", cert::uninstall_cert());
}
#[test]