التسجيل مقابل.INI لتخزين إعدادات التطبيق القابلة للتكوين بواسطة المستخدم

StackOverflow https://stackoverflow.com/questions/6607

سؤال

أنا مبرمج جديد لنظام التشغيل Windows ولست متأكدًا من المكان الذي يجب أن أقوم فيه بتخزين إعدادات التطبيق القابلة للتكوين بواسطة المستخدم.أفهم الحاجة إلى توفير وسائل سهلة الاستخدام للمستخدم لتغيير إعدادات التطبيق ، مثل تحرير | نموذج الإعدادات أو ما شابه.ولكن أين يجب أن أقوم بتخزين القيم بعد أن يضغط المستخدم على الزر "تطبيق" في هذا النموذج؟

ما هي إيجابيات وسلبيات تخزين الإعدادات في سجل Windows مقابل تسجيل Windows؟تخزينها في ملف INI محلي أو ملف تكوين أو ما شابه؟

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

المحلول

إيجابيات ملف التكوين:

  1. سهل الفعل.لا تحتاج إلى معرفة أي مكالمات Windows API.كل ما تحتاجه هو معرفة واجهة الإدخال/الإخراج للملفات الخاصة بلغة البرمجة الخاصة بك.
  2. محمول.إذا قمت بنقل تطبيقك إلى نظام تشغيل آخر، فلن تحتاج إلى تغيير تنسيق الإعدادات لديك.
  3. قابل للتحرير من قبل المستخدم.يمكن للمستخدم تحرير ملف التكوين خارج تنفيذ البرنامج.

إيجابيات التسجيل:

  1. يؤمن.لا يمكن للمستخدم حذف ملف التكوين عن طريق الخطأ أو إتلاف البيانات إلا إذا كان على علم بأمر regedit.وبعد ذلك يطلب المستخدم المتاعب فقط.
  2. أنا لست مبرمجًا خبيرًا في Windows، لكنني متأكد من أن استخدام السجل يجعل من السهل القيام بأشياء أخرى خاصة بنظام Windows (الإعدادات الخاصة بالمستخدم، أو عناصر إدارة الشبكة مثل سياسة المجموعة، أو أي شيء آخر).

إذا كنت تحتاج فقط إلى طريقة بسيطة لتخزين معلومات التكوين، فإنني أوصي بملف تكوين، باستخدام INI أو XML كتنسيق.أقترح استخدام السجل فقط إذا كان هناك شيء محدد تريد التخلص منه من استخدام السجل.

نصائح أخرى

جيف أتوود لديه عظيم شرط حول تسجيل Windows ولماذا من الأفضل استخدام ملفات .INI بدلاً من ذلك.

ستكون حياتي أسهل كثيرًا إذا تم تخزين الإعدادات الخاصة بكل تطبيق في مكان يمكنني رؤيتهم بسهولة ومعالجتهم وعمل نسخة احتياطية لهم.مثل القول...في ملفات INI.

  • التسجيل هو أ نقطة فشل واحدة.لهذا السبب، تبدأ كل نصيحة حول تحرير السجل تجدها على الإطلاق بإخلاء مسؤولية صارخ حول كيفية كسر جهاز الكمبيوتر الخاص بك باستخدام regedit.
  • التسجيل هو مبهمة وثنائية.بقدر ما لا أحب ضريبة القوس، فإن ملفات تكوين XML على الأقل تكون قابلة للقراءة بشكل معقول من قبل الإنسان، وتسمح بالعدد الذي تراه مناسبًا من التعليقات.
  • التسجيل يجب أن يكون متزامن مع نظام الملفات.احذف أحد التطبيقات دون "إلغاء تثبيته" وسيتبقى لديك سجل قديم.أو إذا كان التطبيق يحتوي على برنامج إلغاء تثبيت مكتوب بشكل سيئ.لم يعد نظام الملفات عبارة عن بيان السجل، بل يجب أن يظل متزامنًا مع السجل بطريقة أو بأخرى.إنه انتهاك كامل لمبدأ DRY.
  • التسجيل هو المتجانسة.لنفترض أنك تريد نقل تطبيق ما إلى مسار مختلف على جهازك، أو حتى إلى جهاز مختلف تمامًا.حظًا سعيدًا في استخراج الإعدادات ذات الصلة بهذا التطبيق المعين من قطران السجل العملاق.عادةً ما يحتوي تطبيق معين على العشرات من الإعدادات المنتشرة في جميع أنحاء السجل.

وفقا لوثائق GetPrivateProfileString, ، يجب عليك استخدام السجل لتخزين معلومات التهيئة.

ومع ذلك، إذا كنت لا تزال ترغب في استخدام ملفات .ini، واستخدام واجهات برمجة التطبيقات لملف التعريف القياسي (GetPrivateProfileString, WritePrivateProfileString, وما شابه) للوصول إليها، فهي توفر طرقًا مدمجة لتوفير "ملفات .ini الافتراضية" المدعومة بالسجل تلقائيًا.الفوز!

هناك سؤال مماثل هنا الذي يغطي بعض إيجابيات وسلبيات.

أود أن أقترح عدم استخدام السجل إلا إذا كان التطبيق الخاص بك في حاجة إليه تمامًا.من وجهة نظري، تحاول Microsoft عدم تشجيع استخدام السجل نظرًا لمرونة ملفات الإعدادات.أيضًا، لا أوصي باستخدام ملفات .ini، ولكن بدلاً من ذلك استخدم بعضًا من ملفات .ini وظيفة مدمجة إلى .Net لحفظ إعدادات المستخدم/التطبيق.

استخدام ملف ini، الموجود في نفس دليل التطبيق، يجعل من الممكن عمل نسخة احتياطية له مع التطبيق.لذا، بعد إعادة تحميل نظام التشغيل الخاص بك، يمكنك ببساطة استعادة دليل التطبيق، وسيكون لديك التكوين الخاص بك بالطريقة التي تريدها.

هناك ميزة أخرى لاستخدام ملف INI على السجل والتي لم أرها مذكورة:إذا كان المستخدم يستخدم نوعًا ما من التشفير المستند إلى وحدة التخزين/الملف، فيمكنه تشفير ملف INI بسهولة تامة.مع التسجيل، ربما سيكون الأمر أكثر إشكالية.

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

وأنا أتفق مع دانيال.إذا كان تطبيقًا كبيرًا، فأعتقد أنني سأفعل أشياء في السجل.إذا كان تطبيقًا صغيرًا وتريد أن تكون جوانبه قابلة للتكوين بواسطة المستخدم دون إنشاء نموذج تكوين، فابحث عن ملف INI سريع.

عادةً ما أقوم بالتحليل على النحو التالي (إذا كان التنسيق الموجود في ملف .ini هو الخيار = القيمة، 1 لكل سطر، والتعليقات تبدأ بـ #):

static void Parse()
{
    StreamReader tr = new StreamReader("config.ini");
    string line;
    Dictionary<string, string> config = new Dictionary<string, string>();

    while ((line = tr.ReadLine()) != null)
    {
        // Allow for comments and empty lines.
        if (line == "" || line.StartsWith("#"))
            continue;

        string[] kvPair = line.Split('=');

        // Format must be option = value.
        if (kvPair.Length != 2)
            continue;

        // If the option already exists, it's overwritten.
        config[kvPair[0].Trim()] = kvPair[1].Trim();
    }
}

يحرر:آسف، اعتقدت أنك حددت اللغة.التنفيذ أعلاه موجود في C#.

تم تحسين السجل للوصول السريع والتحديث السهل، وهي الطريقة الوحيدة للقيام بأشياء معينة خاصة بنظام Windows مثل الارتباط بملحق.ويمكنك تجاهل الجدل الدائر حول حذف دليل واحد لإلغاء تثبيت برنامجك - لن يسمح لك نظام التشغيل Windows Vista بتعديل الملفات الموجودة في دليل Program Files، لذا يجب أن ينتقل التكوين الخاص بك إلى مجلد مختلف على أي حال.

هناك إرشادات عامة لبرمجة Windows - افعل الأشياء بالطريقة التي تتوقعها Microsoft منك، وستكون حياتك أسهل كثيرًا.

ومع ذلك، أستطيع أن أرى جاذبية ملف INI، ولن ألوم أي شخص على النظر فيه.

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

أستخدم السجل لتخزين الإعدادات على مستوى النظام.أي عندما يحتاج برنامجان أو أكثر إلى نفس الإعداد بالضبط.بمعنى آخر، إعداد مشترك بين عدة برامج.

في جميع الحالات الأخرى، أستخدم ملف تكوين محلي يقع إما في نفس المسار مثل الملف القابل للتنفيذ أو في مستوى واحد لأسفل (في دليل التكوين).تمت تغطية الأسباب بالفعل في إجابات أخرى (محمول، ويمكن تحريره باستخدام محرر نصوص وما إلى ذلك).

لماذا وضع الإعدادات على مستوى النظام في التسجيل؟حسنًا، لقد وجدت أنه إذا تمت مشاركة أحد الإعدادات ولكنك تستخدم ملفات التكوين المحلية، فسينتهي بك الأمر بتكرار الإعدادات.قد يعني هذا أنك ستحتاج في النهاية إلى تغيير الإعداد في أماكن متعددة.

على سبيل المثال، لنفترض أن البرنامج A والبرنامج B كلاهما يشيران إلى نفس قاعدة البيانات.يمكن أن يكون لديك إعداد تسجيل "على مستوى النظام" لسلسلة الاتصال.إذا كنت تريد الإشارة إلى قاعدة بيانات مختلفة، فيمكنك تغيير سلسلة الاتصال في مكان واحد، وسيتم الآن تشغيل كلا البرنامجين على قاعدة البيانات الأخرى.

ملاحظة - لا فائدة من استخدام السجل بهذه الطريقة إذا لم يكن برنامجان أو أكثر بحاجة إلى استخدام نفس القيم.مثل البرنامج A والبرنامج B يحتاج كل منهما إلى سلسلة اتصال بقاعدة البيانات يمكن تكون هي نفسها، ولكن ليس دائما.على سبيل المثال، أريد أن يستخدم البرنامج "ب" الآن قاعدة بيانات اختبارية ولكن يجب أن يستمر البرنامج "أ" في استخدام قاعدة بيانات الإنتاج.

في المثال أعلاه، يمكن أن يكون لديك بعض التكوينات المحلية التي تتجاوز الإعدادات على مستوى النظام، ولكن قد يصبح الأمر معقدًا للغاية بالنسبة للمهام البسيطة.

هناك عيب واحد في ملفات ini أو config وهو تحديد موقعها إذا كان لدى المستخدم خيار تحديد مكان تثبيت البرنامج.

هل تطبيقك مثبت مع برنامج إعداد أم أنه مجرد "استخراج وتشغيل"؟في الحالة الأولى، انظر إلى الإيجابيات والسلبيات الموضحة هنا.لكن بالنسبة للاستخراج والتشغيل، فإن السجل في رأيي أمر "محظور"، حيث يتوقع الأشخاص أن يكونوا قادرين على حذف مجلد التطبيق ببساطة للتخلص من برنامجك.

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