我需要在WPF项目中更新站点中的dll。至于.exe或msi文件更新是一切都清楚。但是dlls怎么样?我不知道该怎么做或它应该是什么样的......我通过xml文件实现了exe更新 - 从服务器读取xml文件,如果版本更高 - 加载这个新版本。至于dll - 它们中有很多,它们可以是新版本或新的dll ......所以,我有一个问题 - 如何实现检查? (例子赞赏或只是理论答案)。还有许多小问题如果我需要读取xml文件 - 如何自动生成它(写出所有dllls不是一个好主意)。等待你的建议。
答案 0 :(得分:0)
首先,考虑ClickOnce deployment。
如果ClickOnce
不适合您(它与安装程序相比有其局限性)。您可以实现自己的自我更新机制。
通常情况下,这是由一个独立的更新工具(让我们称之为update.exe
)完成的,它会按计划检查您的更新网站。
当您需要部署新版本的应用程序(包含更新的exes,dll和数据文件)时,您可以定义一个列出所有文件的最新版本信息的XML,
<files>
<file name="foo1.exe" version="2.3.0.2" hash="23ac4544490cb3bac23ac4544490cb3bac" downloadurl="youwebsite.com/dl/v23/foo1.exe"/>
<file name="subdir/foo2.exe" version="5.2.1.1" hash="..." downloadurl="..." />
<file name="bar.dll" version="1.3.0.2" hash="..." downloadurl="..." />
<file name="subdir/bar2.dll" version="1.3.0.3" hash="..." downloadurl="..." />
</files>
启动update.exe时,它会下载并解析此xml以确定需要更新的文件,并从下载URL下载这些文件,使用哈希值验证文件的完整性,并停止应用程序替换原始文件,然后重新启动应用程序。
回答您关于如何生成这个巨大的xml的问题:
当然不是手工编辑的。编写一个util,遍历install dir(最新版本)中的所有文件,为每个文件,获取文件版本(使用System.Version
类),文件大小(使用System.IO.FileInfo
类),从文件内容生成哈希值(使用System.Security.Cryptography.SHA256
之类的东西),并形成hugh xml(使用XDocument/XmlDocument
类)。