嘿大家。
我开发了一个简单的代码来自动更新我的程序。它的工作方式是:
程序下载一个包含版本字符串的远程文件。如果版本字符串大于程序的,则启动自动更新。
该程序使用带有 DownloadAsync 的远程链接下载该程序的最新版本。
该程序创建一个新的批处理文件,该文件杀死当前应用程序(程序本身),删除当前程序,并将新程序重命名为应用程序的名称。然后,它运行新更新的应用程序并自行删除。
但是,当实际执行批处理文件时,我遇到了一个问题。这是我的代码:
private void WC_Completed(object sender, AsyncCompletedEventArgs e)
{
StringBuilder Batch = new StringBuilder();
Batch.AppendLine("@echo off");
Batch.AppendLine("taskkill /IM " + Process.GetCurrentProcess().ProcessName + ".exe /F");
Batch.AppendLine("ping localhost > nul");
Batch.AppendLine("del /f " + (char)34 + Application.ExecutablePath + (char)34);
Batch.AppendLine("ren " + (char)34 + Application.StartupPath + @"\update.exe" + (char)34 + " " + Process.GetCurrentProcess().ProcessName + ".exe");
Batch.AppendLine((char)34 + Application.ExecutablePath + (char)34);
Batch.AppendLine("del %0");
File.WriteAllText(Application.StartupPath + @"\update.bat", Batch.ToString(), Encoding.Default);
Process.Start(Application.StartupPath + @"\update.bat");
}
出于某种原因,它并没有杀死当前的应用程序,或者只是占用了太多时间,整个过程变得疯狂。它只是运行未更新的应用程序,因为重命名不起作用,这会导致循环。
你能指出我的错误吗?我想看看有什么问题!
谢谢!