Как я могу запустить приложение Delphi Win32 со специфическим местным временем?

У меня есть программа Delphi, которая начинает вести себя неправильно при запуске за полночь. Чтобы сделать воспроизводимый тестовый сценарий, я должен изменить местное время системы на что-то до полуночи, запустить программу на некоторое время, проверить наличие ошибки и вернуться обратно. Хотя это, безусловно, можно сделать вручную, у меня проблемы с автоматизацией для тестирования.

Есть ли какие-либо возможности предоставить приложение специальное время при запуске без изменения системного времени? Это может быть вне программы или даже внутри.

Хотя это может быть общий вопрос Windows, я отметил его с помощью Delphi, поскольку любое решение, работающее с Delphi, прекрасно, в то время как некоторые с другими средами программирования бесполезны в этом случае.

Ответ 1

Существует существующий инструмент для RunAsDate:

Описание

RunAsDate - небольшая утилита, которая позволяет вам запускать программу в указанные вами дату и время. Эта утилита не изменяет текущую системную дату и время вашего компьютера, но она вводит только дату/время, которое вы указываете в нужное приложение. Вы можете запускать несколько приложений одновременно, каждое приложение работает с разными датами и временем, в то время как реальная дата/время вашей системы продолжает работать нормально.

Как это работает?

RunAsDate перехватывает вызовы API ядра, которые возвращают текущую дату и время (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime) и заменяет текущую дату/время на указанную дату/время.

Системные требования

RunAsDate работает под Windows 2000, Windows XP, Windows Server 2003, Windows Server 2008, Windows Vista, Windows 7 и Windows 8. Старые версии Windows не поддерживаются. Это также версия x64, доступная в разделенной загрузке, для использования с приложениями x64.

enter image description here