2008-12-05 11 views
14

मैं अपनी निर्भर फाइलों को ऐप निर्देशिका में रखना चाहता हूं।ऐप निर्देशिका से डीएलएल और ओसीएक्स का उपयोग करने के लिए आप वीबी 6 को कैसे मजबूर कर सकते हैं?

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

कोई संकेत?

उत्तर

12

आप अपनी परियोजना के लिए Reg-Free COM सेट अप करने का प्रयास भी कर सकते हैं।Make My Manifest नामक एक फ्रीवेयर है जो आपके लिए अधिकांश काम करेगा

EDIT एमएमएम वेबसाइट नीचे है। मुझे here दिखाई देता है कि लेखक को उनकी होस्टिंग में परेशानी हो रही थी और मेक माय मेनिफेस्ट - download it here प्राप्त करने के लिए एक और स्थान प्रदान किया गया है।

5

इसे अपने आप को मिल गया:

विंडोज अनुप्रयोग निर्देशिका में पहली दिखता है: SafeDllSearchMode सक्षम है, तो खोज के क्रम इस प्रकार है:

  1. निर्देशिका है जहाँ से आवेदन लोड।
  2. सिस्टम निर्देशिका। इस निर्देशिका का मार्ग प्राप्त करने के लिए GetSystemDirectory फ़ंक्शन का उपयोग करें।
  3. 16-बिट सिस्टम निर्देशिका। इस निर्देशिका के पथ को प्राप्त करने वाला कोई फ़ंक्शन नहीं है, लेकिन इसकी खोज की गई है।
  4. विंडोज निर्देशिका। इस निर्देशिका का मार्ग प्राप्त करने के लिए GetWindowsDirectory फ़ंक्शन का उपयोग करें।
  5. वर्तमान निर्देशिका।
  6. निर्देशिका जो PATH पर्यावरण चर में सूचीबद्ध हैं। ध्यान दें कि इसमें ऐप पथ रजिस्ट्री कुंजी द्वारा निर्दिष्ट प्रति-अनुप्रयोग पथ शामिल नहीं है। डीएलएल खोज पथ की गणना करते समय ऐप पथ कुंजी का उपयोग नहीं किया जाता है।

तो SafeDllSearchMode अक्षम है, खोज के क्रम इस प्रकार है:

1. निर्देशिका है जहाँ से आवेदन लोड। 2. वर्तमान निर्देशिका। 3. सिस्टम निर्देशिका। इस निर्देशिका का मार्ग प्राप्त करने के लिए GetSystemDirectory फ़ंक्शन का उपयोग करें। 4. 16-बिट सिस्टम निर्देशिका। इस निर्देशिका के पथ को प्राप्त करने वाला कोई फ़ंक्शन नहीं है, लेकिन इसकी खोज की गई है। 5. विंडोज निर्देशिका। इस निर्देशिका का मार्ग प्राप्त करने के लिए GetWindowsDirectory फ़ंक्शन का उपयोग करें। 6. निर्देशिका जो पैथ पर्यावरण चर में सूचीबद्ध हैं। ध्यान दें कि इसमें ऐप पथ रजिस्ट्री कुंजी द्वारा निर्दिष्ट प्रति-अनुप्रयोग पथ शामिल नहीं है। डीएलएल खोज पथ की गणना करते समय ऐप पथ कुंजी का उपयोग नहीं किया जाता है।

के अनुसार

: http://msdn.microsoft.com/en-us/library/ms682586.aspx

लेकिन आप अनुप्रेषित कर सकते हैं जहां यह .dll के लिए लग रहा है एक प्रकट उपयोग कर रहा है:

http://msdn.microsoft.com/en-us/library/aa375365(VS.85).aspx

5

यह एक तरह से भ्रमित हो सकते हैं क्योंकि खिड़कियों के हर संस्करण, नियम परिवर्तन। विंडोज़ के पुराने संस्करण वर्तमान निर्देशिका से पहले पथ खोजते हैं।

प्रकट होता है बिना एक सरल समाधान:

यदि आपका निष्पादन योग्य फ़ाइल A.EXE है, A.EXE.local नामित एक ही निर्देशिका में (0-बाइट, खाली) फ़ाइल जोड़ने - Windows के पुराने संस्करणों के लिए इस आगे एप्लिकेशन निर्देशिका डालता है खोज आदेश में पथ का।

+1

यह Win2k + पर सही उत्तर है। कृपया ध्यान रखें, हालांकि, यदि एएक्सईई में एक एम्बेडेड मैनिफेस्ट है, या यदि एएक्सई.मैनिफेस्ट मौजूद है (जैसे कि reg-free COM को सक्षम करने के लिए, अपना प्रोग्राम डीपीआई जागरूक, आदि), .local फ़ाइल को अनदेखा किया जाता है , क्योंकि प्रकट होता है एक प्रतिस्थापन प्रौद्योगिकी के रूप में। यदि आपके मामले में, यह मामला है, तो आप बस उन फ़ाइलों को सूचीबद्ध कर सकते हैं जिन्हें आप अपनी ऐप निर्देशिका से उपयोग करना चाहते हैं ताकि उन्हें वहां से लोड किया जा सके: <फ़ाइल नाम = "my.dll" /> –

6

खोज आदेश के बारे में मिट्टी निकोल का जवाब बिल्कुल सही नहीं है। वह खोज आदेश केवल गैर-COM घटकों पर लागू होता है। अर्थात। केवल कुछ डीएलएल, और ओसीएक्स नहीं। यदि आप अपनी COM ऑब्जेक्ट्स पंजीकृत करते हैं, तो वे निर्देशिका से उपयोग किए जाएंगे, जहां वे स्थानीय निर्देशिका में पर पर निर्भर करते हैं, आप reg-free COM या alocal फ़ाइल का उपयोग करते हैं।

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

MakeMyManifest अच्छी तरह से VB6 परियोजनाओं के लिए प्रकट होता है बनाने के लिए एक स्वचालित उपकरण के रूप में की बात की है, यह अपने आप को प्रयास नहीं किया है। DirectCOM में भी प्रशंसकों हैं, फिर मैंने कोशिश नहीं की है।

EDIT एमएमएम वेबसाइट नीचे है। मुझे here दिखाई देता है कि लेखक को उनकी होस्टिंग में परेशानी हो रही थी और मेक माय मेनिफेस्ट - download it here प्राप्त करने के लिए एक और स्थान प्रदान किया गया है।

reg-free COM प्रकट करने के लिए एक अर्द्ध स्वचालित तकनीक है। आप विजुअल स्टूडियो 2008 के साथ प्रकट कर सकते हैं (आप विजुअल बेसिक एक्सप्रेस संस्करण जैसे एक मुक्त संस्करण का उपयोग कर सकते हैं)। फिर VB6 से उपयोग के लिए उपयुक्त प्रकट करने के लिए हाथ से कुछ संपादन करें। चरण-दर-चरण निर्देशों के लिए इस एमएसडीएन आलेख के this section देखें - क्लिकऑन के बारे में शेष लेख को अनदेखा करें।

6

EXE फ़ोल्डर में (या बिना .local फ़ाइलों के) घटक पुस्तकालयों को रखना लक्ष्य मशीनों की स्वच्छता के लिए भी हानिकारक हो सकता है।

वीबी 6 प्रोग्राम आपके बैक के पीछे स्वयं-reg प्रविष्टि बिंदु के माध्यम से घटकों को पंजीकृत करेंगे यदि वे पहले पंजीकृत नहीं हैं। फिर यदि एप्लिकेशन को स्थानांतरित या हटा दिया जाता है तो आप उपयोगकर्ता को एक टूटी हुई पुनर्गठन के साथ छोड़ देते हैं - संभवतः बाद में कुछ अनुप्रयोगों का उपयोग करके स्थापित अनुप्रयोगों के लिए घातक। यह संभवतः ठीक है हालांकि अनुप्रयोग विशिष्ट घटकों के लिए, यानी आपके स्वयं के डीएलएल या ओसीएक्स जो कभी भी किसी अन्य एप्लिकेशन द्वारा आवश्यक नहीं होंगे।

.local चाल वास्तव में वीबी 6 प्रोग्राम के उपयोग के लिए नहीं थी और यदि इसका उपयोग किया जाता है तो आपके इंस्टॉलर को जागरूक होने और सही ढंग से स्थापित करने और घटकों को पंजीकृत करने की आवश्यकता होती है यदि वे पहले से ही मशीन पर नहीं हैं। यह व्यक्तिगत मशीनों पर डीएलएल संस्करण संगतता समस्याओं के आसपास एक मैनुअल हैक के रूप में था, तैनाती रणनीति नहीं।

बेहतर समाधान के लिए एसएक्सएस एप्लिकेशन और असेंबली मैनिफेस्ट (रेग-फ्री COM और अधिक) तक जाएं। डीएलएल/कॉम रीडायरेक्शन (.local) एक अच्छा प्रयास था लेकिन इसमें कई मौसा हैं।

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