这个问题有点难以理解,但我想要做的是启动一个程序并使该程序认为系统时钟是“其他日期和时间”而不是实际改变系统时间。如何使用C#以编程方式执行此操作?
P.S:我不能改变我以任何方式启动的程序。
编辑:我刚刚意识到程序在启动后4-6秒后只检查一次。所以我只需将系统时钟更改10秒钟并将其还原!谢谢你的帮助!
答案 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()的任何实现。 编写单元测试时真的很有帮助。