سؤال

أعلم أن ما يلي يجب أن يعمل:

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

مشكلتي في هذه المكالمة هي أنه إذا قرر شخص ما لسبب ما إزالة "Windir" ENV VAR، فلن يعمل هذا.

هل هناك طريقة أكثر أمانا للحصول على محرك الأقراص؟

هل كانت مفيدة؟

المحلول

شيء واحد، ربما أسيء فهمه هو أنك تريد محرك الأقراص النظام، ولكن باستخدام "Windir"، ستحصل على مجلد Windows. لذلك إذا كنت بحاجة إلى طريقة آمنة للحصول على مجلد Windows، يجب عليك استخدام وظيفة API القديمة الجيدة GetWindowsDirectory.

هنا هي الوظيفة المعدة للاستخدام C #. ؛-)

    [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();
    }

لذلك إذا كنت بحاجة حقا إلى محرك الأقراص الذي يعمل عليه Windows، فيمكنك الاتصال بذلك بعد ذلك

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

نصائح أخرى

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

ملاحظة: يستخدم هذا العقار داخليا API GetSystemDirectory () Win32 واجهة برمجة التطبيقات. لا يعتمد على متغيرات البيئة.

يؤدي هذا المرء إلى إرجاع المسار إلى دليل النظام (SYSTEM32).

Environment.GetFolderPath(Environment.SpecialFolder.System)

قد تكون قادرا على استخدام ذلك، فأنت لا تحتاج إلى الاعتماد على متغيرات البيئة.

يمكنك استعمال ال getwindowsdirectory. API لاسترداد دليل Windows.

لم تقرأ متغيرات البيئة (أي برنامج نصي أو مستخدم يمكن أن يغيرها!)
ال الرسمية الطريقة (MS الداخلية، المستخدمة من قبل Explorer) هي FIN32 API الأسئلة الشائعة لعقود (انظر مجموعات Google، Win32، نظام API)

هناك متغير بيئة يسمى SystemDrive

C:\>SET SystemDrive
SystemDrive=C:
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top