【问题标题】:How can I run a Delphi Win32 application with a specific local time?如何使用特定的本地时间运行 Delphi Win32 应用程序?
【发布时间】:2013-11-29 08:46:41
【问题描述】:

我有一个 Delphi 程序在运行到午夜时开始出现错误。为了制作可重现的测试用例,我必须将系统的本地时间更改为午夜之前的某个时间,运行程序一段时间,检查错误并切换回来。虽然这肯定可以手动完成,但我在自动化测试时遇到了问题。

有没有可能在不改变系统时间的情况下给应用程序一个特殊的运行时间?这可以来自程序外部甚至内部。

虽然这可能是一个常见的 Windows 问题,但我用 Delphi 标记了它,因为任何使用 Delphi 的解决方案都很好,而在这种情况下,一些其他编程环境的解决方案是无用的。

【问题讨论】:

  • 除了一些现有的工具(这可能几乎无缘无故地很难开发,因为您可以轻松地制作一个工具来更改系统时间进行测试并自己更改回来),我怀疑除了重定向正在获得时间的 Windows API 函数之外还有其他方法。
  • @TLama,当然我可以写一个工具来做时间切换。由于测试应该在 CI 系统内运行,因此这次切换可能会干扰同时在该系统上运行的其他进程。它甚至可能会干扰 CI 系统本身。我已经考虑过将呼叫重定向到 GetLocalTime,但我决定先在这里询问。
  • 也许您可以在测试环境中使用备用时间服务器?我找到了一个想要在 XP 中这样做的人的帖子(谷歌搜索 google.com/search?q="change+windows+time"+testing),他通过谷歌搜索找到了答案 google.com/search?hl=en&q=XP+TIME+SERVER
  • 什么是“CI系统”?

标签: windows delphi time delphi-xe3


【解决方案1】:

有一个名为RunAsDate的现有工具:

说明

RunAsDate 是一个小型实用程序,可让您在指定的日期和时间运行程序。此实用程序不会更改您计算机的当前系统日期和时间,但它只会将您指定的日期/时间注入所需的应用程序。 您可以同时运行多个应用程序,每个应用程序使用不同的日期和时间,而系统的实际日期/时间继续正常运行。

它是如何工作的?

RunAsDate 拦截返回当前日期和时间(GetSystemTime、GetLocalTime、GetSystemTimeAsFileTime)的内核 API 调用,并将当前日期/时间替换为您指定的日期/时间。

系统要求

RunAsDate 适用于 Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008、Windows Vista、Windows 7 和 Windows 8。不支持旧版本的 Windows。它也是 x64 版本,可单独下载,用于 x64 应用程序。

【讨论】:

  • 这是让时间过去,还是时间静止?
  • @David,还没有测试它(还),但当前版本有this option。我不敢相信有人制造了这样的工具。不错!
  • @TLama 我们现在要做的就是等到下一个 Y2K 错误,我们将全部准备就绪!!
  • 这对于测试夏令时转换也很有帮助。非常感谢您的回答。接受!
猜你喜欢
  • 2023-04-04
  • 2011-03-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多