2012-01-02 9 views
9

मैं उस फ़ोल्डर का पूरा पथ कैसे निर्धारित करूं जिसमें वीबीए का उपयोग कर 32-बिट प्रोग्राम शामिल हैं? इसे 32-बिट विंडोज सिस्टम पर "प्रोग्राम फ़ाइलें" कहा जाता है, लेकिन 64-बिट सिस्टम पर इसे "प्रोग्राम फ़ाइलें (x86)" कहा जाता है।"प्रोग्राम फाइल" फ़ोल्डर का पथ प्राप्त करें जिसमें 32-बिट प्रोग्राम

+0

आप 32 और 64 बंद बिट्स – rene

+0

किसी विशेष ओएस पर? – rene

+3

@rene: यह उस पर निर्भर करता है जिसका अर्थ है। 32 बिट विन XP पर, केवल एक "प्रोग्राम फ़ाइलें" फ़ोल्डर है। "प्रोग्राम फ़ाइलें (x86)" आमतौर पर केवल 64 बिट विंडोज़ के तहत उपलब्ध होती है। –

उत्तर

14

पर्यावरण चाल करना होगा:

debug.print Environ("ProgramFiles") 
debug.print Environ("PROGRAMFILES(X86)") 

'If you want to check if current PC is x64 
debug.print Environ("PROCESSOR_IDENTIFIER") 

वातावरण चर की सूची here पाया जा सकता है।


अद्यतन: बातचीत मैं ईसाई के साथ था और मेरी टिप्पणी के आधार पर किया है के आधार पर, मैं इस एक छोटे से अधिक में देखा।

मैं दो मशीनों मैं पर परीक्षण किया है:

  • मशीन 1: 7 विन परम, 64 बिट, Office 2010 64 बिट
  • मशीन 2: 7 विन अंतिम 32 बिट, कार्यालय

    : 2007 32 बिट

मैं तत्काल विंडो में निम्नलिखित बयानों भाग गया

परिणाम

मशीन 1:

C:\Program Files 
C:\Program Files (x86) 
C:\Program Files 

मशीन 2:

C:\Program Files 
//Blank// 
//Blank// 

तो, इन सीमित निष्कर्षों के आधार पर, आप अगर ProgramW6432 को देखने के लिए चाहते हो सकता है एक कीमत। यदि नहीं, 32 बिट मानें और प्रोग्रामफाइल का उपयोग करें।

IF Environ("ProgramW6432") <> "" THEN 
    'I'm 64 bit so check both ProgramW6432 and PROGRAMFILES(X86) 
ELSE 
    'I'm 32 bit so check ProgramFiles 
END IF 

विपरीत, यदि आप PROCESSOR_IDENTIFIER का उपयोग 64 बनाम 86 निर्धारित करने के लिए और एक ही बात कर सकता है।

मैं नहीं कहूंगा कि मूर्खतापूर्ण तरीका है लेकिन आपको सही रास्ते पर ले जाना चाहिए।दोनों
Environ("ProgramFiles") और
Environ("PROGRAMFILES(X86)")

कम से कम मेरी मशीन पर (विन 7 होम प्रीमियम 64 बिट, एक्सेस 2000 स्थापित), ...:

+0

ग्रेट समाधान; त्वरित सवाल क्या होता है यदि हम 32-बिट मशीन पर इसे चलाते हैं, तो वातावरण ("प्रोग्राम (FL86)" ("प्रोग्राम) (बस) रिक्त हो जाता है? क्षमा करें मेरे पास हाथ नहीं है। – James

+0

मेरे पास एक आसान नहीं है, लेकिन वातावरण ("HELLO_WORLD") एक खाली स्ट्रिंग देता है, इसलिए मुझे लगता है कि आपको वही परिणाम मिल जाएगा यदि वह चर केवल x64 मशीनों पर उपयोग किया जाता है। वर्चुअल पीसी (और अन्य ओएस अनुकरणक) निःशुल्क हैं। यदि आपके पास x86 ओएस आसपास झूठ बोल रहा है, तो धूल को उड़ाएं, वर्चुअल वातावरण में स्थापित करें और देखें कि क्या होता है। :) – ray

+1

इसके अलावा, मैंने अभी ईसाई के जवाब को देखा है और मुझे ध्यान रखना चाहिए कि मेरी मशीन पर, मुझे var "ProgramFiles" बनाम "प्रोग्राफाइल (X86)" के साथ अलग-अलग फ़ोल्डर्स मिलते हैं। आप शायद x64 फ़ोल्डर प्राप्त करने के लिए उसकी सिफारिश का उपयोग कर सबसे अच्छा होगा; और, यहां अनुमान लगाएं, यदि दोनों "प्रोग्राम (X86)" और "ProgramW6432" रिक्त मान लौटाते हैं, तो "प्रोग्रामफाइल" तब लागू होंगे। – ray

4

यहाँ एक लेख आपको दिखा रहा है कैसे रजिस्ट्री से इस जानकारी को पढ़ने के लिए:

http://accesstips.wordpress.com/2010/01/08/get-a-computers-program-files-folder-path-with-access-vba-and-wmi/

उस लेख की टिप्पणी में भी एक संकेत है कि "ProgramFiles" वातावरण चर से जानकारी पुनः प्राप्त करने के लिए है । लेकिन सावधान रहें, यदि आपके पास अलग-अलग विभाजन हैं, तो एक से अधिक "प्रोग्राम फ़ाइलें" फ़ोल्डर हो सकते हैं, उदाहरण के लिए "C:\Program Files" और "D:\Program Files"

6

ray023's answer मूल रूप से सही है, लेकिन एक अतिरिक्त उसी फ़ोल्डर को वापस करें, C:\Program Files (x86)

मेरे 64 बिट विंडोज़ पर "गैर-x86-folder" (C:\Program Files) प्राप्त करने के लिए, मुझे Environ("ProgramW6432") का उपयोग करने की आवश्यकता है।

Here's another linkEnviron फ़ंक्शन के बारे में, कोड सहित सभी पर्यावरण चर सूचीबद्ध करने के लिए कोड (जिसमें मुझे ProgramW6432 मिला)।


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

जैसा कि मैंने पहले से ही एक टिप्पणी में कहा, मैं सिर्फ यह मेरे अन्य मशीन पर परीक्षण के रूप में परिणाम निर्भर करने के लिए न केवल ऑपरेटिंग सिस्टम पर है, लेकिन स्थापित एमएस ऑफ़िस पर लग रहे हैं संस्करण के रूप में अच्छी तरह से:

इस मशीन विन XP SP3 32 बिट पर चलता है, और एक्सेस 2000 स्थापित किया गया है:

Environ("ProgramFiles") रिटर्न C:\Programme
(कि जर्मन में "प्रोग्राम फ़ाइलें" है - मैं जर्मनी में हूँ और मेरे Windows जर्मन में है)

Environ("PROGRAMFILES(X86)") और Environ("ProgramW6432") कोई रिक्त स्ट्रिंग लौट आते हैं।

-> इसलिए "x86 फ़ोल्डर" निर्धारित करने का सबसे सुरक्षित तरीका (Win XP या Win 7 पर कोई फर्क नहीं पड़ता) Environ("ProgramFiles") लगता है।

+0

मैं इसकी पुष्टि नहीं कर सकता; मुझे अपेक्षित परिणाम मिलते हैं? मैं कार्यालय के 64-बिट संस्करण का उपयोग कर रहा हूं, क्या मैं पुष्टि कर सकता हूं कि आप हैं, जैसा कि मुझे संदेह है कि आप नहीं हैं? हालांकि मदद करने के लिए धन्यवाद। – James

+0

नहीं, मैं 32-बिट संस्करण (एक्सेस 2000, विशिष्ट होने के लिए उपयोग कर रहा हूं - यह इस मशीन पर स्थापित एमएस ऑफिस का एकमात्र हिस्सा है)। –

+0

@ क्रिस्टियन स्पीच यह दिलचस्प है b/c मेरे पास 64 बिट शब्द है और मुझे प्रोग्रामफाइल बनाम प्रोग्राम प्रोग्राम (X86) का उपयोग करके अलग-अलग फ़ोल्डर्स मिलते हैं। मुझे आश्चर्य है कि अगर इस आदेश का उपयोग करते समय यह भूमिका निभाता है; उस बिंदु पर नहीं जहां मैं इसका परीक्षण करने के लिए समय लेना चाहता हूं, लेकिन जेम्स के लिए कुछ हो सकता है। : पी – ray

5

मैंने सोचा कि मैं इस चर्चा से निष्कर्षों का सारांश दूंगा।

किसी भी "प्रोग्राम फ़ाइल" से संबंधित वातावरण चर विंडोज (32 या 64 बिट) के साथ-साथ कार्यालय (32 या 64 बिट) के आधार पर इस प्रकार अलग-अलग होगा के लिए Environ के उत्पादन:

Windows Office ProgramFiles   PROGRAMFILES(X86)  ProgramW6432 
------- ------ ---------------------- --------------------- ---------------- 
32-bit 32-bit C:\Program Files  [empty string]   [empty string] 
64-bit 32-bit C:\Program Files (x86) C:\Program Files (x86) C:\Program Files 
64-bit 64-bit C:\Program Files  C:\Program Files (x86) C:\Program Files 

ध्यान दें कि विंडोज 64 बिट + ऑफिस 32 बिट सेटअप के लिए, Environ("ProgramFiles") का आउटपुट विंडोज में ProgramFiles पर्यावरण चर के वास्तविक मान के साथ मेल खाता है! कमांड प्रॉम्प्ट पर, echo %ProgramFiles%C:\Program Files देता है, C:\Program Files (x86) नहीं।

आप (के लिए 64-बिट Windows के लिए 32-बिट विंडोज C:\Program Files, और C:\Program Files (x86)) 32 बिट प्रोग्राम फ़ाइलों फ़ोल्डर के लिए पथ की जरूरत है तो आप इस सुविधा का उपयोग कर सकते हैं:

Function Get32BitProgramFilesPath() As String 
    If Environ("ProgramW6432") = "" Then 
     '32 bit Windows 
     Get32BitProgramFilesPath = Environ("ProgramFiles") 
    Else 
     '64 bit Windows 
     Get32BitProgramFilesPath = Environ("ProgramFiles(x86)") 
    End If 
End Function 
संबंधित मुद्दे