Module Module1 Dim sw As New System.Diagnostics.Stopwatch Sub Main() 'autoupdater oldfile downloadpath Console.BackgroundColor = ConsoleColor.Black Console.Title = "Autoupdater" sw.Start() Try 'log(Environment.CommandLine) If My.Application.CommandLineArgs.Count <> 2 Then log("Incorrect number of arguments used, closing") Exit Sub End If log("Opening temp file for download") Dim tempfile As String = FileIO.FileSystem.GetTempFileName() log("Temp file: " & tempfile) Dim dlstring, oldfile As String oldfile = My.Application.CommandLineArgs(0) dlstring = My.Application.CommandLineArgs(1) If FileIO.FileSystem.FileExists(oldfile) Then oldfile = FileIO.FileSystem.GetFileInfo(oldfile).FullName log("Old file: " & oldfile) Else Throw New Exception("Couldn't find old file") End If Dim processList() As Process Dim runningproc As Process = Nothing processList = Process.GetProcesses For Each x In processList Try If x.MainModule.FileName = oldfile Then log("Old process still running. PID " & x.Id.ToString) runningproc = x log("Waiting 5s for process to exit...") runningproc.WaitForExit(5000) If Not runningproc.HasExited Then log("Process still running, attempting to kill gracefully") runningproc.CloseMainWindow() runningproc.WaitForExit(5000) If Not runningproc.HasExited Then log("Process still running, forcefully terminating") runningproc.Kill() runningproc.WaitForExit(1000) If Not runningproc.HasExited Then Throw New Exception("Could not terminate the process") End If End If End If log("Process exited") runningproc.Close() Exit For End If Catch End Try Next log("Downloading from " & dlstring) Dim wc As New Net.WebClient wc.DownloadFile(dlstring, tempfile) log("New file downloaded, writing over old file") FileIO.FileSystem.WriteAllBytes(oldfile, FileIO.FileSystem.ReadAllBytes(tempfile), False) log("New file written, deleting old file") FileIO.FileSystem.DeleteFile(tempfile) log("Success! Starting new file") System.Diagnostics.Process.Start(oldfile, "-delupdater""" & Process.GetCurrentProcess.MainModule.FileName & """") Catch ex As Exception Console.BackgroundColor = ConsoleColor.Red log(ex.ToString) Console.ReadLine() Exit Sub End Try End Sub Public Sub log(msg As String) Console.ForegroundColor = ConsoleColor.Gray Console.Write("[") Console.ForegroundColor = ConsoleColor.White Console.Write("{0,6:0.000}", sw.Elapsed.TotalSeconds) Console.ForegroundColor = ConsoleColor.Gray Console.WriteLine("] " & msg) End Sub End Module