比较文件修改时间失败



我正在基于.NET开发客户端服务器应用程序。服务器端在Windows XP上运行,客户端在Windows CE设备上运行(Motorola Symbol 3100,这可能是相关的)。

客户端需要自动更新功能,由于多个主题使我无法使用任何现成的自动升级解决方案,因此我决定自己实施。我的应用程序每次启动时都会检查更新,并在LastModification Time上比较远程站点上的文件。如果有的话,它将文件从远程服务器下载到Temp dir,然后停止并运行另一个替换更新的文件并运行主应用程序的应用程序。

文件正在通过套接字下载,因此在下载文件后,我的应用程序集在每个文件上的lastModification Time to to value Remote站点提供了。我正在使用此主题的时间更改解决方案,并且效果很好,即文件修改时间非常好,尽管其中一些文件的比较失败了。可能是相关的,我的解决方案无法比较的文件是摩托罗拉符号dll。

问题是,尽管我进行了所有工作,但每次我比较它们时,这些符号文件都会有不同的修改时间戳。总是有1小时的不同。例如。远程站点说,文件时间为1/24/2012 5:13:08,而在我的应用程序侧是1/24/2012 6:13:08。任何其他文件都没有问题。这些"任何"是我的应用程序EXE,我的DLL,第三方组件(例如OpenNETCF),MS .NET相关文件等。他们俩都不会让我感到困扰 - 如果他们更新,这只是一次,那么如果没有更改,则不会更新。在比较期间,我始终使用touniversaltime(),以便没有发生与时区相关的差异(并且正如我提到的,这适用于其他文件)。所以我总是得到这样的情况:

  • 远程站点提供了许多文件,其中确实有更改的文件(我的应用程序,我的dll等)以及这些符号DLL(始终!)
  • 文件已下载并更新
  • 我的应用程序再次运行,并再次检查更新
  • 现在只报告符号dll为更改
  • 应用程序属于无尽的循环,因为符号dll总是有修改时间不同的时间

我尝试创建一个附加的应用程序,该应用程序在符号文件上读取文件时间戳,然后再次设置它。我认为原始符号文件可能会有一些"错误"的日期时间或其他内容。即使我设置新时间增加了1秒钟,这并没有给予任何改进:在比较更新代码期间,它再次差异1小时。

最后,我决定从更新中删除这些符号文件。它们不经常更改,所以我有一些时间在这个问题上发现,但是如果摩托罗拉将下一个更新推出 - 我会再次陷入问题。

我不知道问题来源在哪里,我将感谢任何提示。我认为我的来源无关紧要,因为此问题仅适用于某些文件,无论如何修改时间总是正确更改:我在服务器部署文件夹中(从下载更新的地方)在设备上检查了它。这可能是与时区有关的问题,但是它仅影响某些文件,而不是每个文件?

我将进一步解释。我的服务器在其更新文件夹中包含以下完全以下文件:

flitedevice.dll

flitedll.dll

opennetcf.dll

opennetcf.appsettings.dll

opennetcf.configuration.dll

pdt.exe

pdtcomm.dll

符号

symbol.xml

symbol.audio.dll

symbol.audio.xml

符号barcode2.dll

符号barcode2.xml

符号standardforms.dll

symbol.standardforms.xml

system.data.oracleclient.dll

system.enterpriseservices.dll

system.enterpriseservices.wrapper.dll

system.transactions.dll

system.web.dll

update.exe

考虑到这是我第一次运行更新,我的服务器将这些文件的全部发送给客户端。我的客户端(pdt.exe)接收到所有内容,运行update.exe(并且存在,因此更新程序可以用较新的文件替换应用程序文件),该文件替换了更改的文件(在此首发情况下, all 文件)。

然后更新程序运行我的应用程序(pdt.exe),然后我的应用程序再次使用服务器端的文件检查其文件。现在要更新的文件是:

符号

symbol.xml

symbol.audio.dll

symbol.audio.xml

符号barcode2.dll

符号barcode2.xml

符号standardforms.dll

symbol.standardforms.xml

再次更新器替换文件,然后再次运行主应用程序。再次将相同的文件(这些符号。*)视为更改和下载和更换。只有这些,进一步更新检查请求中没有其他文件。绝不。这些文件完全是出了问题,而不是我的代码或其他文件。

在MD5哈希上添加辅助检查。比无尽的循环更好。

最新更新