如何模拟程序的特定时间?

时间:2013-03-24 18:32:09

标签: c# .net

这个问题有点难以理解,但我想要做的是启动一个程序并使该程序认为系统时钟是“其他日期和时间”而不是实际改变系统时间。如何使用C#以编程方式执行此操作?

P.S:我不能改变我以任何方式启动的程序。

编辑:我刚刚意识到程序在启动后4-6秒后只检查一次。所以我只需将系统时钟更改10秒钟并将其还原!谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您必须拦截对GetSystemTime之类的winAPI的调用。 C#不是这种东西最好的工具,但没有什么是不可能的。使用任何支持C#的绕道库。想一种修改程序地址空间的方法(远程线程,WriteProcessMemory,过滤DLL)。

这是一个非常笼统的想法,您可以在哪里找到解决方案。

虽然如果你问如何拦截程序调用操作系统,你几乎不会得到任何答案,至少如果你没有表现出自己的努力。

答案 1 :(得分:1)

如果您知道应用程序使用的日期/时间函数,则可以调查这些CLR方法使用的系统调用。一旦你知道,你就可以在截获这些电话的环境中测试你的软件,可能会给你提供“假的”回复。 .NET中的DateTime.Now

有些实用程序可以为您执行此操作,例如http://www.nirsoft.net/utils/run_as_date.html

我不知道该实用程序拦截的特定系统调用是否是框架使用的,例如DateTime.Now

答案 2 :(得分:0)

这是一个古老的问题,但我的回答可能会帮助某人。 我们在项目中所做的就是使用这样的界面:

interface IDateTime
{
    DateTime Now();
    ....
}

然后您在所有地方和IoC中都使用IDateTime而不是常规DateTime来获取IDateTime实例。

因此,结果是您可以创建Now()的任何实现。 编写单元测试时真的很有帮助。