这个问题有点难以理解,但我试图做的是启动一个程序,并使该程序认为系统时钟是“其他日期和时间”,而不是实际更改系统时间。如何使用C#以编程方式完成此操作?
附言:我不能以任何方式改变我启动的程序。
编辑:我刚刚意识到程序只在启动后4-6秒检查一次时间。因此,我将只更改系统时钟10秒,然后将其恢复!谢谢你的帮助!
发布于 2013-03-25 02:38:29
您将不得不像GetSystemTime
一样拦截对winAPI的调用。对于这样的事情,C#不是最好的工具,但没有什么是不可能的。使用任何支持C#的绕路库。想一想修改程序地址空间的方法(远程线程、WriteProcessMemory
、filter DLL)。
这是你可以在哪里找到解决方案的一个非常大致的想法。
但是,如果你要问如何拦截对操作系统的程序调用,你很难在这里得到任何答案,至少如果你没有表现出自己的努力。
发布于 2013-03-25 02:45:43
如果您知道应用程序使用哪些日期/时间函数,则可以调查这些CLR方法使用哪些系统调用。一旦你知道了,你就可以在这些调用被拦截的环境中测试你的软件,假设给.NET中的DateTime.Now
“假”响应。
有一些实用程序可以为您完成此任务,例如http://www.nirsoft.net/utils/run_as_date.html
我不知道该实用程序截获的特定系统调用是否是框架用来提供例如DateTime.Now
的系统调用
发布于 2019-10-22 21:35:41
这是一个老生常谈的问题,但我的答案可能会对某些人有所帮助。我们在项目中所做的就是像这样使用接口:
interface IDateTime
{
DateTime Now();
....
}
然后使用IDateTime而不是常规的DateTime,只使用everywhere和IoC来获取IDateTime的实例。
因此,您可以创建Now()的任何实现。在编写单元测试时非常有用。
https://stackoverflow.com/questions/15602354
复制相似问题