2009-05-26 20 views
11

मुझे पता है कि निम्नलिखित काम करना चाहिए पुनः प्राप्त करने के लिए सबसे सुरक्षित तरीका क्या है:प्रणाली ड्राइव

Environment.GetEnvironmentVariable("windir", EnvironmentVariableTarget.Machine) 

इस कॉल के साथ मेरी समस्या यह है कि अगर किसी कारण से किसी को "windir" पर्यावरण वार को दूर करने का फैसला किया , यह काम नहीं करेगा।

क्या सिस्टम ड्राइव प्राप्त करने का एक और अधिक सुरक्षित तरीका है?

उत्तर

4

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

यहां सी # उपयोग के लिए तैयार किया गया फ़ंक्शन है। ;-)

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
    static extern uint GetWindowsDirectory(StringBuilder lpBuffer, uint uSize); 

    private string WindowsDirectory() 
    { 
     uint size = 0; 
     size = GetWindowsDirectory(null, size); 

     StringBuilder sb = new StringBuilder((int)size); 
     GetWindowsDirectory(sb, size); 

     return sb.ToString(); 
    } 

तो अगर आप वास्तव में ड्राइव विंडोज़ चल रहा है, जिस पर की जरूरत है, तो आप बाद में

System.IO.Path.GetPathRoot(WindowsDirectory()); 
+0

अरे, मैंने यही कहा! –

+0

@ रिचर्ड: यह सही है, लेकिन कंक्रीट दिशा को इंगित करने के बजाय मैंने एक नमूना जोड़ा, इस पर फ़ंक्शन का उपयोग कैसे किया जा सकता है। – Oliver

0

एक वातावरण चर SystemDrive

C:\>SET SystemDrive 
SystemDrive=C: 
+0

दुर्भाग्य से, यह विधि मूल WinD के समान समस्या से पीड़ित है आईआर पर्यावरण चर - एक उपयोगकर्ता मनमाने ढंग से अपने पर्यावरण से इसे हटा या हटा सकता है। –

8

कहा जाता है यह एक प्रणाली निर्देशिका (system32) के लिए पथ रिटर्न Theres।

Environment.GetFolderPath(Environment.SpecialFolder.System) 

आप इसका उपयोग करने में सक्षम हो सकते हैं, तो आपको पर्यावरण चर पर भरोसा करने की आवश्यकता नहीं है।

+0

यह ध्यान देने योग्य है कि GetFolderPath आपके पर्यावरण परिवर्तनीय भय को बढ़ाता है क्योंकि यह आंतरिक रूप से SHGetFolderPath का उपयोग करता है। –

2

आप विंडोज निर्देशिका पुनर्प्राप्त करने के लिए GetWindowsDirectory एपीआई का उपयोग कर सकते हैं।

17
string windir = Environment.SystemDirectory; // C:\windows\system32 
string windrive = Path.GetPathRoot(Environment.SystemDirectory); // C:\ 

नोट: यह संपत्ति आंतरिक रूप से GetSystemDirectory() Win32 API का उपयोग करती है। यह पर्यावरण चर पर भरोसा नहीं करता है।

1

कह सकते हैं कभी वातावरण चर (किसी भी स्क्रिप्ट या उपयोगकर्ता उन्हें बदल सकते हैं!)
पढ़ आधिकारिक विधि (एमएस आंतरिक, एक्सप्लोरर द्वारा उपयोग किया जाता है) दशकों के लिए एक Win32 एपीआई FAQ है (Google समूह, Win32, सिस्टम एपीआई देखें)