2009-02-11 9 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो .NET (C# विशेष रूप से) में सभी उपयोगकर्ताओं (व्यवस्थापक या सीमित) द्वारा उपयोग योग्य है।सी # सीमित उपयोगकर्ता खाते में चलाए जाने पर व्यवस्थापक द्वारा बनाई गई फ़ाइलों को पढ़/लिख नहीं सकता है XP

जब एप्लिकेशन पहले लॉन्च होता है - यह कुछ फ़ाइलों को बनाता है जिन्हें सी: \ दस्तावेज़ों और सेटिंग्स \ सभी उपयोगकर्ता \ दस्तावेज़ \ में सभी बाद के लॉन्च के लिए आवश्यक है।

तो XP में सीमित उपयोगकर्ता आवेदन यह फ़ाइलें ठीक बनाता है और दोनों सीमित उपयोगकर्ता और प्रशासकों ठीक चला सकते हैं शुरू करने के लिए सबसे पहले उपयोगकर्ता है।

हालांकि अगर प्रशासक (या मैं एक अलग सीमित उपयोगकर्ता का अनुमान लगा रहा हूं) एप्लिकेशन लॉन्च करने वाला पहला व्यक्ति है तो सीमित उपयोगकर्ता एप्लिकेशन को चलाने में सक्षम नहीं है।

दो फाइलें जो इसे प्रशासक द्वारा बनाई गई/पढ़ने के लिए लिखने में सक्षम नहीं हैं, एक लॉग 4नेट लॉग फ़ाइल और SQLite डीबी फ़ाइल है।

SQLite डेटाबेस फ़ाइल को एक स्ट्रेटफोर्ड .NET फ़ाइल.कॉपी (सोर्सपाथ, गंतव्यपाथ) के साथ बनाया जा रहा है। सोर्सपाथ एप्लिकेशन के साथ स्थापित एक बीज डेटाबेस फ़ाइल है - इसलिए पहले इसे कॉपी करें कि सी: \ प्रोग्राम फ़ाइलें \ एप इंस्टॉल \ seed.db

फ़ाइल पर अनुमतियां सेट करने का कोई तरीका है इसे कॉपी करें? File.SetAccessControl() शायद? मैं इस बात पर स्पष्ट नहीं हूं कि यह कैसे काम करता है।

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

कोई भी विचार? विडंबना यह है कि Vista में सीमित/व्यवस्थापक खातों के साथ यह सब ठीक तरह से ठीक काम करता है - यह केवल XP/व्यवस्थापक खातों के साथ XP में हो रहा है।

+0

क्यों यह एक ही पीसी पर एकाधिक उपयोगकर्ताओं के बीच फ़ाइलों को साझा कर रहा है? इस लगभग कभी नहीं एक अच्छा निर्णय है। क्यों नहीं बस के रूप में की जरूरत है प्रत्येक व्यक्ति को उपयोगकर्ता के AppData फ़ोल्डर में फ़ाइलें डाल? –

उत्तर

2

हाँ, यह SetAccessControl विधि सब ठीक है, वहाँ एक अच्छा उदाहरण here (satankidneypie से पोस्ट)

गुड लक

+0

धन्यवाद - कि लिंक वास्तव में क्या मैं जरूरत (विशेष रूप से एक सांस्कृतिक स्वतंत्र ढंग से 'हर कोई "उपयोगकर्ता प्राप्त करने के लिए क्षमता के साथ) है – jonathanq

6

है मुझे लगता है कि SetAccessControl जाने का रास्ता है। इस तरह हो सकता है कि कुछ:

// get the existing access controls 
FileSecurity fs = File.GetAccessControl(yourFilename); 

// add the new rule to the existing settings 
fs.AddAccessRule(new FileSystemAccessRule(
    @"DOMAIN\Users", // or "BUILTIN\Users", "COMPUTER\AccountName" etc 
    FileSystemRights.Modify, 
    AccessControlType.Allow)); 

// set the updated access controls 
File.SetAccessControl(yourFilename, fs); 

ध्यान दें: यह है कि आप फ़ाइल से मौजूदा अभिगम नियंत्रण सूची प्राप्त करें और फिर उस के लिए अपने नए नियम जोड़ने के लिए महत्वपूर्ण है। यदि आप स्क्रैच से केवल एक नई पहुंच नियंत्रण सूची बनाते हैं तो यह मौजूदा अनुमतियों को पूरी तरह से ओवरराइट कर देगा।

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