public static void updateCheckMain(ProgressReporterDialogue frmProgressReporter) { var t = Type.GetType("Mono.Runtime"); MONO = (t != null); try { if (dobeta) { CheckMD5(frmProgressReporter, ConfigurationManager.AppSettings["BetaUpdateLocationMD5"].ToString()); } else { CheckMD5(frmProgressReporter, ConfigurationManager.AppSettings["UpdateLocationMD5"].ToString()); } var process = new Process(); string exePath = Path.GetDirectoryName(Application.ExecutablePath); if (MONO) { process.StartInfo.FileName = "mono"; process.StartInfo.Arguments = " \"" + exePath + Path.DirectorySeparatorChar + "Updater.exe\"" + " \"" + Application.ExecutablePath + "\""; } else { process.StartInfo.FileName = exePath + Path.DirectorySeparatorChar + "Updater.exe"; process.StartInfo.Arguments = Application.ExecutablePath; } try { foreach (string newupdater in Directory.GetFiles(exePath, "Updater.exe*.new")) { File.Copy(newupdater, newupdater.Remove(newupdater.Length - 4), true); File.Delete(newupdater); } } catch (Exception ex) { log.Error("Exception during update", ex); } if (frmProgressReporter != null) { frmProgressReporter.UpdateProgressAndStatus(-1, "Starting Updater"); } log.Info("Starting new process: " + process.StartInfo.FileName + " with " + process.StartInfo.Arguments); process.Start(); log.Info("Quitting existing process"); frmProgressReporter.BeginInvoke((Action) delegate { Application.Exit(); }); } catch (Exception ex) { log.Error("Update Failed", ex); CustomMessageBox.Show("Update Failed " + ex.Message); } }