簡體   English   中英

如何模擬程序的特定時間?

[英]How can I simulate a specific time for a program?

這個問題有點難以理解,但是我想做的是啟動一個程序,並使該程序認為系統時鍾是“其他日期和時間”,而實際上並沒有改變系統時間。 如何使用C#以編程方式進行此操作?

PS:我無法以任何方式更改啟動的程序。

編輯:我剛剛意識到該程序只在啟動〜4-6秒后檢查一次時間。 因此,我只將系統時鍾更改10秒鍾,然后將其恢復! 感謝您的所有幫助!

您將必須攔截對WinAPI的調用,例如GetSystemTime C#並不是解決此類問題的最佳工具,但沒有什么不可能。 使用任何支持C#的繞行庫。 考慮一種修改程序地址空間的方法(遠程線程, WriteProcessMemory和篩選器DLL)。

這是在哪里可以找到解決方案的非常籠統的想法。

盡管如果您詢問如何攔截對OS的程序調用,但至少在沒有做出自己努力的情況下,您幾乎無法在這里得到任何答案。

如果知道您的應用程序使用什么日期/時間功能,則可以調查那些CLR方法使用哪個系統調用。 一旦知道,您就可以在截獲這些調用的環境中測試軟件,大概是對.NET中的DateTime.Now提供“偽”響應。

有一些實用程序可以為您執行此操作,例如http://www.nirsoft.net/utils/run_as_date.html

我不知道該實用程序截獲的特定系統調用是否是框架用於給出例如DateTime.Now調用。

這是個老問題,但我的回答可能會對某人有所幫助。 我們在項目中所做的就是使用這樣的界面:

interface IDateTime
{
    DateTime Now();
    ....
}

然后,您可以在各處使用IDateTime而不是常規的DateTime,並且可以在IoC中使用IDateTime的實例。

因此,結果是您可以創建Now()的任何實現。 在編寫單元測試時非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM