سؤال

ما هو المكان المناسب لتخزين ملفات بيانات البرنامج التي تكون هي نفسها لكل مستخدم ولكن يجب أن تكون قابلة للكتابة للبرنامج؟ما هو الموقع المكافئ على نظام التشغيل MS Windows XP؟لقد قرأت أن C:\ProgramData غير قابل للكتابة بعد التثبيت بواسطة المستخدمين العاديين.هل هذا صحيح؟كيف يمكنني استرداد هذا الدليل برمجيًا باستخدام Platform SDK؟

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

المحلول

SHGetFolderPath() مع CSIDL لـ CSIDL_COMMON_APPDATA.

اقرا المزيد من http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

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

نصائح أخرى

يوجد ملخص رائع للخيارات المختلفة هنا: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

أين يجب أن أكتب بيانات البرنامج بدلاً من ملفات البرنامج؟

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

في الحقيقة SHGetFolderPath تم إهماله.

SHGetKnownFolderPath يجب أن تستخدم بدلا من ذلك.

يمكنك استخدام:

CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);

يرى مقالة ريموند تشين حول هذا السؤال المحدد.

باختصار أنت تطلب أ ثغرة أمنية.

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