2010-04-29 51 views
1

我看到一個關於應用程序如何可以發展論壇這個問題,可以讓安裝日期和顯示試用期的軌道30後過期的應用程序使用天數。唯一的限制是不使用任何類型的外部存儲。面試問題:開發可顯示試用期後30天屆滿後沒有外部存儲

問:如何做到這一點?

感謝
巴拉

- 編輯
我覺得它很容易弄清楚插入的問題和工作的地方。無論如何,我會清楚地寫下這個問題。 「外部存儲」意味着不要使用任何類型的存儲,如文件,註冊表,網絡或任何其他類型的存儲。你只有你的程序。

+0

我想像「無外部存儲」將禁止使用網絡或依賴於文件創建時間戳記? – Kitsune 2010-04-29 01:51:54

+1

定義「外部存儲」。此外,問題通常包含問號...... – 2010-04-29 01:52:40

回答

0

我不知道這是可能的,因爲大部分的工作我已經做已經與嵌入式系統中,我甚至都不需要觸摸操作系統。但是,下面是可能的嗎?

當編譯你的程序時,在最後留下一些額外的空間(比如說8個字節),全部設置爲0.當你的應用程序運行時,它將獲取這些字節,如果它們全部爲0,則將它們替換爲當前時間(這是我不確定的部分,操作系統是否允許你這樣做?如果沒有,可能會有一些使用多個進程的解決方法),否則,如果時間差大於30天,通知用戶試用期已結束。

當然,該方法容易重置系統時鐘。

+0

應用程序的安裝程序可以在文件中嵌入日期+時間(避免以普通用戶身份運行時出現任何權限問題),然後應用程序在啓動時讀取它。應用程序還可以將機器的時間與Internet上的時間源進行比較,以檢測時鐘是否已恢復。儘管如果有人改變了一些代碼,以至於不會檢查時間是否已經過期,即使這樣做也會失敗,但總是返回表示剩餘時間更長的值。你能做的最多的事情就是讓代碼如此混亂,沒有人希望看到它。 – Kitsune 2010-04-29 02:27:08

+0

我想到了這一點,但操作系統會讓你從同一個進程修改磁盤上的程序嗎?這是否會導致程序的一些遞歸性質?我們可以產卵其他過程並完成這件事嗎? – Boolean 2010-04-29 02:27:38

0

如果您無法使用在所有的任何外部存儲(甚至沒有配置文件之類的東西),你就需要將其代碼插入到應用程序本身,因此該應用的主要方法(或方法)檢查​​當前日期少於某個到期日期。部分安裝程序可以實時編譯該代碼,然後將其設置爲安裝日期。這可能很容易通過重新安裝應用程序而失敗,但是再次,沒有外部存儲也是不現實的。

+0

或者將日曆移回,但不失爲一個好主意。 – MusiGenesis 2010-04-29 02:12:48

0

我覺得這樣做通常會是讓你的應用程序產卵的東西掉在一個單獨的進程將繼續運行,並跟蹤即使主應用程序被關閉的日期/時間的唯一方法。當它重新啓動時,它會連接到正在運行的進程以查看試用期是否已過期。

當然,如果從來沒有重新啓動計算機,這將只工作,用戶永遠不會追殺你的催生過程,並把它打死了,這是非常不可能的。如果您的應用程序沒有執行與IO相關的操作(文件系統,註冊表,網絡上的某些內容等),那麼簡單的重新啓動將清除您所做的任何操作。

所以,總結一下:這是不可能的。

+0

musi - 考慮背景:面試問題。 – 2010-04-29 02:24:12

5

使用包含該程序的文件的文件修改日期作爲安裝日期。

+0

但用戶可以做到這一點,並繼續使用該軟件。我認爲那裏有黑客在嘗試這種微不足道的東西。 – Boolean 2010-04-29 02:17:07

+0

+儘可能接近,因爲它得到 – 2010-04-29 02:18:48

+1

@Algorist - puhleeeze - 不要被動攻擊你的環境和需求,它只是惱人。 ;-)面試問題不是爲了產生代碼,而是爲了揭示解決問題的能力。 – 2010-04-29 02:20:02

1

我喜歡Doug Currie關於文件修改日期的想法。但是,如果應用程序是從網上下載的,則每晚在午夜時分會重新鏈接包含新過期日期的新初始化數據。然後當天下載的任何二進制文件在指定的日期到期。

如果你喜歡,請登錄所以它不能被黑客攻破了私人密鑰的日期。在應用程序中加入公鑰並解密日期。如果簽名不正確,請聯繫hasta la vista,寶貝。

+0

你打算如何存儲示例? – 2010-04-29 06:28:47

+0

@天:哦,好的。但問題確實說「安裝日期」,這意味着要安裝示例或主副本。我相信這可以存儲*在某處*(可能在服務器上)並在每晚更新。 – 2010-04-29 23:45:49

相關問題