日期:2014-05-18  浏览次数:20997 次

C# 软件自动升级
我想通过文件覆盖进行软件升级,但文件覆盖式老是弹出

文件正由另一进程使用,因此该进程无法访问该文件

------解决方案--------------------
File.WriteAllText("test.bat",
@"@echo off
:run
del %1 >nul
if exist %1 goto run
del test.bat
");
ProcessStartInfo p= new ProcessStartInfo();
p.FileName = "test.bat";
p.Arguments = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
p.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(p);

------解决方案--------------------
C# code

       try
                {
                    System.IO.File.Copy(DownLoadPath, App.PPath, true);
                }
                catch (Exception ex)
                {
                    if (ex is System.IO.IOException)
                    {
                        System.Diagnostics.Process[] Ps = System.Diagnostics.Process.GetProcessesByName(App.PPName);
                        if (Ps.Length == 0)
                        {
                            throw ex;
                        }
                        else
                        {
                            bool isrun = false;
                            foreach (System.Diagnostics.Process p in Ps)
                            {
                                if (p.MainModule.FileName == App.PPath)
                                {
                                    isrun = true;
                                    break;
                                }
                            }
                            if (isrun)
                            {
                                MessageBox.

------解决方案--------------------
文件正在用,你要先关闭当前的系统,才能覆盖.
网上有许多例子.
关键词"AutoUpdate"

------解决方案--------------------
更新思路:
前提条件,先启动更新程序,下载,完毕后,启动主程序;
1、客户端更新程序需要有记忆体,记载哪些文件更新,并和服务器上传时间一致;
服务端:a.xx 2010-09-08
b.xx 2010-09-08
a.xx 2010-09-07
客户端记忆体:
b.xx 2010-09-06
a.xx 2010-09-06
启动更新程序后,对照服务端,发现有a.xx 2010-09-08和2010-09-07需更新,那么就取08日的。
发现有b.xx 2010-09-07也需要更新。
2、只要更新完毕一个文件,记忆体就做记载,否则认为下载失败。