summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-03-17 18:27:09 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-03-18 15:40:09 +0100
commitbf6430666e8d292ccf64d9f550b462c1c27608d7 (patch)
tree9c10583206e77a8942df09e2cbceb469dfeade4b
parentdc76f29507b2491385f1dc58ecff1fe96ed019aa (diff)
downloadmullvadvpn-bf6430666e8d292ccf64d9f550b462c1c27608d7.tar.xz
mullvadvpn-bf6430666e8d292ccf64d9f550b462c1c27608d7.zip
Abort uninstaller if prepare-restart fails
-rw-r--r--dist-assets/windows/installer.nsh8
-rw-r--r--mullvad-setup/src/main.rs12
2 files changed, 18 insertions, 2 deletions
diff --git a/dist-assets/windows/installer.nsh b/dist-assets/windows/installer.nsh
index 1e0d8766da..4cf4985362 100644
--- a/dist-assets/windows/installer.nsh
+++ b/dist-assets/windows/installer.nsh
@@ -46,6 +46,7 @@
!define MVSETUP_OK 0
!define MVSETUP_ERROR 1
!define MVSETUP_VERSION_NOT_OLDER 2
+!define MVSETUP_DAEMON_NOT_RUNNING 3
# Override electron-builder generated application settings key.
# electron-builder uses a GUID here rather than the application name.
@@ -916,7 +917,12 @@
Pop $0
Pop $1
- # Ignore any errors -- the command will fail if the daemon is not running
+ ${If} $0 != ${MVSETUP_OK}
+ ${AndIf} $0 != ${MVSETUP_DAEMON_NOT_RUNNING}
+ StrCpy $R0 "Failed to send prepare-restart to service"
+ log::LogWithDetails $R0 $1
+ Goto customRemoveFiles_abort
+ ${EndIf}
${EndIf}
${StopAndDeleteService}
diff --git a/mullvad-setup/src/main.rs b/mullvad-setup/src/main.rs
index 0e9c104db1..45186dd1a7 100644
--- a/mullvad-setup/src/main.rs
+++ b/mullvad-setup/src/main.rs
@@ -19,6 +19,16 @@ enum ExitStatus {
Ok = 0,
Error = 1,
VersionNotOlder = 2,
+ DaemonNotRunning = 3,
+}
+
+impl From<Error> for ExitStatus {
+ fn from(error: Error) -> ExitStatus {
+ match error {
+ Error::RpcConnectionError(_) => ExitStatus::DaemonNotRunning,
+ _ => ExitStatus::Error,
+ }
+ }
}
#[cfg(windows)]
@@ -112,7 +122,7 @@ async fn main() {
if let Err(e) = result {
eprintln!("{}", e.display_chain());
- process::exit(ExitStatus::Error as i32);
+ process::exit(ExitStatus::from(e) as i32);
}
}