ويندوز 7 - أين وكيف يمكنني تخزين بيانات مستقلة المستخدم الجهاز؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي التطبيق (32 بت ج ++) يعمل تحت XP أنني بحاجة إلى التكيف لتعمل تحت ويندوز 7 وفيستا. انها تحتاج لتخزين بضع عشرات بايت من البيانات في مكان مستقل عن العضو. تحت XP، I تخزين البيانات في التسجيل تحت HKEY_LOCAL_MACHINE \ SOFTWARE. عند تشغيل التطبيق على ويندوز 7 إدخالات التسجيل هي الظاهرية أوتوماتيكية ويحصل كل مستخدم نسخة منفصلة من البيانات.

والسجل غير ظاهري-أوتوماتيكية يبدو وكأنه المكان المنطقي للبيانات ولكن ليس لدي أي فكرة عن كيفية التوجه نحو ذلك. وألاحظ أن هناك العديد من التطبيقات التي فعلا تخزين البيانات هناك. كيف لا تذهب عن القيام بذلك؟

وأنا أيضا على استعداد لتخزين البيانات في مكان آخر، غير أن هناك بعض نعرف جيدا مستودع العالمي لذلك؟ ملف واحد صغير هو كل ما تحتاج.

وأنا أكثر أو أقل جاهل كامل الحقوق / الامتيازات التجارية لذلك أي تلميحات، والمؤشرات وغيرها محل تقدير كبير.

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

المحلول

واحدة من أهداف التصميم من ويندوز 7 هو لعزل بيانات المستخدم والتطبيقات. هذا هو لتحسين الخصوصية، والأمن، والتخصيص. في الواقع، مستخدمين القياسي في ويندوز 7 لا يمكن تغيير البيانات من المستخدمين الآخرين.

والأماكن قياسية لتخزين بيانات التطبيق يتم إرجاع من قبل في System.Environment.SpecialFolder التعداد. لاحظ أن ليس كل المجلدات للقراءة أو للكتابة من قبل كافة المستخدمين. على سبيل المثال، CommonApplicationData غير قابل للقراءة من قبل كافة المستخدمين، ولكن للكتابة فقط من قبل أولئك مع سياسة ملائمة، مثل المسؤولين.

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

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

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

نصائح أخرى

وIMHO، انها من غير المعقول أن أعتقد أن الكثير من الناس سوف يكون المستخدمين الفرديين تثبيت نسخهم الخاصة من مجموعة من البرامج. في الواقع فإن العديد من حزم لا يتم تثبيت ما لم يتم القيام به تحت ADMIN (ALLUSERS = 1). إذا وسيلة معقولة لتسهيل نظام واسع بتثبيت في بعض مستوى الحماية أقل من ADMIN لا يتم توفيرها، وسوف تظل تثبيت مستوى ADMIN القاعدة.

وعلى سبيل المثال، لماذا لا يمكن أن يسمح بتثبيت بعض غير ADMIN المستخدم (مع امتيازات المتوسطة) لإنشاء مفاتيح التسجيل في جزء محدودة من التسجيل (HKLM \ SOFTWARE \ حزمة) والدلائل في جميع المستخدمين \ APPLICATION DATA \ حزمة؟

ولقد قررت أن تجعل ADMIN المطلوبة (ALLUSERS = 1). MSI وإنشاء مفاتيح التسجيل مع حماية تعديلها.

وهكذا، في الحالة التي تكون فيها بلدي العميل لديه محطة عمل مخصصة طلبنا (التي تستمد البيانات من الجيد ملف INI القديم الذي سنقوم ص + w ل) رسالتنا لموظفي تقنية المعلومات لديهم هو أنها سوف تحتاج إلى تثبيت على نفس الجهاز لكل مستخدم لديهم؟

ونحن بحاجة لقراءة / الكتابة إلى (تحت ويندوز 7 / فيستا): Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData) + @ "\ GoScan \ GoScan.ini"

ولكن مثل الأخرى وقد وجد من أذونات المستخدم العادي لا يكفي لص + ث. هل ممارسة "مقبولة" لتغيير أذونات الدليل / ملف بعد الانتهاء من المثبت أو ربما أثناء التثبيت (غير متأكد من حيث القيام بذلك في VS مشروع إعداد 2008).

و-Paul

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