public static Process RunUninstaller(this ApplicationUninstallerEntry entry, bool silentIfAvailable, bool simulate) { try { ProcessStartInfo startInfo = null; string fallBack = null; if (silentIfAvailable && entry.QuietUninstallPossible) { // Use supplied quiet uninstaller if any try { startInfo = ProcessTools.SeparateArgsFromCommand(entry.QuietUninstallString).ToProcessStartInfo(); Debug.Assert(!startInfo.FileName.Contains(' ') || File.Exists(startInfo.FileName)); } catch (FormatException) { fallBack = entry.QuietUninstallString; } } else if (entry.UninstallPossible) { // Fall back to the non-quiet uninstaller try { startInfo = ProcessTools.SeparateArgsFromCommand(entry.UninstallString).ToProcessStartInfo(); Debug.Assert(!startInfo.FileName.Contains(' ') || File.Exists(startInfo.FileName)); if (entry.UninstallerKind == UninstallerType.Nsis) { UpdateNsisStartInfo(startInfo, entry.DisplayName); } } catch (FormatException) { fallBack = entry.UninstallString; } } else { // Cant do shit, capt'n throw new InvalidOperationException(Localisation.UninstallError_Nowaytouninstall); } if (simulate) { Thread.Sleep(5000); if (Debugger.IsAttached && new Random().Next(0, 2) == 0) { throw new IOException("Random failure for debugging"); } return(null); } if (fallBack != null) { return(Process.Start(fallBack)); } if (startInfo != null) { startInfo.UseShellExecute = true; return(Process.Start(startInfo)); } // Cant do shit, capt'n throw new InvalidOperationException(Localisation.UninstallError_Nowaytouninstall); } catch (IOException) { throw; } catch (InvalidOperationException) { throw; } catch (Exception ex) { throw new FormatException(ex.Message, ex); } }
public static Process RunUninstaller(this ApplicationUninstallerEntry entry) { return(RunUninstaller(entry, false, false)); }