2010-02-27 10 views
9

मैं एक WPF/C# ऐप के साथ काम कर रहा हूं जहां मुझे उपयोगकर्ताओं को किसी विशेष सुविधा तक पहुंचने से लॉक करने की आवश्यकता है। असल में, उस समय से एक निश्चित घटना होती है, मैं अगले 24 घंटों तक कुछ पहुंच को रोकना चाहता हूं।क्या टाइमस्टैम्प के लिए कोई विंडोज पूर्ण समय है? (.NET)

सरल मामला:

  • घटना, होता टाइमस्टैम्प (DATETIME का उपयोग कर या समान)
  • उपयोगकर्ता 15 घंटे बाद क्षेत्र का उपयोग करने की कोशिश करता है, की तुलना अब टाइमस्टैम्प के ... ब्लॉक
  • उपयोगकर्ता की कोशिश करता बचाने 25 घंटे बाद क्षेत्र तक पहुंचने के लिए, अब टाइमस्टैम्प की तुलना करें ...

सभी अच्छे। हालांकि, उपयोगकर्ता के पास सिस्टम समय बदलने की क्षमता है, जो मुझे रॉयली से खराब करता है। वे बस 24 घंटे आगे सिस्टम समय निर्धारित कर सकते हैं और मेरा ऐप कोई भी बुद्धिमान नहीं होगा।

मुझे लगता है कि विंडोज़ में समय बदलना सिस्टम की वास्तविक समय घड़ी के लिए अपना रास्ता बनाता है ... तो क्या कोई मुफ्त चलने वाला टाइमर है जो सिस्टम घड़ी से स्वतंत्र है? एक ऐसा उपयोगकर्ता जिसके साथ गड़बड़ नहीं हो सकती है?

किसी भी अंतर्दृष्टि की सराहना की जाती है।

उत्तर

3

पर्यावरण। टिककाउंट सिस्टम समय परिवर्तनों के साथ नहीं बदलता है लेकिन यह रीबूट पर रीसेट हो जाता है। एक विकल्प एक HTTPS सुरक्षित वेब सेवा और एक प्रमाणपत्र नीति है जो प्रमाण पत्र सत्यापन विफलताओं की अनुमति नहीं देती है। अन्यथा सेवा से प्रतिक्रिया को खराब करने के लिए यह बहुत छोटा होगा।

वापस जब मैंने पहली बार सॉफ्टवेयर बेचना शुरू किया तो मैं चोरी और इस तरह के बारे में बहुत पागल था। ऐसा नहीं है कि मैं सुझाव दे रहा हूं कि आपके उद्देश्य समान हैं। लेकिन मैं इस निष्कर्ष पर पहुंचा कि आम तौर पर लोग अपने सिस्टम समय से गड़बड़ नहीं करेंगे क्योंकि यह उनके कंप्यूटर पर इतनी सारी चीजों को खराब करता है कि यह परेशानी के लायक नहीं है। स्वाभाविक रूप से विभिन्न अनुप्रयोगों में अलग-अलग अखंडता आवश्यकताएं होंगी लेकिन मैंने सोचा कि मैं यह जोड़ दूंगा।

+0

लेकिन उन दोनों को उपयोगकर्ता के वातावरण पर निर्भर हैं:

यहाँ एक नेट सेवा में WM_TIMECHANGE संदेश फँसाने पर कुछ जानकारी है। रीबूट (पर्यावरण। टिककाउंट के लिए) या इंटरनेट अनप्लग (वेब ​​सेवा) पर क्या होता है? –

+2

@ स्टीफन, मैंने विशेष रूप से ध्यान दिया कि पर्यावरण। टिककंट रीबूट पर रीसेट करता है। यदि सेवा अनुपलब्ध है - यदि ऐप को उस अखंडता के स्तर की आवश्यकता है तो इसे ऑफ़लाइन कार्य करने की अनुमति नहीं दी जानी चाहिए। – Josh

+1

+1 इस उत्तर का महत्वपूर्ण हिस्सा यह है कि न केवल बाहरी समय स्रोत ही एकमात्र वास्तविक विकल्प है, लेकिन यदि आप वास्तव में सुनिश्चित करना चाहते हैं, तो आपको समय सेवा को खराब करने वाले दुर्भावनापूर्ण उपयोगकर्ताओं के खिलाफ स्वयं की रक्षा करने की आवश्यकता है - इसलिए SSL की आवश्यकता । –

1

वास्तव में नहीं। एकमात्र विश्वसनीय पूर्ण टाइमर आपके नियंत्रण में या किसी ऐसे व्यक्ति के नियंत्रण में बाहरी है, जैसे इंटरनेट पर समय सर्वर (जैसे time.windows.com)। आप इन्हें एनटीपी या एसएनटीपी लाइब्रेरी का उपयोग करके एक्सेस कर सकते हैं जैसे http://www.codeproject.com/KB/IP/ntpclient.aspx पर पोस्ट किया गया। बेशक, इस मामले में (जोश के जवाब पर टिप्पणी के अनुसार) आपको विचार करना होगा कि क्या करना है यदि आप समय सर्वर तक पहुंचने में असमर्थ हैं, उदा। उपयोगकर्ता नेटवर्क से मशीन को डिस्कनेक्ट करता है।

आप पर्यावरण शुरू करने के बाद से समय प्राप्त करने के लिए पर्यावरण.TickCount का उपयोग कर सकते हैं, जिसे उपयोगकर्ता गड़बड़ नहीं कर सकता - लेकिन यदि उपयोगकर्ता या कोई अन्य सिस्टम को रीबूट करता है तो यह फिर से शुरू हो जाएगा, इसलिए यह विश्वसनीय नहीं है जिस उद्देश्य की आपको आवश्यकता है।

1

नहीं, विंडोज़ में यह कितना समय है, इसका कोई पूर्ण ज्ञान नहीं है, यह कैसे हो सकता है? यदि आपको एक विश्वसनीय टाइमस्टैम्प की आवश्यकता है, तो आपको इंटरनेट पर एक विश्वसनीय स्थान से एक प्राप्त करने की आवश्यकता है। एक ऐसा उपयोगकर्ता जिसके साथ गड़बड़ नहीं हो सकती है।

आप नेटवर्क समय सेवा से समय प्राप्त कर सकते हैं, या www.time.gov पर जा सकते हैं और एचटीएमएल से बाहर निकलने वाले समय को स्क्रैप कर सकते हैं। http://www.time.gov/about.html

या बस अपनी घड़ी को आगे बढ़ाने के इच्छुक कुछ उपयोगकर्ताओं के साथ रहें।

1

एक पूर्ण समय स्टाम्प पाने के लिए, एक Windows सेवा का उपयोग करना (मुक्त) में से एक NIST time servers

1

के लिए एक एनटीपी अनुरोध के लिए प्रयास, आप नकली एक निरपेक्ष बीता हुआ समय, प्रवेश द्वारा जब सिस्टम समय अद्यतन किया जाता है हो सकता है।

यह आवश्यक होगा कि आप मशीन पर एक सेवा स्थापित करने में सक्षम हैं, और यह कि आपके उपयोगकर्ता इसे रूट करने के लिए पर्याप्त चालाक नहीं हैं। detecting a wm_timechange event in a .net windows service

+1

यह ध्यान देने योग्य हो सकता है कि उपयोगकर्ता अभी भी BIOS कॉन्फ़िगरेशन में समय बदल सकते हैं, इसलिए, यह भी काम बहुत आसानी से घुमाया जा सकता है। – overslacked

संबंधित मुद्दे