首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何模拟程序的特定时间?

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

Stack Overflow用户
提问于 2013-03-25 02:32:09
回答 3查看 1.2K关注 0票数 1

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

附言:我不能以任何方式改变我启动的程序。

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

EN

回答 3

Stack Overflow用户

发布于 2013-03-25 02:38:29

您将不得不像GetSystemTime一样拦截对winAPI的调用。对于这样的事情,C#不是最好的工具,但没有什么是不可能的。使用任何支持C#的绕路库。想一想修改程序地址空间的方法(远程线程、WriteProcessMemory、filter DLL)。

这是你可以在哪里找到解决方案的一个非常大致的想法。

但是,如果你要问如何拦截对操作系统的程序调用,你很难在这里得到任何答案,至少如果你没有表现出自己的努力。

票数 1
EN

Stack Overflow用户

发布于 2013-03-25 02:45:43

如果您知道应用程序使用哪些日期/时间函数,则可以调查这些CLR方法使用哪些系统调用。一旦你知道了,你就可以在这些调用被拦截的环境中测试你的软件,假设给.NET中的DateTime.Now“假”响应。

有一些实用程序可以为您完成此任务,例如http://www.nirsoft.net/utils/run_as_date.html

我不知道该实用程序截获的特定系统调用是否是框架用来提供例如DateTime.Now的系统调用

票数 1
EN

Stack Overflow用户

发布于 2019-10-22 21:35:41

这是一个老生常谈的问题,但我的答案可能会对某些人有所帮助。我们在项目中所做的就是像这样使用接口:

代码语言:javascript
运行
复制
interface IDateTime
{
    DateTime Now();
    ....
}

然后使用IDateTime而不是常规的DateTime,只使用everywhere和IoC来获取IDateTime的实例。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15602354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档