2010-01-04 10 views
8

मेरे पास डेल्फी 2006 में लिखा गया एक एप्लीकेशन है जो विंडोज एक्सपी में ठीक काम कर रहा था। मैंने प्रोग्राम फ़ाइलों को डिफ़ॉल्ट फ़ोल्डर के रूप में उपयोग करके, इनो सेटअप का उपयोग करके एप्लिकेशन पैक किया। कुछ उपयोगकर्ता विंडोज विस्टा और विंडोज 7 में माइग्रेट हुए हैं। यहां मुद्दा यह है कि एप्लिकेशन अपने इंस्टॉलेशन फ़ोल्डर के अंदर कुछ फाइलें बनाता है। यह एक्सपी में काम कर रहा था लेकिन विंडोज विस्टा में उपयोगकर्ताओं को बनाई गई फाइलों में समस्याएं थीं (वे प्रकट नहीं होतीं और इसी तरह)। उपयोगकर्ताओं की रिपोर्ट की जांच करने के बाद मैंने KB 927387 खोजा: "विंडोज विस्टा या विंडोज 7 में सामान्य फ़ाइल और रजिस्ट्री वर्चुअलाइजेशन समस्याएं।"मैं अपने प्रोग्राम को विंडोज विस्टा और विंडोज 7 में कैसे काम करूं?

व्यवस्थापक अधिकारों के साथ एप्लिकेशन को चलाने से समस्या हल हो जाती है, लेकिन यह (मुझे लगता है) एक भयानक कामकाज है। मैं जानना चाहता हूं कि एप्लिकेशन को Vista और 7 के साथ संगत बनाने के लिए कोई निर्देश या सुझाव हैं, क्योंकि अधिक उपयोगकर्ता जल्द ही इन ओएस में माइग्रेट करेंगे।

+0

उपयोगकर्ता मानक उपयोगकर्ता होने पर आप Windows XP पर क्या करेंगे? –

उत्तर

12

Vista/Win7 के लिए, आपका ऐप प्रोग्राम फ़ाइलों/कार्यक्रमों के सबफ़ोल्डर में फ़ाइलों को तब तक नहीं डाल सकता जब तक कि यूएसी बंद नहीं हो जाता है या ऐप ऊंचा हो रहा है। ध्यान दें कि "उन्नत" का अर्थ "प्रशासक के रूप में लॉग इन" नहीं है। गैर-प्रशासक उपयोगकर्ता बढ़ सकते हैं, और प्रशासक जरूरी नहीं है।

यदि ऐप प्रोग्राम फ़ाइलों को लिखने का प्रयास करता है लेकिन ऊंचा नहीं होता है, तो ओएस या तो एएसी को कॉन्फ़िगर करने के तरीके के आधार पर ऐप को ब्लॉक या "वर्चुअलाइज" लिख देगा (फ़ाइलों को कहीं और रखेगा)। कोई भी ऐप को जो भी कोशिश कर रहा था उस पर सफल होने में मदद करता है।

तो इसे कहीं और रखना होगा। कहां पर निर्भर किया जाता है कि फाइलें क्यों बनाई जा रही हैं, और आपने हमें यह नहीं बताया है। विकल्पों के बारे में जानने के लिए आप this article पढ़ सकते हैं। ध्यान दें कि उपयोगकर्ता के ऐपडाटा और रोमिंग फ़ोल्डर्स के अतिरिक्त, "सभी उपयोगकर्ता" (साझा) प्रोफ़ाइल भी है।

आपको शायद this article and screencast पर देखना चाहिए, जो डेल्फी बिंदु से गहराई से यूएसी पर चर्चा करता है।

3

यहां ज़ारको गजिक द्वारा another article है, जो दिखाता है कि विभिन्न सिस्टम निर्देशिका कैसे प्राप्त करें। this related question पर भी एक नज़र डालें।

13

आपको XP में भी, उचित रूप से अपनी फ़ाइलों को स्टोर करने के लिए अपने एप्लिकेशन को फिर से लिखना होगा, लेकिन विशेष रूप से Vista में, खासकर यदि यूएसी सक्षम है। यह सही होने के लिए और अधिक महत्वपूर्ण हो रहा है क्योंकि माइक्रोसॉफ्ट प्रत्येक नए ओएस संस्करण के साथ अपने सुरक्षा मॉडल को लॉक कर रहा है और लागू कर रहा है। आवेदन को सही ढंग से प्रबंधित करने के तरीके के नियम- और उपयोगकर्ता से संबंधित फाइलों को एमएसडीएन पर दस्तावेज किया गया है, उदाहरण के लिए: "Application Specification for Microsoft Windows 2000 for Desktop Applications, Chapter 4: Data and Settings Management" और "Application Specification for Microsoft Windows 2000 for Desktop Applications Appendix A: Best Practices" (हाँ, वे पुराने हैं, लेकिन अभी भी काफी प्रासंगिक हैं)। SHGetSpecialFolderLocation(), SHGetFolderPath(), SHGetKnownFolderPath() और अन्य संबंधित फ़ंक्शंस को आपकी सहायता के लिए देखें।

4

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

उन मामलों के लिए जहां आपको पूरी तरह से प्रोग्राम फाइल निर्देशिका में फ़ाइल रखना होगा, आप ऊंचाई का अनुरोध करने के लिए कॉम का उपयोग कर सकते हैं। This is discussed in great detail, और delphi specific bits are also available। एक उदाहरण जिसका मैंने इसका उपयोग किया है वह मेरे उपयोगकर्ताओं के इंस्टॉलेशन बेस को पैच करने में है। उन्हें यूएसी द्वारा चेतावनी दी जाती है कि सिस्टम को बदलाव करने की जरूरत है, इसलिए यदि आप इसे स्वचालित कार्य के रूप में कर रहे हैं, तो आपको अधिक उपयोगकर्ता संचालित होने के लिए तर्क पर पुनर्विचार करना पड़ सकता है।

2

मेरे पास इसी तरह की पूछताछ here (स्टैक ओवरफ़्लो) थी।

अंत में मुझे एहसास हुआ कि मुझे अपने आवेदन को प्रोग्राम समय में इंस्टॉल समय (यूएसी/एलिवेशन की आवश्यकता) पर रखना होगा और फिर मेरे ऐप के डेटा को उपयोगकर्ता के ऐप डेटा फ़ोल्डर में स्टोर करना होगा। मुझे अपने प्रोग्राम को 'डिफ़ॉल्ट' कॉन्फ़िगरेशन सेटिंग्स और जिस तरह से मैं इस सामग्री को सहेज रहा था, उसे बदलना पड़ा, लेकिन अंत में प्रयास के लायक था - हमने कुछ ऐसा स्थापित किया जो XP, Vista और Windows 7 पर ठीक है और चलाता है

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

हमारे द्वारा उपयोग किए जाने वाले इंस्टॉलर सॉफ़्टवेयर (सेटअप फैक्ट्री) ने इसे काफी सरल बना दिया है (हमने XP बनाम Vista/Win7 का पता लगाने के लिए कोड का एक छोटा सा कोड लिखा है और तदनुसार सही विशेष फ़ोल्डर चुनें)। इनो सेटअप में भी ऐसा करना आसान होगा, मेरे पास सीमित अनुभव से।

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