private static void InstallAndRunNewVersion() {
/* will be replaced this file */
var originalFilename = MainExecutingFile.Location.ApartFromLast(UpdatePostfix, StringComparison.OrdinalIgnoreCase) + ExecutableExtension;
/* if file already exists */
if (File.Exists(originalFilename)) {
/* ten attempts, five seconds */
for (var i = 0; i < 10; i++) {
try {
File.Delete(originalFilename);
break;
} catch (Exception) {
Thread.Sleep(500);
}
}
/* if we couldn’t delete file normally, let’s kill any process with this name */
if (File.Exists(originalFilename)) {
try {
foreach (var process in Process.GetProcessesByName(Path.GetFileName(originalFilename))) {
process.Kill();
}
} catch (Exception) {
// ignored
}
/* four attempts, two seconds */
for (var i = 0; i < 4; i++) {
try {
File.Delete(originalFilename);
} catch (Exception) {
Thread.Sleep(500);
}
}
}
if (File.Exists(originalFilename)) {
MessageBox.Show(
string.Format(ToolsStrings.AppUpdater_CannotUpdate_HelpNeeded, Path.GetFileName(originalFilename),
Path.GetFileName(MainExecutingFile.Location)),
ToolsStrings.AppUpdater_UpdateFailed, MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
}
File.Copy(MainExecutingFile.Location, originalFilename);
ProcessExtension.Start(originalFilename, Environment.GetCommandLineArgs().Skip(1));
Environment.Exit(0);
}