参照网址: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;
}
}
现在我把需要更新的文件和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;
}
}
解决方案 »
- 用c#做的网站,如何打包实现快速的安装部署
- 使用线程扫描网络段 出现 索引超出了数组界限。 错误
- C/S模式的系统
- 大型项目需求,有谁想做或一起研究..........????
- winform 里面怎么用textbox 显示数据库中查询出来的列啊?
- .NET的WinForm中怎样关闭原Form,弹出一个新Form,望高手指点
- 各位大虾!救命哟,关于WINDOWS服务定时发送邮件的问题!
- C# winform WebBrowser中弹出div层图片的问题
- datagrid出错:无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。
- winform可以用datagridview中实现如下效果吗?
- 程序发布到服务器后 ref 返回值无效
- 求助大神关于httpwebresponse的POST格式
每次Debug都覆盖了生成路径下面的那个)
多谢提醒。
我再次测试了,我不Debug了,我修改服务器版本号以后,直接运行钢板编译后的EXE,能检测到版本变化,也能弹出更新界面。
但是,这个时候,我再次修改服务器版本号,这个时候再次运行EXE,不能检测到了版本变化了
很简单,把你这个xml排除出工程,或者改为不更新到输出目录。就可以多次debug了。
第一次这个 xml 文件不存在,可以检测到,
第一次检测了,xml存在了,就不检测不到了,
仔细检查xml 的路径
谢谢大家提醒,最终发现原因如下:
在比较版本的时候,使用CompareTo函数,当版本号的一段大于9的时候,貌似就不能正确比较了。比如:1.0.0.10 与1.0.0.9 这样,就不能正确返回比较结果了。——————————————————————————————————————————————
现在有新的问题,不知道大家遇到过没有: 上面的问题解决之后,本地程序确实能从服务器下载并且更新相关EXE或DLL,但是现在发现好尴尬,点击更新后的启动程序EXE,压根那个程序界面打不开啊,但是程序在任务栏管理器的进程里面,确实有那个启动EXE了,再点击,照死了没有任何反应,只不过进程里多了个启动程序进程而已。
要么发现,那个程序在任务管理器里面,出现,一闪,那启动程序EXE进程自己消失了。
自己做的一个简单的例子,同样的代码,在Main入口函数里面,判断与服务器版本号,是否更新等,结果都好的狠,就是正式的程序出现以上问题。
唉,想不通啊~~~