首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# Winform 关于AutoUpdate的更新有关问题

2012-04-12 
C# Winform 关于AutoUpdate的更新问题C# codeprivate void ThreadFunction(){this.Cursor Cursors.WaitC

C# Winform 关于AutoUpdate的更新问题

C# code
private void ThreadFunction()        {            this.Cursor = Cursors.WaitCursor;            mainAppExe = updaterXmlFiles.GetNodeValue("//EntryPoint");            Process[] allProcess = Process.GetProcesses();            foreach (Process p in allProcess)            {                if (p.ProcessName.ToLower() + ".exe" == mainAppExe.ToLower())                {                    for (int i = 0; i < p.Threads.Count; i++)                        p.Threads[i].Dispose();                    p.Kill();                    isRun = true;                }            }            WebClient wcClient = new WebClient();            for (int i = 0; i < this.lvUpdateList.Items.Count; i++)            {                string UpdateFile = lvUpdateList.Items[i].Text.Trim();                string updateFileUrl = updateUrl + lvUpdateList.Items[i].Text.Trim();                long fileLength = 0;                WebRequest webReq = WebRequest.Create(updateFileUrl);                WebResponse webRes = webReq.GetResponse();                fileLength = webRes.ContentLength;                lbState.Text = "正在下载更新文件,请稍后...";                pbDownFile.Value = 0;                pbDownFile.Maximum = (int)fileLength;                try                {                    Stream srm = webRes.GetResponseStream();                    StreamReader srmReader = new StreamReader(srm);                    byte[] bufferbyte = new byte[fileLength];                    int allByte = (int)bufferbyte.Length;                    int startByte = 0;                    while (fileLength > 0)                    {                        Application.DoEvents();                        int downByte = srm.Read(bufferbyte, startByte, allByte);                        if (downByte == 0) { break; };                        startByte += downByte;                        allByte -= downByte;                        pbDownFile.Value += downByte;                        float part = (float)startByte / 1024;                        float total = (float)bufferbyte.Length / 1024;                        int percent = Convert.ToInt32((part / total) * 100);                        this.lvUpdateList.Items[i].SubItems[2].Text = percent.ToString() + "%";                    }                    string tempPath = tempUpdatePath + UpdateFile;                    CreateDirtory(tempPath);                    FileStream fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write);                    fs.Write(bufferbyte, 0, bufferbyte.Length);                    srm.Close();                    srmReader.Close();                    fs.Close();                }                catch (WebException ex)                {                    MessageBox.Show("更新文件下载失败!" + ex.Message.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);                }            }            InvalidateControl();            this.Cursor = Cursors.Default;        }

我用这个方法做的升级,结果在服务器下载过来的文件,跟我上传时的有区别,下载下来以后有的DLL会失效,对比大小的话会纠结于1KB,如果是927KB文件的话,我用这个方法下载下来的数据会是926KB,但是我用FTP下载下来的文件就没有问题,求各位大侠帮忙看看,是有些文件会失效,而不是所有,所以很纠结,唉。。。。



[解决办法]

热点排行