سؤال

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

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

لدي myapplication.exe ، وقارئ الترخيص الخاص بي في DLL منفصل يسمى myapplicationTools. أنا أقرأ/أكتب ملف الترخيص مثل SO:

       //Read
       StreamReader reader = new StreamReader(path + "license.lic");

       //Write
       StreamWriter writer2 = new StreamWriter(path + "License.lic");
       string str = Convert.ToBase64String(sharedkey.Key);
       writer2.WriteLine(str);
       writer2.Close();

شكرًا

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

المحلول

بسبب UAC ، لا يحصل برنامجك على امتيازات إدارية.

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


بالمناسبة ، يجب عليك استخدام Path.Combine طريقة لإنشاء مسارات.
أيضًا ، إذا كنت تريد فقط كتابة سلسلة واحدة إلى ملف ، فيجب عليك الاتصال File.WriteAllText.
علي سبيل المثال:

File.WriteAllText(Path.Combine(path, "License.lic"), Convert.ToBase64String(sharedkey.Key));

نصائح أخرى

استخدم AppData بدلاً من ذلك. هناك متغير البيئة لهذا. يمكنك رؤية هذا من خلال الانتقال إلى Explorer وكتابة ٪ AppData ٪. سوف يأخذك إلى المجلد المناسب. للوصول إلى هذا في C# لقد كتبت الوظيفة التالية.

    /// <summary>
    /// Gets the path where we store Application Data.
    /// </summary>
    /// <returns>The Application Data path</returns>
    public static string GetAppDataPath()
    {
        string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        dir = System.IO.Path.Combine(dir, "MyCompany\\MyApplication");
        System.IO.Directory.CreateDirectory(dir);

        return dir;
    }

تحتاج إلى وضع ملفات قابلة للكتابة في مجلد تطبيق المستخدم - ملفات البرنامج غير قابلة للكتابة من قبل المستخدمين العاديين. IIRC ، في Win7 الموقع الافتراضي هو C: Users [username] AppData [AppName]. يجب أن لا تعمل كمسؤول فقط للكتابة في ملفات البرنامج.

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