首页 / C# / C#-程序更新代码问题
C#-程序更新代码问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-程序更新代码问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
嘿大家.
我已经开发了一个简单的代码来自动更新程序.它的工作方式是:
>程序将下载其中包含版本字符串的远程文件.如果版本字符串大于程序的版本字符串,则会启动自动更新.
>该程序使用带有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");
}
由于某种原因,它并不会杀死当前应用程序,或者花费了太多时间,整个过程变得很疯狂.它只运行未更新的应用程序,因为重命名不起作用,这会导致循环.
你能指出我的错误吗?我正在尝试找出问题所在!
谢谢!
解决方法:
如果程序包含一个可执行文件,则有一种更简便的方法来更新程序:
>使用File.Move将正在运行的可执行文件重命名为my.exe.bak.
>将更新的可执行文件替换为旧的可执行文件.
>使用Process.Start(“ my.exe”)启动新副本,然后退出旧副本.
>启动后测试my.exe.bak是否存在,然后尝试将其删除.您不会第一次成功,但是备份将最终被删除.
这样,您将不需要任何.bat欺骗.
您还可以通过通过命令行参数将旧实例的PID(进程ID)传递给新实例,然后使用Process.GetProcessById(pid).WaitForExit();来增强该算法.以便在首次启动时删除my.exe.bak并处理更新过程完成.
内容总结
以上是互联网集市为您收集整理的C#-程序更新代码问题全部内容,希望文章能够帮你解决C#-程序更新代码问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。