كيفية الحصول على المسار الفعلي للملف في ويندوز فيستا مع UAC؟

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

سؤال

وأنا أدعو CreateFile () لإنشاء ملف في دليل البيانات البرنامج. أنا باستخدام SHGetSpecialFolderPath () للحصول على اسم دير.

ولدي المستخدم مع ويندوز فيستا الذين CreateFile () سيعود خطأ 5 (تم رفض الوصول). سيكون من المفيد إذا عرفت أين CreateFile () كان يحاول فعلا لإنشاء ملف حتى نتمكن من التحقق أذونات المجلد له. مشكلة مع ويندوز فيستا (UAC) و، انها ليست محاولة لإنشاء ملف في الدليل مررت في. ويمكن أن يكون أيضا في دليل VirtualStore. وأضاف المصدر الارتباك هو هذا المستخدم هي الألمانية وعلى الرغم من SHGetSpecialFolderPath () يعود "C: \ برنامج البيانات \ بلاه بلاه" كمسار، وأنا لا أعتقد أن هذا في الواقع حيث كان المسار. أعتقد الألمانية فيستا يستخدم الكلمة الألمانية ل "بيانات برنامج". وأود أن تكون قادرة على معرفة المستخدم "هذا هو المسار الصحيح حيث نحاول إنشاء الملف. تحقق من أذونات الخاص بك على هذا المجلد."

وأنا أعلم أنك يمكن أن تحصل على مسار من مؤشر ملف مفتوح، ولكن في هذه الحالة CreateFile () فشل ذلك ليس لدي مؤشر مفتوح. كيف يمكنني الحصول على ويندوز فيستا ليقول لي المسار الفعلي حيث انها محاولة لإنشاء ملف؟

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

المحلول

واطلاق النار حتى عملية مراقبة ومشاهدة ما تقوم به: http://technet.microsoft.com/en-us/sysinternals/bb896645. ASPX

نصائح أخرى

إذا مع UAC مسارات المستخدمة ليست تلك التي تريد، ثم إعادة توجيه سارية المفعول. للتأكد من أن إعادة توجيه لا تحدث، إضافة <لأ href = "http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App- يتطلب / "يختلط =" نوفولو noreferrer "> واضح إلى التطبيق الخاص بك والذي يشير إلى ويندوز فيستا أن التطبيق الخاص بك مشفرة وعلى بينة من القيود المفروضة على الوصول (أي بشكل صحيح، وكنت لا أكتب على سبيل المثال، HKLM أو مجلد البرامج إذا التطبيق لا يحتاج الامتيازات الادارية لتشغيل).

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

تأكد من أنك تستخدم CSIDL_APPDATA وليس CSIDL_COMMON_APPDATA (واحد الأخير هو الوصول إليها إلا مع امتيازات المسؤول).

لالعثور على المسار الحقيقي (واحد تتوقعون) نقول للمستخدم إلى اكتب٪ APPDATA٪ في شريط المستكشف (أو ضرب ويندوز + R، ثم اكتب٪ APPDATA٪، أدخل). سيؤدي هذا إلى فتح اكسبلورر في هذا المجلد.

وما أفهمه هو أن ProgramData يستخدم من قبل ويندوز فيستا لإرسال الملفات التي كانت تحاول أن تكون مكتوبة داخل C: \ ملفات البرنامج، لكنها فشلت، لأن إلا إذا كنت تقوم بتشغيل التطبيق ك Admin لا يمكنك كتابة داخل ملفات البرنامج. ربما يجب عليك محاولة حفظ الملفات إلى المجلد APPDATA تحت المستخدم الحالي.

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