我将代码设置为在运行时使用Form1_Load
执行代码是一个简单的程序集检查以查看版本是否低于通过Webclient获得的服务器上保存的版本。从那里,如果它更低,它下载最新的EXE并使用CMD重命名它并用旧的.exe替换它(不知怎的,它在应用程序打开时有效)
问题:
它使虚假反病毒检测器认为它试图感染其他应用程序(Trojan Dropper Variant)
在某些情况下它没有效果(例如:用户第一次下载应用程序并将其重命名为默认EXE名称以外的其他名称,然后繁荣它无法有效工作)
CMD甚至可能无法在某些机器上工作,例如School PC的e.t.c
使用CMD通常不是一个好主意。
我不想做的解决方案:
使用第二个.exe,其唯一目的是更新应用程序;
CMD Duh
Atleast尝试不使用.dll的Nuget包/外部引用
不是仅当用户在MessageBox e.t.c上按是/ OK时更新的代码
那么我该怎么办才能解决必须使用CMD的问题?
我当前的代码:
#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
答案 0 :(得分:0)
我有类似的情况需要更新当前正在运行的应用。我创建了一个中间应用程序来重命名(更新),这样主应用程序可以成功重命名,否则当主应用程序仍在运行时,文件将被锁定以进行大多数文件操作。
*注: 您不必使用CMD重命名文件,请使用:
My.Computer.FileSystem.RenameFile("C:\Test.txt", "SecondTest.txt")
*来自Rename File
希望这有帮助。