破宝

我是一块破破烂烂的宝贝石头。
随笔 - 85, 评论 - 1279, 引用 - 54

导航

工具

关于

自选精华版 RECOMMENDATIONS
留言板 GUESTBOOK

本人 blog 文章、图片及其他资源等,除另有声明外,均遵循以下原则向全球(当然包括朝鲜、古巴、利比亚等国)共享:

1。欢迎转载、复制、传播、引用,但转载、复制(包括但不仅限于作为参考资料复制到本地)、传播、引用同时必须在显著位置注明作者(破宝/percyboy)和文章原始 URL 地址等信息。但商业转载、复制、传播(尤指用于图书、光盘等媒体的部分或全部),须事先征得本人的许可。

2。文章以“现状”提供,不为由于使用本站资源而造成的任何损失而负责,仅提供力所能及的咨询和参考意见。

3。关于修改:允许您将本 blog 中的资源作为参考资料复制时的一定修改,但仍须保留作者和出处信息;其他情况下的修改(包括修改后再发布),须和本人确认许可。
 

标签

每月存档

广告



访客

 

最近手上的 Smart Client 项目已接近尾声,正准备为其添加“自动更新”功能。因为时间紧迫,完全自己开发是不可能了,再说已有现成的,为什么不用呢?呵呵~

目前,实现“自动更新”这个特征,主要有两种选择:一个是采用 Microsoft Practice & Patterns 中提供的 Updater Application Block (现在属于 Enterprise Library 的一部分);另一种选择是采用 windowsforms.net 上一个微软员工写的一个 AppUpdater 组件(?http://windowsforms.net/articles/appupdater.aspx?)。

这两个东西有相似的地方,也有不同的地方,比如 Updater Application Block 提供了很强大的扩展接口,但个人感觉也有些体积庞大;后者比较小巧,windowsforms.net 中推出的 Terrarium (一个基于 .net 的游戏程序,也是一个典型的 Smart Client)中即采用了这个小家伙,并对它进行了扩展(Terrarium 中比较特殊的两点扩展是:1.采用Web Service形式,2.更新控制更加智能:只告诉一定数量的客户端需要更新软件,而告诉其他客户端“没有”更新,从而避免了更新高峰使服务器瘫痪的情形。随后逐批通知其他客户端更新软件。)

在搜索结果中发现,AppUpdater有一个广为人知的问题,如下图所示的提示:

Unable to auto-download the missing parts of the application from:
http://localhost/temp/System.resources.dll

但发现多数人给出的建议(比如:http://www.cnblogs.com/myxq/archive/2005/02/28/110370.aspx)就是,在系统中找到这些所谓“遗失”的文件,然后把它们加入到程序目录中来。

事实上,这些都是些资源文件,而且它们存在系统目录中,不应该是“missing”才对(因为程序也没有因为缺少它们而出现其他问题)。

搜索结果还发现一个现象是:问这个问题的大都是中文、日文、还有不认识的欧洲语言、俄语等等,基本上没看到英语用户在讨论这个问题。

我也查找了缺少的这些资源文件,它们所在的目录是:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\zh-CHS

这样就比较明显了,对于英语用户他们不需要这些资源文件,他们使用已经打包在系统 dll 中的默认资源。可这个只是解释了为什么英语用户不讨论这个话题的现象。

简单看了 AppUpdater 的源码,发现这个错误提示出现的位置是一段自动下载缺失assembly的方法,它挂接了 AppDomain? 类的 AssemblyResolve 事件,当程序集解析失败时,自动从网络中下载。

我的初步猜测是,这几个资源文件是 AppUpdater.dll 自身依赖的,然后在它自己对自己进行解析时引发了这个 AssemblyResolve 事件。

很抱歉,我还没给出解决方法,仅仅初步分析了一下(还不知道对不对,最近太忙,闲下来再研究)。

另,这次第一次做 Smart Client 程序(这次主要突出的是离线工作的特征),有很多经验教训,过些日子待项目平静下来开始整理整理,做一些文章给大家参考。

相关文章

Loading...

打印 | 张贴于 2005-05-10 23:36:00 | Tag:暂无标签

留言反馈

#re: AppUpdater 的一个问题 编辑
遇到下面的问题怎么办?无法更新
[DownloaderManager.CheckDownloadCompleteOrError] :
Error downloading files from the server for the application 'YourApp',
the following message was in the exception: 'YourApp'.
ERROR: HRESULT 中的异常:0x8007013D。
STACK: at Microsoft.ApplicationBlocks.ApplicationUpdater.Downloaders.IBackgroundCopyError.GetErrorDescription(UInt32 LanguageId, String& pErrorDescription)
at Microsoft.ApplicationBlocks.ApplicationUpdater.Downloaders.BITSDownloader.HandleDownloadErrorCancelJob(IBackgroundCopyJob copyJob, String& errMessage)
at Microsoft.ApplicationBlocks.ApplicationUpdater.Downloaders.BITSDownloader.Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces.IDownloader.GetJobStatus(Guid jobId)
at Microsoft.ApplicationBlocks.ApplicationUpdater.DownloaderManager.CheckDownloadCompleteOrError()

2005-12-23 17:12:00 | [匿名用户:wpg]
#re: AppUpdater 的一个问题 编辑
405错误很麻烦,我也没有解决最后用了另外一台机器,估计是系统问题。
我在用AppStart得时候,下载以后不能自己重新启动,我检查了AppStart得原代码,加入了一句p.UseShellExecute=false;才解决,其中p是你得程序得进程实例。

配置得时候一定记得要删除你IIS上Update目录得后缀为config得配置,否则只要有config文件下载就不能正常进行。

我得qq:13052377 欢迎交流。
2005-11-04 10:47:00 | [匿名用户:Gas.Snake]
#re: AppUpdater 的一个问题 编辑
期待您的关于Smart Client项目中的经验的文章.
2005-09-25 18:38:00 | [匿名用户:zitiger]
#re: AppUpdater 的一个问题 编辑
阿宝,那个blog是我的。
2005-06-02 18:40:00 | [匿名用户:Richer]
#re: AppUpdater 的一个问题 编辑
方案二好
2005-05-25 09:37:00 | [匿名用户:CrazyTiger]
#re: AppUpdater 的一个问题 编辑
to Allen:
方案一:分别挂接 AppUpdater 对象的 UpdateDetected, UpdateComplete 事件,在相应事件处理程序中弹出你自己的对话框。

方案二:改 AppUpdater 源码,重新编译。
2005-05-24 12:20:00 | [匿名用户:破宝]
#re: AppUpdater 的一个问题 编辑
请问有谁作过自定义那个更新时的 提示窗口啊,
因为它是英文的,我想改成中文,怎么作啊。。。!?
2005-05-24 10:51:00 | [匿名用户:Allen]
#re: AppUpdater 的一个问题 编辑
to sunsnow8 :

web目录设为 可浏览,可写入,
windows2003,记得设置WEB_DAV为允许。
2005-05-24 10:48:00 | [匿名用户:Allen]
#re: AppUpdater 的一个问题 编辑
to haio:
IIS里的配置不正确。好好看看它的文档。
2005-05-17 11:08:00 | [匿名用户:破宝]
#re: AppUpdater 的一个问题 编辑
HTTP 405 - 资源被禁止
2005-05-16 22:44:00 | [匿名用户:haio]
#re: AppUpdater 的一个问题 编辑
我做测试的时候提出:服务器返回错误(405);可以请教吗?
请加我:17007325
2005-05-14 20:38:00 | [匿名用户:sunsnow8]
#re: AppUpdater 的一个问题 编辑
忘了说最重要的一点,补充
Updates那个目录不要放在Application的目录下,应该单独建一个目录
或者在IIS中将“应用程序设置”删除,成为一个普通的web目录。
原理就是如果是applicaiton,在服务器端要做处理的,所以才会发现问题,直接下载就不会出现这个问题了。
2005-05-12 15:29:00 | [匿名用户:haio]
#re: AppUpdater 的一个问题 编辑
有些文件可以不放在updates目录下,
还有AssemblyCulture可以设为空
我开始做的时候也出现这个问题,后来可能是注意了上面一些,就过了
2005-05-12 14:48:00 | [匿名用户:haio]
#re: AppUpdater 的一个问题 编辑
Sourceforge上面有个C#写的这玩意,可以参考
2005-05-11 14:40:00 | [匿名用户:rIPPER]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System