参照网址:http://bbs.csdn.net/topics/370210594    查看大家以往的帖子,发现了这个方法比较适合CS程序从服务器的自动更新。
    现在我把需要更新的文件和UpdateList.xml放在服务器上面,其中本地的UpdateList.xml结构和服务器一样,只是需要更新的文件的版本号不一样。    现在开始运行程序,第一次程序确实能检测出本地的文件版本和服务器的不一致,并且也能成功更新了。
    此时,本地的那个UpdateList.xml文件和服务器的UpdateList.xml结构和内容完全一样。
    我把服务器的UpdateList.xml的更新文件的版本号,改大一号,此时再运行程序,理应程序依旧能检测到本地的程序的版本和服务器不一致了,但是,这个时候确实发现,程序没有提示检测到,直接运行出老版本了。
    但是另我费解的是,我通过VS进行按步调试,程序到了那一步的时候,却能检测到版本发生了变化,并弹出更新画面,直接运行EXE却不能弹出更新画面。
    求高人解释原因static void Main()
        {
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            
            AutoUpdate.AppUpdater appUpdater = new AutoUpdate.AppUpdater();
            availableUpdate = appUpdater.CheckForUpdate();
            if (availableUpdate > 0)
                {
                    System.Diagnostics.Process.Start("AutoUpdate.exe");
                }
                else
                {
                    Application.Run(new MainForm());
                    return;
                }           
        }

解决方案 »

  1.   

    发布成 clickonce 不是很好。查查你直接运行 EXE 里读取xml的路径和你调试路径是一个?(或者你的xml是在工程里,
    每次Debug都覆盖了生成路径下面的那个)
      

  2.   


        多谢提醒。
        我再次测试了,我不Debug了,我修改服务器版本号以后,直接运行钢板编译后的EXE,能检测到版本变化,也能弹出更新界面。
        但是,这个时候,我再次修改服务器版本号,这个时候再次运行EXE,不能检测到了版本变化了
      

  3.   

    感觉运行编译后第一次运行的EXE,是能检测到的。但是再继续变化版本,就怎么也检测不到了。
      

  4.   


    很简单,把你这个xml排除出工程,或者改为不更新到输出目录。就可以多次debug了。
      

  5.   

    不会吧,肯定是你xml文件路径的问题,
    第一次这个 xml 文件不存在,可以检测到,
    第一次检测了,xml存在了,就不检测不到了,
    仔细检查xml 的路径
      

  6.   


    谢谢大家提醒,最终发现原因如下:
    在比较版本的时候,使用CompareTo函数,当版本号的一段大于9的时候,貌似就不能正确比较了。比如:1.0.0.10 与1.0.0.9  这样,就不能正确返回比较结果了。——————————————————————————————————————————————
        现在有新的问题,不知道大家遇到过没有:    上面的问题解决之后,本地程序确实能从服务器下载并且更新相关EXE或DLL,但是现在发现好尴尬,点击更新后的启动程序EXE,压根那个程序界面打不开啊,但是程序在任务栏管理器的进程里面,确实有那个启动EXE了,再点击,照死了没有任何反应,只不过进程里多了个启动程序进程而已。
        要么发现,那个程序在任务管理器里面,出现,一闪,那启动程序EXE进程自己消失了。
        自己做的一个简单的例子,同样的代码,在Main入口函数里面,判断与服务器版本号,是否更新等,结果都好的狠,就是正式的程序出现以上问题。    
        唉,想不通啊~~~