首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC做的程序怎么做到自动升级

2012-03-21 
VC做的程序如何做到自动升级?我用vc做了一个程序,交付用户安装后,如果想实现类似杀毒软件的自动升级功能该

VC做的程序如何做到自动升级?
我用vc做了一个程序,交付用户安装后,如果想实现类似杀毒软件的自动升级功能该如何做?大家有这方面经验吗?
我在网上找了一个“程序软件自动升级更新”的共享程序,据说可以实现自动升级功能,只是要注册,谁有注册码提供一份?谢谢!

[解决办法]
这里面主要是网络开发加com技术了,很有技术含量
[解决办法]
注册一个账户就能下载了。
[解决办法]

探讨
我是楼主,刚刚看到一个帖子,说CodeProject上有一个类似的程序:http://www.codeproject.com/internet/urlfile.asp,只是我下载不下来。谁有这个东东提供一份?谢谢。
我的邮箱:amtrc@163.com

[解决办法]
这类的源码有的是啊,就跟在网上下载东西不一样吗
一般是服务器放个配置文件,里面写上版本号跟升级需要的文件,
客户端下载配置文件判断版本是否需要升级,如果需要就去下载这些升级文件,并替换本地的文件
[解决办法]
www.vckbase.com在代码仓库搜索update
[解决办法]
http://www.vckbase.com/document/viewdoc/?id=932
[解决办法]
这个非常简单,把新程序打包放到你的服务器上,外加一个配置说明文件(ini或xml)。你的程序跑起来的时候,启动一个慢线程,下载你的配置说明文件(ini或xml),与本地的进行对照,如果一致就直接退出,如果有更新就接着下载到一个临时目录。这都是小意思了,重点是怎么覆盖原来的相应文件,因为系统跑起来的时候,文件是不能被删除和覆盖的。
[解决办法]
我的做法有四种

一是如果只是某EXE或DLL有变化,那么先把本地的改名,然后直接拷贝覆盖就可以了(当然你得想办法删除改名后的文件)。我现在做的浏览器是用这个方法的,不过还有改进的空间,现在是只图简单。

二是额外写一个DLL文件,我取名为AutoCopy.dll,这个模块其实只是拷贝文件而已。在我的工作系统退出的时候,通过rundll32.exe来调用我的AutoCopy.dll(再附加一些参数),然后自己的系统退出。AutoCopy.dll被rundll32.exe加载之后,一直等待到工作系统退出,然后再从附加的参数中解析出需要拷贝的文件进行拷贝操作。而还可以做得更好一些,就是AutoCopy.dll做为工作系统的资源,需要的时候再动态写到文件中执行,完了之后可以自删除(比EXE文件简单许多)。这个方法以前做大型系统的时候使用过。

三是用一个没有什么具体功能的EXE(暂称为shell.exe)来调用真正有意义的功能模块,shell.exe负责判断工作系统的版本并下载相关的组件,在适当的时候关闭并覆盖工作系统。由于shell.exe很功能很单一,几乎不需要再升级了。当然也可以做得更好,就是工作系统在适应的时候更新shell.exe,呵呵。这个方案眼前正在使用。

第四方案与三差不多,不过功能模块不是普通的EXE或DLL,而是脚本,这就象是浏览器执行JS脚本一样了。不过这个脚本是行业相关的,功能可以更加强大,这升级当然就更容易了。眼前我正在试图拓展脚本,希望能方便地应用于普通的小程序。呵呵
[解决办法]
up
[解决办法]
见识了!
[解决办法]
以前也打算做,后来不需要了,变成无疾而终
[解决办法]
探讨
我的做法有四种

一是如果只是某EXE或DLL有变化,那么先把本地的改名,然后直接拷贝覆盖就可以了(当然你得想办法删除改名后的文件)。我现在做的浏览器是用这个方法的,不过还有改进的空间,现在是只图简单。

二是额外写一个DLL文件,我取名为AutoCopy.dll,这个模块其实只是拷贝文件而已。在我的工作系统退出的时候,通过rundll32.exe来调用我的AutoCopy.dll(再附加一些参数),然后自己的系统退出。AutoCopy.dll被r…

[解决办法]
受益匪浅
[解决办法]
把主要的功能放在dll中,在程序中增加一个更新模块,定期检查服务端的配置文件(如:xml文件),如果发现有更新的话 就启动更新程序并退出主程序来下载覆盖安装就好了
[解决办法]
我的一个思路: xml文件进行系统模块配置,xml文件把模块名称、版本号、升级网址写上,到时让系统定时升级检查客户机的模块,若版本不一致,直接下载替换就可以了。
[解决办法]
“升级会涉及到注册表的变化等等,并非单纯的拷贝升级。 ”如果升级会因为注册表的问题而造成困惑,那么一定设计上是非常不合理的了,你得多考虑一下设计上的问题。升级考虑更多的应该三方面,一是各模块的版本信息判断问题,二是各模块的下载问题,三就是覆盖问题。而这三方面,最后的一个问题最重要了,因为有可能因为种种原因而只能成功覆盖部份模块,这可能就得有版本回滚或其它的补救方案。具体应用中怎么处理,就看项目的性质和公司的习惯了。

“对于,shell.exe,其启动的时机是什么呢?如何自启动呢?”,我已说得很明白了,这个shell.exe其实就是一个入口,当然就是最初的时候运行了。这个程序就是先判断是不是要更新真正的应用系统(如果要就先更新),然后再启动真正的业务应用系统。
[解决办法]
在codeproject有样例,你去找找!
------解决方案--------------------


你查一下rundll32.exe相关的资料就知道了。

热点排行