2009-09-18 10 views
5

मेरे आवेदन में मुझे एक ज्ञात और अनुमानित स्थान में 'वैश्विक' (यानी उपयोगकर्ता विशिष्ट नहीं) सेटिंग स्टोर करने की आवश्यकता है।एक मानक उपयोगकर्ता के रूप में 'वैश्विक' डेटा सहेजा जा रहा है?

मैं चाहता हूं कि एप्लिकेशन कहीं भी (मानक उपयोगकर्ता, व्यवस्थापक नहीं) के रूप में चलाने में सक्षम हो, जिसमें विभिन्न स्थानों से कई प्रतियां शामिल हों और सहेजी गई कॉन्फ़िगरेशन फ़ाइलों को पढ़ने और लिखने में सक्षम हों।

डेटा को सभी मानक उपयोगकर्ताओं के लिए दी गई पहुंच को पढ़ने और लिखने की आवश्यकता है, केवल एक ही नहीं।

इसे ध्यान में रखते

, चार विकल्प यहां दर्शाई गई अनुपयुक्त हैं: http://msdn.microsoft.com/en-us/library/bb206295(VS.85).aspx#ID0E1BA

तो मेरी विकल्प क्या हैं?

मेरा आवेदन सी ​​++ में और केवल विंडोज के लिए लिखा गया है। मुझे विंडोज एक्सपी और ऊपर का समर्थन करने की जरूरत है।

धन्यवाद।

संपादित करें:

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

  1. उम्मीद के मुताबिक (जैसे% APPDATA% \ फू एक 'उम्मीद के मुताबिक' पथ, लेकिन दुर्भाग्य से उपयोगकर्ता के विशिष्ट है)
  2. ग्लोबल (जैसे% ProgramData% \ फू एक है वैश्विक पथ लेकिन दुर्भाग्य से केवल बनाने उपयोगकर्ता लिखने का उपयोग)
  3. सुलभ (एक मानक उपयोगकर्ता दी निर्देशिका में नई फ़ाइलें बनाने के लिए सक्षम होने की जरूरत है, इस सिस्टम पर सभी उपयोगकर्ताओं पर लागू)

उत्तर

2

यदि आप तय है कि CSIDL_COMMON_APPDATA उपयुक्त नहीं है (शायद CSIDL_COMMON_APPDATA एक अच्छा डिफ़ॉल्ट है, लेकिन आप व्यवस्थापक स्थान बदलने के लिए सक्षम होना चाहते हैं) आप एक HKLM\SOFTWARE\<your app subkey> कि के लिए वांछित पथ इंगित करता है के लिए कुछ संस्थापक लिखने हो सकता है सामान्य निर्देशिका जो डेटा रखेगी।

HKLM रजिस्ट्री में पॉइंटर रखने का विकल्प एक कॉन्फ़िगरेशन फ़ाइल है जो प्रोग्राम निर्देशिका में रहता है जिसमें साझा निर्देशिका में पॉइंटर होता है। परिभाषा के अनुसार प्रोग्राम निर्देशिका को इंस्टॉलर द्वारा लिखने योग्य होना चाहिए, यह प्रशासकों द्वारा लिखने योग्य है (जो कॉन्फ़िगरेशन को संशोधित करने के लिए ज़िम्मेदार हो सकता है), और यह उपयोगकर्ताओं द्वारा पठनीय है। तो मानक उपयोगकर्ता सभी मानक उपयोगकर्ताओं द्वारा लिखने योग्य निर्देशिका में पॉइंटर प्राप्त करने के लिए एक प्रसिद्ध स्थान (या तो HKLM उप-कुंजी या प्रोग्राम निर्देशिका में कॉन्फ़िगरेशन फ़ाइल) पढ़ सकता है।

जो भी आम निर्देशिका (प्रोग्राम स्थापित या विन्यास मॉड्यूल) सेट यकीन है कि आम निर्देशिका के एसीएल उचित रूप से सेट किया गया है के लिए मानक उपयोगकर्ता लिखते हैं बनाने के लिए की आवश्यकता होगी।

+0

"आप एक HKLM \ SOFTWARE \ <आप अनुप्रयोग उपकुंजी> के लिए कुछ संस्थापक लिखने हो सकता है" मैं इस व्यापक रूप से वितरित डेस्कटॉप अनुप्रयोगों में किया है। मैं संस्थापक मानक उपयोगकर्ता अनुमतियों इस कुंजी को लिखने के लिए दे दिया है। –

+1

@Jim: मैं मानक उपयोगकर्ताओं द्वारा लिखने योग्य कुछ (जो भी कार्यक्रम निर्देशिका की एक उप-निर्देशिका के लिए किया जा सकता है), क्योंकि मैं यह सोचना एक HKLM उपकुंजी के लिए एसीएल की स्थापना का उल्लेख नहीं था आम तौर पर खराब व्यवहार का माना जाता है (हालांकि मैं मुझे यकीन नहीं है कि मैं सहमत हूं)। मैंने सोचा कि यह भी लोगो प्रमाणीकरण के साथ एक समस्या हो सकती है, हालांकि मुझे लगता है कि अगर सही है या नहीं पता नहीं है। –

-2

विकल्प हैं :

  1. फ़ाइल Mutex सेटिंग्स जो संगामिति संभाल कर सकते हैं स्टोर करने के लिए फ़ाइल के लिए उपयोग को नियंत्रित करने के
  2. दुकान सेटिंग्स के लिए डाटाबेस
  3. वेब सेवा
+0

मेरी समस्या सिंक्रनाइज़ेशन के साथ नहीं है, बल्कि इस तथ्य के साथ करने के लिए मुझे कहीं भी वैश्विक नहीं मिल रहा है कि एक गैर-व्यवस्थापक वास्तव में डेटा लिख ​​सकता है। – RaptorFactor

1

उपयोगकर्ता में सार्वजनिक फ़ोल्डर प्रोफाइल कोशिश निर्देशिका:

CSIDL_COMMON_DOCUMENTS 

संपादित करें: या प्रयोग करते हैं

CSIDL_COMMON_APPDATA 

लेकिन यदि संभव हो तो प्रमाणीकृत उपयोगकर्ता समूह को अनुमतियां सेट करें।

1

आप शायद CSIDL_COMMON_APPDATA की तलाश में हैं। आईआईआरसी जो भी एक अच्छा विकल्प होना चाहिए, आप किसी भी विंडोज लोगो प्रमाणन के लिए जाना चाहिए। यदि यह आपकी आवश्यकताओं के अनुरूप नहीं है, तो this link on MSDN पर जांचें, आपको अपनी आवश्यकताओं के लिए सबसे अच्छा फिट मिलना चाहिए।
शुभकामनाएं।

+0

बीटीडब्ल्यू: आपको उस निर्देशिका में किसी भी संवेदनशील उपयोगकर्ता डेटा को संग्रहीत करने से बचना चाहिए। – Dmitry

1

क्या आप केवल एक निश्चित निर्देशिका नाम का उपयोग नहीं कर सकते हैं, उदा। सी: \ FixedDataForYourProgram

हम इसे XP पर करते हैं। मैंने Vista/Win7 पर प्रोग्रामेटिक रूप से यह कोशिश नहीं की है, लेकिन Vista पर मानक उपयोगकर्ता के रूप में लॉग इन करने के लिए मुझे रूट के नीचे निर्देशिका बनाने में कोई समस्या नहीं है।

मुझे यकीन है कि यह सभी प्रकार के नियमों को तोड़ देता है, लेकिन यह आसान है। मुझे सरल पसंद है।

+0

सरल ... और गन्दा। यह एप्लिकेशन को उपयोगकर्ता-राज्य माइग्रेशन में काम करने के लिए कठिन बनाता है, रोमिंग उपयोगकर्ता प्रोफाइल आदि की उपस्थिति में – reuben

+0

लेकिन सवाल एक निश्चित स्थान चाहता है। यह निर्दिष्ट आवश्यकताओं (अनुमानित/वैश्विक/सुलभ) को पूरा करता है। समस्याओं को हल करने के लिए बहुत अधिक प्रयास नहीं होता है जो कभी नहीं उठता है। – IanH

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