这个问题有点难以理解,但我想做的是启动一个程序并让该程序认为系统时钟是“其他日期和时间”,而不是实际更改系统时间。如何使用 C# 以编程方式执行此操作?
PS:我无法以任何方式更改我启动的程序。
编辑:我刚刚意识到该程序仅在启动约 4-6 秒后检查一次时间。所以我只需将系统时钟更改10秒并恢复它!感谢所有的帮助!
您将不得不拦截对 winAPI 的调用,例如GetSystemTime
. C# 不是处理此类事情的最佳工具,但没有什么不可能。使用任何支持 C# 的 detours 库。想办法修改程序地址空间(远程线程WriteProcessMemory
,,过滤DLL)。
这是您可以在哪里找到解决方案的一个非常笼统的想法。
虽然如果你要问如何拦截对操作系统的程序调用,你在这里几乎不会得到任何答案,至少如果你没有表现出自己的努力的话。
如果您知道您的应用程序使用了哪些日期/时间函数,则可以调查这些 CLR 方法使用的系统调用。DateTime.Now
一旦你知道了,你就可以在那些调用被截获的环境中测试你的软件,大概是在 .NET 中给出“假”响应。
有一些实用程序可以为您执行此操作,例如http://www.nirsoft.net/utils/run_as_date.html
我不知道该实用程序拦截的特定系统调用是否是框架使用的系统调用,例如DateTime.Now
这是老问题,但我的回答可能会对某人有所帮助。我们在项目中所做的是使用这样的界面:
interface IDateTime
{
DateTime Now();
....
}
然后你在任何地方都使用 IDateTime 而不是常规的 DateTime,并使用 IoC 来获取 IDateTime 的实例。
因此,您可以创建 Now() 的任何实现。在编写单元测试时真的很有帮助。