سؤال

لدي هذا كود بسيط أن إلحاق السجلات السجل إلى ملف نصي:

    public static void RecordToFile(string filename, Log log)
    {
            TextWriter textWriter = new StreamWriter(Constants.APP_PATH + 
                "\\" + filename, true);
            textWriter.WriteLine(log.ToString());
            textWriter.Close();
    }

هذا يعمل تماما في تطبيق نماذج Windows.ومع ذلك, باستخدام instsrv و srvany خدعة, أنا جعلت هذا خدمة ويندوز.يتم تشغيل الخدمة بخير بالوصول إلى قاعدة البيانات ، يقوم الاستفسارات و جميع...ما عدا هذا StreamWriter.سجل فقط لا تحصل على تحديث كما يجب.أي أفكار لماذا ؟

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

المحلول

وعلى الأرجح الخدمة قيد التشغيل ضمن بيانات اعتماد المستخدم الذي ليس لديه حقوق الوصول إلى هذا الدليل.

وهكذا تحقق من خصائص الحوار لخدمة، والتحقق من علامة التبويب تسجيل الدخول لمعرفة ما يسجل على النحو.

نصائح أخرى

الأسباب المحتملة:

  1. الثوابت.APP_PATH يشير إلى محرك الأقراص المعين - الخدمات لا تعمل في نفس بيئة المسجلين المستخدم, لذلك قد يكون المسار غير صالح
  2. أذونات - اعتمادا على ما المستخدم تشغيل الخدمة كما أنه قد لا يكون الوصول إلى نفس مجموعة من الدلائل أن WinForms التطبيق

وبدون مزيد من المعلومات ليس هناك الكثير الذي يمكن لأي شخص أن يساعد مع. ما هي الطريقة، بالضبط، هل لا تعمل؟ هل الحصول على استثناء؟ هل تفشل فقط بصمت؟

وقبل بضعة نصائح ...

1) لا تستخدم سلسلة سلسلة لخلق مسارات الملفات. استخدام System.IO.Path.Combine بدلا من ذلك. مثل هذا:

TextWriter textWriter = new StreamWriter(
    System.IO.Path.Combine(Constants.APP_PATH, filename), true);

2) ضع الكاتب في كتلة using(). مثل ذلك:

using(TextWriter textWriter = new StreamWriter(
        System.IO.Path.Combine(Constants.APP_PATH, filename), true))
{
    textWriter.WriteLine(log.ToString());
}

و3) تحقق من أن حساب خدمة يستخدم لديه حق الوصول إلى إنشاء / الكتابة الملفات في هذا الدليل. في كثير من الأحيان حسابات الخدمة مثل LOCAL_SYSTEM أو NETWORK_SERVICE لن يكون لها نفس الأذونات مثل حسابات المستخدمين شأنه. هذا يمكن أن يفسر لماذا يعمل كمستخدم ولكن ليس كخدمة. ويمكن أيضا أن يكون ذلك APP_PATH الخاصة بك نقاط ثابتة للمستخدم شيء معين، مثل تعيين محرك أقراص إلى مشاركة شبكة اتصال. تعيينات محرك الأقراص لا تمتد المستخدمين، لذلك هذا ويمكن أيضا أن تكون هذه القضية.

ودون أي مزيد من المعلومات كنت أعتقد أن الحساب الخدمة الخاص بك يعمل تحت لايوجد حقوق لفتح ملف للكتابة.

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