C # - Vista - إلغاء الضغط يجري الظاهري عند استخدام commonapplicationdata

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

سؤال

افترض UAC على. هذا لا يخلق مشكلة في إيقاف تشغيله.

لدي تطبيق AC # مع وظيفة النسخ الاحتياطي / استعادة واستخدام SQL Server 2005 Express.

يتم استخدام رمز للحصول على BackupPath لكلا النسخ الاحتياطي واستعادة واسم جميع الأغراض سيكون النسخ الاحتياطي

لتوليد مسار النسخ الاحتياطي

string path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
 path = Path.Combine(path, "CompName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 path = Path.Combine(path, "AppName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 return path;

عند النسخ الاحتياطي يقوم DB بإنشاء Backup.Dat في ** C: programData compname appname ** وليس لديه صعوبة في الزلزال من هذا الموقع إلى دليل مستهدف اختيار المستخدمين.

على استعادة لا يوجد لديه مشكلة في الحصول على الدليل المؤرشفة أو الملف، ولكن عندما يقوم Decompress، يذهب إلى ** C: Users username appdata local virtualstore programdata compname appname **

أحتاج إلى معرفة سبب ذهابي ملف إلغاء الضغط الخاص بي إلى متجر افتراضي حتى أتمكن من استعادة DB لأنه من ما أفهمه من البرمجة لنظام التشغيل Vista SQL، فلن يتمكن / لن تتمكن / الوصول إلى مسار المتجر الظاهري.

تحرير: فشل في توفير الضغط - لا أعتقد أن هذه هي المشكلة ولكن هنا.

private void DecompressArchiveFile(string compressedFile, string backupPath)
{
    GZipStream gzip = new GZipStream(new FileStream(compressedFile, FileMode.Open, FileAccess.Read, FileShare.None), CompressionMode.Decompress, false);
    FileStream fs = new FileStream(backupPath, FileMode.Create, FileAccess.Write, FileShare.None);

    byte[] buffer = new byte[10000];
    int count = -1;
    while (count != 0)
    {
        count = gzip.Read(buffer, 0, 10000);
        fs.Write(buffer, 0, count);
    }
    gzip.Close();
    fs.Close();
}

شكرا لأي جميع المساعدة -

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

المحلول

شاهد هذا تجاوز المكدس ذات الصلة سؤال, ، على وجه الخصوص من حلقة الوصل من هذا إجابه:

folderid_programdata / system.environment.specialfolder.commonaPplicationData.

لن يرغب المستخدم أبدا في استعراض هنا في Explorer، ويجب تغيير الإعدادات هنا على كل مستخدم على الجهاز. الموقع الافتراضي هو٪ SystemDrive٪ ProgramData، وهو مجلد مخفي، على تثبيت نظام التشغيل Windows Vista. سترغب في إنشاء الدليل الخاص بك وتعيين ACLS الذي تحتاجه في وقت التثبيت.

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

إذا كان لديهم حق الوصول إلى المجلد، فلا أعتقد أنك سوف تعمل في مشاكل في الفضية. ومع ذلك، يجب عليك تحديد تطبيقك حقا مع مستوى الامتياز الذي يتطلبه إضافة شيء من هذا القبيل إلى بيانك (تفاصيل):

<security>
  <requestedPrivileges>
    <requestedExecutionLevel level="asInvoker" />
  </requestedPrivileges>
</security>

هذا سيقوم بتعطيل الافتراضية لعمليتك. يمكنك معرفة ما إذا كانت عملية عملك تتم من خلال إضافة عمود "المحاكاة الافتراضية" إلى إدارة المهام قيد العرض - حدد الأعمدة ...

بالمناسبة، سيتم إنشاء الدليل. الإبداع () دليل الأدلة الأصلية

نصائح أخرى

أعتقد أنك تضغط على ميزة Vista الافتراضية - من المفترض أن تبقي تطبيقات القديمة التي تصرفت بشكل سيء من عدم العمل على نظام التشغيل Vista حيث لا يسمح لهم بالكتابة إلى٪ ProgramData٪.

يمكن أن يقرأ تطبيقك من٪ ProgramData٪ ولكن لا يكتب إليه. إذا كنت ترغب حقا في الكتابة تحت٪ ProgramData٪، فعليك تشغيل مرتفعة (أو تغيير DACL على الفئة الفرعية لإعلامك بالكتابة).

يرى http://technet.microsoft.com/en-us/magazine/cc160980.aspx. (إعادة توجيه البيانات) لمزيد من التفاصيل.

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