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

C# 如何模拟程序的特定时间?,c#,.net,C#,.net,这个问题有点难以理解,但我想做的是启动一个程序,让该程序认为系统时钟是“其他日期和时间”,而不是实际更改系统时间。如何使用C#以编程方式实现这一点 我不能以任何方式改变我启动的程序 编辑:我刚刚意识到程序在启动4-6秒后只检查一次时间。因此,我只需将系统时钟更改10秒,然后将其恢复回来!谢谢你的帮助 您必须拦截对winAPI的调用,如GetSystemTime。C#不是最好的工具,但也不是不可能的。使用任何支持C#的迂回库。考虑一种修改程序地址空间的方法(远程线程,WriteProcessMem

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

我不能以任何方式改变我启动的程序


编辑:我刚刚意识到程序在启动4-6秒后只检查一次时间。因此,我只需将系统时钟更改10秒,然后将其恢复回来!谢谢你的帮助

您必须拦截对winAPI的调用,如
GetSystemTime
。C#不是最好的工具,但也不是不可能的。使用任何支持C#的迂回库。考虑一种修改程序地址空间的方法(远程线程,
WriteProcessMemory
,过滤器DLL)

这是一个非常普遍的想法,你可以在哪里找到解决方案


尽管如果您询问如何拦截对操作系统的程序调用,您很难在这里得到任何答案,至少如果您没有显示自己的努力。

如果您知道应用程序使用的日期/时间函数,您可以调查这些CLR方法使用的系统调用。一旦您知道,您可以在拦截这些调用的环境中测试您的软件,可能会对.NET中的DateTime.Now做出“虚假”响应

例如,有一些实用程序可以为您执行此操作


我不知道该实用程序截获的特定系统调用是否是框架用来给出的调用,例如
DateTime。现在

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

interface IDateTime
{
    DateTime Now();
    ....
}
然后使用IDateTime而不是常规的DateTime,然后使用IoC获取IDateTime的实例

因此,您可以创建Now()的任何实现。
编写单元测试时非常有帮助。

我认为更改系统时间将容易10万倍,而且速度更快。我不想中断依赖于系统时钟的任何其他程序的运行。如果您正在谈论更改特定程序的时间(而不是其他程序),这是不可能的。与其围绕这一点编写解决方案,你不能在一个具有不同日期/时间的虚拟机中运行程序吗?我认为你不能,除非使用虚拟机。除此之外,如果没有给出适当的理由,除了“只需购买许可证”之外,你不可能得到很多有用的答案。
GetSystemTime
不是获取时间的唯一函数
OP
应该首先检查应用程序上与时间相关的API调用。嗯。。。我想会有更简单的方法。我已经知道我应该更改API调用,但我只是想要一个简单的方法。无论如何,谢谢你的帮助@fardjad,我知道这不是唯一的,我说过‘喜欢’:)哦,我知道没有简单的方法。系统不会基于每个进程返回当前时间。