2011-10-28 58 views
2

我有一個windows服務,它將一直運行,但只有在自上次運行至少24小時後纔會激活。因此,我需要存儲自上次執行有效負載以來的時間和日期。在windows服務中持久化變量的可接受方式

要做到這一點,我想寫作的App.Config中有:

ConfigurationManager.AppSettings.Set("LastRunTime", DateTime.Now.ToString()); 

然而,這似乎並沒有堅持,而是緩存如果重新啓動服務,這是沒有好處的。

那麼,爲Windows服務持久化值的方法是什麼?

+0

我認爲這取決於,經常將數據存儲在數據庫中是一個好主意。也許一個簡單的文本文件可能不太麻煩。 – Jodrell

+0

你可以爲你的應用程序設置,用戶文件夾指定一個不同的位置嗎?我的猜測是,由於system32的安全性,它不會持續存在? – JonAlb

+0

你不能使用System.Configuration.Configuration.Save()或.SaveAs()嗎? – 2011-10-28 10:04:48

回答

1

我最終按照this article序列化對象,並與@ChrisBint所說的我將它保存到文本文件中。這正是我所尋找的'接受',我知道我可以寫入文本文件,但這是我正在尋找的方法。我想保持一切結構化和強類型化,而不是編寫自己的方法來保存數據。

由於@Chris只提供了一個部分答案,我已經向他提供了他並接受了這一點。

+1

'接受'?通過誰?雖然我讚賞upvote,但你的問題是什麼是爲Windows服務持久化值所接受的方法,並且該鏈接當然不是這樣,它是標準的序列化技術。你的問題也沒有要求實施細節,只是建議如何做到這一點。基於此,我已經低估了這一點,因爲我覺得它不代表任何答案(其中說實話我覺得不會有這個問題) – ChrisBint

+0

@ChrisBint - 我明白你在說什麼,它可能是一個代表我失敗問一個適當的問題,我會考慮刪除它,因爲這裏可能沒有任何未來價值。 –

6

使用數據庫,簡單的xml /文本文件,註冊表值。

此外,根據您的要求,使用任務計劃程序運行一個簡單的控制檯應用程序可能是另一種選擇。

+1

這很公平,但數據庫對於一個簡單的值來說是過分的。那麼接受的方式是什麼?我已經提到控制檯應用程序管理,他們不會對這種方法感興趣。 –

+2

做你覺得最好的。如果DB過量,請使用text/xml文件或註冊表值。你可能不會爲此找到一個「接受」的方法,只是個人偏好。 – ChrisBint

+0

你需要併發嗎?請記住使用文本文件時。 – Marc