Ich habe Code zur Ausführung zur Laufzeit unter Verwendung Form1_Load
der Code ist eine einfache Assembly überprüfen, um festzustellen, ob die Version niedriger ist als eine auf einem Server durch Webclient erhalten Version. Von dort aus, wenn seine untere es lädt die neueste EXE und verwendet CMD es umbenennen und es mit dem alten Exe zu ersetzen (Irgendwie funktioniert es während der Anwendung geöffnet ist)VB.NET - Auto-Update-Anwendungen während es geöffnet ist?
Die Themen:
Es macht Falsche Anti-Virus-Erkennungen, die versuchen, andere Apps zu infizieren (Trojan Dropper Variant)
Es ist in einigen Fällen nicht wirksam (Beispiel: Der Benutzer lädt die App zum ersten Mal herunter und benennt sie in etwas anderes als die Standard-EXE um Name, dann Boom wird es nicht effizient arbeiten)
CMD e.t.c ist nicht einmal kann
wie Schule PC auf einigen Maschinen arbeitenEs ist einfach in der Regel keine gute Idee, CMD zu verwenden.
Was ich will nicht als Lösung tun:
einen zweiten Exe-Anwendung mit ihrem einzigen Zweck ist es, die Anwendung der Aktualisierung;
CMD Duh
Atleast versuchen, nicht Nuget Packages/externe Referenzen aus .dll
nicht seinem Code, der nur Updates zu verwenden, wenn der Benutzer auf Ja/OK auf einem MessageBox etc
Was kann ich tun, um dieses Problem der Verwendung von CMD zu lösen?
Mein aktueller Code:
#Region "Update Checker"
#Region "Test Internet Connection"
'Ping Google to see if the user has Internet Connected;
Private Function TestInternetConnection() As Boolean
Try
Dim ping As New Net.NetworkInformation.Ping()
ping.Send("google.com")
Return True
Catch ex As Exception
Return False
End Try
End Function
#End Region
#Region "Check for an Update"
Private Sub CheckForUpdate()
'If the user is Connected to the Internet;
If TestInternetConnection() Then
Try
'Using WebClient, get the Newest File Version;
Using wc As New WebClient
'Latest Version;
Dim LatestVersion As String = wc.DownloadString("http://proxyfuel.xyz/version.txt")
'If the Latest Version is Newer then the Current Version;
If LatestVersion > Application.ProductVersion Then
'Download the Latest Version of the EXE file;
wc.DownloadFile("{Application EXE Direct Link}", Application.StartupPath & "\update.exe")
'Execute the CMD Batch File to replace the old EXE file with the Newest EXE file;
Process.Start(New ProcessStartInfo("cmd.exe", String.Format("/k {0} & {1} & {2} & {3}", "ping -n 3 127.0.0.1 > NUL", "del ""ProxyFuel.exe""", "REN ""update.exe"" ""ProxyFuel.exe""", "start """" ""ProxyFuel.exe""")).WindowStyle = ProcessWindowStyle.Hidden)
'Close the Application;
Application.Exit()
Else
'Start Loading the Main Form;
My.Settings.updatechecked = True
End If
End Using
Catch ex As Exception
'Updating had an Unexpected Error;
MessageBox.Show(ex, "Update Error!", MsgBoxStyle.Critical)
End Try
Else
'No Internet Connection - Couldnt connect to the Data Server;
MessageBox.Show("Internet Connection Required!", "Error")
End If
End Sub
#End Region
#End Region
'(Irgendwie funktioniert es, während die Anwendung geöffnet ist)' unmöglich. Vielleicht versagt es still. – Plutonix
@Plutonix Das ist eine Möglichkeit, aber da es nicht wirklich laden zeigen Sie das Formular und schließt die Anwendung etwa zur gleichen Zeit wie es öffnet vielleicht vielleicht nicht – ShinyMK