كيفية الكتابة بأمان إلى ملف السجل من مثيلتين من نفس التطبيق؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

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

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

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

أفضل عدم استخدام إطار إضافي موجود إذا تم تجنبه

أي مساعدة موضع تقدير.

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

المحلول

أ mutex. يمكن استخدامها لمزامنة التشكيلية لمورد مشترك مثل ملف السجل. هنا عينة.

نصائح أخرى

يمكنك دائما الكتابة إلى سجل أحداث النظام. لا يوجد أي تأمين أو أي شيء مطلوب ومشاهد الأحداث أكثر قوة من بعضها يمنحها الائتمان.

استجابة لتعليقك، طلب مستخدم آخر سؤال حول أذونات الكتابة للحصول على سجل الأحداث هنا. الجواب المرتبط بمقالة MSDN التي تصف كيفية أداء ذلك.

انظر هذا السؤال هنا.

يمكنك دودج المشكلة إذا كنت تفضل ...

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

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

طريقة واحدة لاختراقها ستكون في الذاكرة خريطة ملف السجل. بهذه الطريقة، تقوم كلا من مثيلات التطبيق بمشاركة نفس صورة الذاكرة الظاهرية للملف. ثم هناك عدد من الطرق لتنفيذ mutex داخل الملف.

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