2016-10-21 4 views
8

मेरे पास विंडोज 10 पीसी पर सी # एप्लिकेशन है। इंस्टॉल फ़ोल्डर (सी: \ प्रोग्राम फ़ाइलें (x86) \ xxx) में सेटिंग्स फ़ाइलें हैं जिन्हें मैं पढ़ना चाहता हूं, लेकिन जब तक कि उपयोगकर्ता के पास व्यवस्थापक पहुंच न हो तब तक संपादित नहीं किया जाता है। समस्या यह है कि विंडोज़ इन सेटिंग्स फ़ाइलों को वर्चुअलस्टोर में कॉपी कर रही है और वहां सभी रीड रीडायरेक्ट कर रही है - जबकि व्यवस्थापक के रूप में चलाए गए एक ही ऐप प्रोग्राम फाइल फ़ोल्डर में मूल सेटिंग्स फ़ाइलों को देखता है।वर्चुअलस्टोर को कैसे छोड़ें और प्रोग्राम फ़ाइलें फ़ोल्डर में फ़ाइलों को कैसे पढ़ा जाए?

मेरा प्रश्न: क्या व्यवस्थापक के रूप में नहीं चलाए जाने पर भी एप्लिकेशन फ़ाइलों में मूल फ़ाइलों को देखने के लिए कोई तरीका है? मैं बस उन्हें पढ़ना चाहता हूं, उन्हें संपादित नहीं करना चाहता हूं।

+0

यदि आप केवल उन्हें पढ़ रहे हैं, तो उस फ़ाइल के प्रतिलिपि संस्करण को पढ़ने में समस्या क्या है? – ChrisBint

+0

क्योंकि जब व्यवस्थापक के रूप में चलाया जाता है, तो आप उन्हें संपादित कर सकते हैं - लेकिन इस मामले में यह प्रोग्राम फ़ाइलों फ़ोल्डर में संस्करणों को संपादित करता है, न कि वर्चुअल स्टोर संस्करण। तो गैर-व्यवस्थापक उदाहरण के दृष्टिकोण से, फ़ाइलें परिवर्तित नहीं होती हैं। – Sugrue

+0

यह किस बिंदु पर फाइलों की प्रतिलिपि बनाता है? – ChrisBint

उत्तर

7

आपको Program Files (x86) फ़ोल्डर से फ़ाइल को पढ़ने के लिए उन्नत अनुमतियों की आवश्यकता नहीं है। जांचें कि आप पढ़ने के लिए फ़ाइल कैसे खोलते हैं। आपको सामान्य उपयोगकर्ता मोड में और उन्नत मोड में अलग FileAccess ध्वज निर्दिष्ट करना चाहिए। सामान्य उपयोगकर्ता मोड के लिए यह FileAccess.Read` साथ खोला जाना चाहिए:

using (FileStream settingsFile = new FileStream(@"C:\Program Files (x86)\xxx", FileMode.Open, FileAccess.Read)) 
{ 
    // Do the job 
} 

ऊंचा अनुमति के साथ IsProcessElevated विधि का उपयोग आवेदन चलाता है, तो यह निर्धारित करने के। परिणाम के आधार पर आप उचित FileAccess मोड का चयन करने में सक्षम हैं।

+0

धन्यवाद - मैं दोबारा जांच करूंगा कि मैं फ़ाइल को सही तरीके से खोल रहा हूं। – Sugrue

+1

@ सुग्रे अपने एप्लिकेशन के फ़ाइल यातायात को बेहतर ढंग से समझने के लिए आप Sysinternals सूट से ['प्रक्रिया मॉनीटर'] (https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx) का उपयोग कर सकते हैं। यह एप्लिकेशन द्वारा अनुरोध की गई प्रत्येक फ़ाइल के लिए वांछित पहुंच दिखाएगा। – Nikita

+1

हाय निकिता - हमने दोबारा चेक किया - और हम कोड के दूसरे खंड में बेवकूफ थे, जहां यह फाइलें गलत तरीके से खोल रहा था। सब ठीक है। धन्यवाद, – Sugrue

1

प्रोग्राम फ़ाइलों में मूल फ़ाइलों को देखने का तरीका वहां लिखना नहीं है (और उस अंत में केवल पढ़ने के लिए खुली फाइलें जैसे कि निकिता बताती हैं)। वर्चुअलस्टोर का उपयोग नहीं किया जाना है, लेकिन एप्लिकेशन के मुद्दों को ठीक करने के लिए। इस तरह के मुद्दे पुराने एकल उपयोगकर्ता विंडोज के लिए लिखे गए टूटे हुए अनुप्रयोगों के उदाहरण के कारण होते हैं, जब वर्तमान दिन विंडोज (एनटी के बाद) अलग-अलग उपयोगकर्ताओं से समसामयिक सत्र हो सकता है।

यदि कोई एप्लिकेशन सभी उपयोगकर्ताओं के बीच साझा की गई डेटा फ़ाइलों को संशोधित करना चाहता है, तो उसे फ़ाइलों को सभी उपयोगकर्ता प्रोफ़ाइल में सहेजना चाहिए। यदि यह उपयोगकर्ता डेटा है, तो यह उपयोगकर्ता प्रोफ़ाइल में डेटा डेटा फ़ोल्डर में डेटा स्टोर कर सकता है। यदि आप चाहते हैं कि डेटा रोमिंग या स्थानीय हो, तो एप्लिकेशन डेटा में आप अभी भी विकल्प के साथ छोड़े गए हैं।

इन फ़ोल्डर्स के पथ अलग-अलग विंडोज संस्करणों पर अलग हैं। विंडोज इंस्टालर के पास पथों पर सेट गुण हैं। अनुप्रयोगों में कई इंटरफेस हैं जिनका उपयोग वे कर सकते हैं। एक इंटरफ़ेस के लिए Working with Known Folders in Applications और SHGetKnownFolderPath देखें।

इसके अलावा, प्रोग्राम फ़ाइलों तक पहुंच UAC के पीछे है। सभी विवरण सही पाने के लिए आपको इसे पढ़ना चाहिए।

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