如何在不进行 Windows 更新的情况下自动更新各个国家夏令时的 Windows 定义[关闭]
Posted
技术标签:
【中文标题】如何在不进行 Windows 更新的情况下自动更新各个国家夏令时的 Windows 定义[关闭]【英文标题】:How to automatically update Windows definitions of daylight saving times in various countries without doing Windows update [closed] 【发布时间】:2014-12-29 07:59:52 【问题描述】:我们有一个 Windows 服务器应用程序,它必须了解各个国家/地区的夏令时 (DST)。 (注:这不是为电脑本身设置正确的夏令时问题)
为了保持最新状态,Windows 更新有时还包括对 DST 元定义的更新。 例如,如果一个国家突然决定在 DST 将从 4 月的第一个星期日开始到 4 月的第二个星期日时更改规则,这一点很重要。
但是,由于这是一个生产服务器,自动 Windows 更新被禁用。
Microsoft 不时发布包含此类更改的补丁,无需 Windows-Update 即可应用。但是,对于每个补丁程序,都会创建一个新的 Microsoft KB,它具有自己的专有 URI,这使得自动更新变得不可能。
问题:我们如何安排一个定期下载并应用所有补丁的任务
【问题讨论】:
“我们如何安排一个任务,定期下载并应用所有补丁”,嗯,你刚刚描述了自动 Windows 更新。 这是一道编程题吗?应用程序是用什么语言编写的?可以修改程序吗? 是的,“听起来”像 Windows 更新。但如前所述,我们不能使用它 Matt,这是用新的 dst-meta 数据更新 Windows 的问题。是的,这是一个我们可以(!)改变的.net程序。问题是该程序已经正确识别 DST,但要对正确的 DST 进行操作,它取决于具有正确 DST 元数据的操作系统 【参考方案1】:您能否在不运行 Windows 更新的情况下自动更新 Windows,或者有选择地告诉 Windows 仅更新时区数据? NO - 抱歉,没有这样的机制。
您可以手动查看the Microsoft Daylight Saving Time & Time Zone Blog 的 RSS 提要并自行应用更新,但没有编程方式来做到这一点。
由于您在 cmets 中提到您的应用程序是 .NET 并且您可以对其进行修改,因此我将为您提供另一种选择。 (顺便说一句,如果没有这方面的问题,您的问题将是off-topic for ***)。
在 .NET 应用程序中处理时区的常用方法是使用 TimeZoneInfo
类,它依赖于 Windows 来获取当前时区数据。但是,还有另一种选择,您可以编写应用程序以使用 IANA time zone database 而不是 Windows 时区数据。这两个数据源之间的差异在“Time Zne 数据库”部分下的the timezone tag wiki 中进行了介绍。
在 .NET 中,到目前为止,使用 IANA 数据库的最佳方式是通过 Noda Time 库。我鼓励您通读 the user guide 以了解如何在您的应用程序中使用此库。
假设您已将应用程序更新为使用 Noda Time 而不是 TimeZoneInfo
,您现在可以按照 here 的说明操作,了解如何使用最新的时区数据使其保持更新。本质上,您可以定期(每天、每周等)ping 一个 URL,以查看是否有新版本的 tzdb 可用 Noda Time 的 .NZD 格式。您可以轻松编写应用程序以下载新数据文件并进行安装。现在您已经消除了对 Windows 时区数据的依赖,因此您不再需要关心 Windows 更新或时区修补程序。
【讨论】:
感谢您的详细回复。我会试试这个以上是关于如何在不进行 Windows 更新的情况下自动更新各个国家夏令时的 Windows 定义[关闭]的主要内容,如果未能解决你的问题,请参考以下文章