2012-08-22 14 views
5

पर SetSystemTime का उपयोग करके घड़ी सेट नहीं कर सकता है मेरा ऐप पीसी घड़ी को जीपीएस स्रोत से सेट करने के लिए SetSystemTime() का उपयोग करता है। यह उपयोगकर्ता खाता नियंत्रण अक्षम के साथ विंडोज 7 में ठीक काम करता है, लेकिन विंडोज 8 में, यूएसी अक्षम होने के बावजूद, यह विफल हो जाता है। मुझे वापस मिली त्रुटि ERROR_PRIVILEGE_NOT_HELD है। मशीन में लॉग इन किया गया उपयोगकर्ता व्यवस्थापक समूह में है। अगर मैं एप्लिकेशन को एक्सप्लोरर में फ़ाइल के संदर्भ मेनू से "व्यवस्थापक के रूप में चलाएं" के रूप में चलाता हूं तो मैं इसे केवल काम पर ला सकता हूं - लेकिन लॉग-इन उपयोगकर्ता एक प्रशासक है।विंडोज 8

तो ... काम करने के लिए SetSysytemTime() प्राप्त करने के लिए मुझे विंडोज 8 पर अलग-अलग करने की क्या ज़रूरत है? क्या मुझे मौजूदा उपयोगकर्ताओं के प्रशासक अधिकारों की तुलना में और अधिक उन्नत विशेषाधिकारों की आवश्यकता है? यदि हां, तो व्यवस्थापक से उच्च विशेषाधिकार क्या है? या क्या मुझे इस तरह की कॉल विंडोज 8 पर काम करने की अनुमति देने के लिए उपयोगकर्ता खाते को अलग-अलग सेट करने की आवश्यकता है?

संपादित करें: टिप्पणियों में उल्लेख किया गया है, मैन्युअल रूप से SE_SYSTEMTIME_NAME विशेषाधिकार सक्षम करने का प्रयास नहीं करता है। न तो LsaAddAccountRights के सुझाए गए एमएसडीएन विधि का उपयोग करके विशेषाधिकार जोड़ने का प्रयास करता है।

+0

"यूएसी अक्षम" कोण एक बहुत ही अस्पष्ट है, इसे afaik अक्षम नहीं किया जा सकता है। लगभग निश्चित रूप से Win8 पर नहीं, अंतर्निहित नलसाजी का उपयोग सैंडबॉक्स प्रदान करने के लिए किया जाता है जिसमें मेट्रो ऐप्स चलते हैं। आपको ऊंचाई के लिए पूछने के लिए एक मेनिफेस्ट की आवश्यकता होगी या पहले से ही एक ऐसी प्रक्रिया से अपना ऐप शुरू करें। –

+0

यह यूएसी को अभी भी बंद करने का विकल्प देता है ... तो क्या यह वास्तव में अक्षम नहीं है? कैसा कष्टकर! –

+2

"कॉलिंग प्रक्रिया में SE_SYSTEMTIME_NAME विशेषाधिकार होना चाहिए। यह विशेषाधिकार डिफ़ॉल्ट रूप से अक्षम है। SetSystemTime फ़ंक्शन सिस्टम समय को बदलने से पहले SE_SYSTEMTIME_NAME विशेषाधिकार को सक्षम करता है और लौटने से पहले विशेषाधिकार को अक्षम करता है। अधिक जानकारी के लिए, विशेष विशेषाधिकारों के साथ चलना देखें।" - शायद विंडोज 8 में, विशेषाधिकार स्वचालित रूप से अब सक्षम नहीं है और आपको इसे एडजस्टोकनप्रिलीज() के साथ स्वयं करना है? कोशिश करने लायक हो सकता है। –

उत्तर

3

मुझे लगता है कि यह इस तथ्य से संबंधित हो सकता है कि, विंडोज 8 पर यूएसी अक्षम होने के साथ, मध्यम अखंडता पर चलने वाली प्रक्रियाओं (डिफ़ॉल्ट रूप से), उच्च अखंडता नहीं (this post देखें)।

मैं तुम्हें यूएसी "उपयोगकर्ता खाता नियंत्रण सेटिंग" में पूरी तरह से नीचे स्लाइडर ले जाते हैं तो आप अपने application manifest

+0

धन्यवाद डेमियन, जो समझ में आता है। हालांकि कितना परेशान है।मैं समझता हूं कि माइक्रोसॉफ्ट ऐसा करने के लिए क्यों (/ आवश्यकता) चाहता है, यह हमारे सर्वर सेवा के साथ सिस्टम घड़ी को सिंक करने के लिए हमारे आवेदन की आवश्यकता को तोड़ देता है, क्योंकि क्लाइंट ऐप को कई प्रणालियों में उपयोगकर्ता इंटरैक्शन के बिना चलाने में सक्षम होना चाहिए (कुछ उपयोगकर्ता प्रक्रिया को बढ़ाने के लिए व्यवस्थापकीय लॉगिन नहीं होगा, लेकिन ऐप को अभी भी निम्न स्तर की चीजों को करने के लिए अनुमति के स्तर की आवश्यकता है)। मुझे लगता है कि एक वर्कअराउंड के बारे में सोचना होगा, क्योंकि उन्नत अनुमतियों के लिए संकेत व्यावहारिक नहीं है। –

+1

@ निकशॉ - ठीक है, यह * एक विशेषाधिकार प्राप्त ऑपरेशन है। यदि उपयोगकर्ताओं को ऑपरेशन करने की अनुमति नहीं होगी, तो हो सकता है कि इस कार्यक्रम को सेवा के रूप में पुनः लिखने का समय हो? –

+0

अजीब चीज यह है कि मेरा लॉग इन उपयोगकर्ता बिना किसी संकेत के घड़ी को बदल सकता है, फिर भी मेरा ऐप उसी उपयोगकर्ता के नीचे चल रहा है जब तक कि मैं इसे "प्रशासक के रूप में" नहीं चलाता। हालांकि मैं सहमत हूं; एक सेवा होने से ये विशेषाधिकार प्राप्त ऑपरेशन संभवतः जाने का सबसे अच्छा तरीका है। –

4

में requireAdministrator अनुरोध करने की आवश्यकता लगता है, इसका मतलब है कि यूएसी किसी भी संकेत नहीं दिखाया जाएगा, लेकिन अभी भी सक्षम है। कोई भी सामान्य प्रक्रिया अभी भी प्रशासनिक विशेषाधिकारों के बिना चलती है, लेकिन "प्रशासक के रूप में चलाने" या "आवश्यकता प्रशासक" घोषित करके) उपयोगकर्ता सहमति के बिना होगी।

सुरक्षा नीति को अक्षम करने से "उपयोगकर्ता खाता नियंत्रण: व्यवस्थापक अनुमोदन मोड में सभी व्यवस्थापकों को चलाने के लिए" या 0 करने के लिए रजिस्ट्री कुंजी "EnableLUA" सेटिंग इस व्यवहार को बदलने होगा, लेकिन रोकने सभी मेट्रो आधुनिक यूआई चलने से ऐप्लिकेशन।

यदि आपके उपयोगकर्ताओं के पास व्यवस्थापकीय अधिकार नहीं हैं, तो आप सेवा का उपयोग किये बिना सिस्टम घड़ी को बदल नहीं सकते हैं।

यदि आप चाहते हैं कि सामान्य उपयोगकर्ता और (ऑटो-) प्रशासकों के लिए उन्नत हो, तो आप अपने मैनिफेस्ट में "उच्चतम उपलब्ध" घोषित करना चाहेंगे।

+0

धन्यवाद फेलिक्स, जानना उपयोगी है। ऐसा लगता है कि मैं नौकरी करने के लिए एक सेवा लिखूंगा! :) –