2010-04-23 10 views
9

मेरे पास एक सी # ऐप है जो कुछ दृश्य तत्वों की वर्तमान स्थिति को संग्रहीत करने के लिए स्वयं के लिए एक सेटिंग फ़ाइल बनाता है। यह ऐप किसी भी मशीन पर ठीक काम करता है जो विंडोज 7 नहीं चला रहा है, लेकिन उन मशीनों पर हमें एक त्रुटि मिलती है कि सेटिंग्स फ़ाइल नहीं बनाई जा सकती क्योंकि उपयोगकर्ता को अनुमति नहीं है। अब, मैं प्रत्येक कंप्यूटर पर जाकर, व्यवस्थापक के रूप में लॉग इन करके और उपयोगकर्ता को हमारे द्वारा इंस्टॉल किए गए एप्लिकेशन के लिए प्रोग्राम फ़ोल्डर पर पहुंच पढ़ने और लिखने के द्वारा इस समस्या को ठीक कर सकता है, लेकिन एक बेहतर तरीका होना चाहिए।मेरा सी # ऐप विंडोज 7 में फाइल क्यों नहीं बना सकता?

यह XP में की तरह लगता है, तो आप फ़ोल्डर डिफ़ॉल्ट रूप से बनाया पर लिखने मिल गया है, लेकिन स्थिति अब और नहीं है। क्या इस काम को करने के लिए सेटअप पैकेज में मुझे एक सेटिंग चाहिए?

+0

क्या आपने जांच की है कि आपका सेटअप पैकेज सेटिंग निर्देशिका को लिखने योग्य और सही उपयोगकर्ता को असाइन कर रहा है? – AlG

+2

आप यह नहीं कहते कि आप कहां फाइलें बना रहे हैं, जो उपयोगी जानकारी हो सकती है –

उत्तर

19

बिंदु यह है कि आपको प्रोग्राम फ़ोल्डर में सेटिंग्स फ़ाइलों को संग्रहित नहीं करना चाहिए। माइक्रोसॉफ्ट ने लंबे समय से इसके खिलाफ सलाह दी है, लेकिन विस्टा आईआईआरसी के साथ चीजों को कठोर बनाना शुरू कर दिया है।

उपयोग Environment.SpecialFolders.ApplicationData (आदि) सेटिंग्स डाल करने के लिए सबसे उपयुक्त जगह खोजने के लिए। या .NET सेटिंग्स आधारभूत संरचना का उपयोग करें जो यह आपके लिए स्वचालित रूप से करता है।

+2

धन्यवाद, मुझे पता था कि मैं कुछ मौलिक रूप से गलत कर रहा था। मैं वर्षों से प्रोग्राम फ़ोल्डर में डेटा संग्रहीत कर रहा हूं, और यह आदत का एक बल है। मैंने एप्लिकेशन डेटा में अपना खुद का फ़ोल्डर बनाने के लिए स्विच किया और सब कुछ ठीक काम करता है। –

7

क्या आप स्थापना फ़ोल्डर में फ़ाइलों को बनाने की कोशिश कर रहे हैं? आपको डेटा के लिए उपयोगकर्ता डेटा फ़ोल्डर का उपयोग करना चाहिए, न कि इंस्टॉलेशन फ़ोल्डर्स। एक फ़ोल्डर प्राप्त करने के लिए Environment.SpecialFolders.ApplicationData फ़ोल्डर का उपयोग करें जिसे आप लिख सकते हैं।

4

आप शायद अपने गैर विंडोज 7 मशीन है जो एक कहीं भी लिखने पर एक प्रशासक के रूप में चला रहे हैं। अपने ऐपडाटा फ़ोल्डर में प्रति उपयोगकर्ता आवृत्ति डेटा को सहेजना सुनिश्चित करें (रोमिंग अगर उन्हें कंप्यूटर से कंप्यूटर पर ले जाना चाहिए, या स्थानीय यदि यह कैश या स्थानीय केवल टैट मशीन के लिए)। यदि आपको उपयोगकर्ताओं के बीच सेटिंग्स साझा करने की आवश्यकता है, तो उपयुक्त अनुमतियों के साथ C: \ ProgramData फ़ोल्डर का उपयोग करें।

एक प्रोग्राम को इसकी स्थापना निर्देशिका में सेटिंग्स को स्टोर करने का प्रयास नहीं करना चाहिए।

सही स्थान प्राप्त करने के लिए के साथ SpecialFolders का उपयोग करना सुनिश्चित करें। आपको कभी भी हार्ड कोड पथ नहीं होना चाहिए क्योंकि वे संस्करणों और भाषाओं के बीच अलग हो सकते हैं। (मुझे XP के जर्मन संस्करण में पता है कि यह Program Files नहीं था लेकिन Programme!)

2

यह आपके प्रोग्राम में एक सुरक्षा दोष है क्योंकि आपका प्रोग्राम प्रोग्राम निर्देशिका (जो है, और संरक्षित होना चाहिए) को जानकारी लिख रहा है।) यदि यह मूल कारण को सही करने की स्थिति है, तो SpecialFolder enumeration या Application पर स्थिर सदस्यों को CommonAppDataPath जैसे अधिक उचित स्थान पर अपनी जानकारी लिखने के लिए उपयोग करने पर विचार करें।

पथ के माध्यम से फ़ाइल लिखने के लिए सामान्य दृष्टिकोण मानते हुए, यह एक मामूली फिक्स है और मूल कारण को सही नहीं करने के लिए कोई अच्छा "योग्यता" कारण नहीं है। यदि आप पथ में हेरफेर करने के बारे में सुनिश्चित नहीं हैं, तो Path.Combine() का उपयोग करने पर विचार करें। यह आपके लिए करता है।

2

सामान्य रूप से, आपको प्रोग्राम फ़ाइलों के नीचे किसी भी फ़ोल्डर में प्रोग्राम डेटा नहीं लिखना चाहिए (भले ही आपने फ़ोल्डर बनाया हो)। अपने आवेदन विशिष्ट डेटा को कहां रखा जाए, यह जानने के लिए आपको Environment.GetFolderPath(...) का उपयोग करना चाहिए। आप कई here परिभाषित enums में से एक में पारित कर सकते हैं - आप शायद Environtment.SpecialFolder.CommonApplicationData

3

इस अनुप्रयोग है कि विंडोज 7

गलत नहीं चल रहा है किसी भी मशीन पर बस ठीक काम करता है चाहता हूँ! यह केवल उन मशीनों पर काम करता है यदि आप व्यवस्थापक के रूप में चलाते हैं।मुझे लगता है कि आप पाएंगे कि आपका प्रोग्राम विंडोज एक्सपी पर भी टूट गया है, भले ही आप इसे होम कंप्यूटर के बजाए किसी भी व्यवसाय कंप्यूटर पर चलाने की कोशिश करें।

इसके बजाए, इस तरह की जानकारी को विशेष एप्लिकेशन डेटा फ़ोल्डरों में से एक में जाना होगा।

2
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
-1

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

+0

तो आपने बस इतना कहने के लिए * उत्तर * लिखा था? कृपया टिप्पणियों का उपयोग करें या एक नया प्रश्न पूछें (हां, आप अभी भी टिप्पणियों तक नहीं पहुंच सकते हैं, आपको कुछ वास्तविक उत्तर प्रदान करना होगा या प्रतिनिधि प्राप्त करने के लिए पहले अच्छे प्रश्न पूछना होगा) – Leeor

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